blob: a649ece74f7fcf60a452bed593e4c1630b4c0673 [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{
21 uint16_t counterId;
22 uint32_t counterValue;
23};
24
25struct Timestamp
26{
27 uint64_t timestamp;
28 std::vector<CounterValue> counterValues;
29};
30
31struct CounterStatus
32{
James Conroy2dcd3fe2020-02-06 18:34:52 +000033 CounterStatus(uint16_t backendCounterId,
34 uint16_t globalCounterId,
35 bool enabled,
36 uint32_t samplingRateInMicroseconds)
37 : m_BackendCounterId(backendCounterId),
38 m_GlobalCounterId(globalCounterId),
39 m_Enabled(enabled),
40 m_SamplingRateInMicroseconds(samplingRateInMicroseconds) {}
Colm Donelane49755b2020-01-29 15:22:43 +000041 uint16_t m_BackendCounterId;
42 uint16_t m_GlobalCounterId;
43 bool m_Enabled;
44 uint32_t m_SamplingRateInMicroseconds;
45};
46
47class IRegisterBackendCounters
48{
49public:
Jim Flynn97897022020-02-02 12:52:59 +000050 virtual void RegisterCategory(const std::string& categoryName,
51 const Optional<uint16_t>& deviceUid = EmptyOptional(),
52 const Optional<uint16_t>& counterSetUid = EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000053
Jim Flynn97897022020-02-02 12:52:59 +000054 virtual uint16_t RegisterDevice(const std::string& deviceName,
55 uint16_t cores = 0,
56 const Optional<std::string>& parentCategoryName = EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000057
Jim Flynn97897022020-02-02 12:52:59 +000058 virtual uint16_t RegisterCounterSet(const std::string& counterSetName,
59 uint16_t count = 0,
60 const Optional<std::string>& parentCategoryName = EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000061
Jim Flynn97897022020-02-02 12:52:59 +000062 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
74 virtual ~IRegisterBackendCounters() {}
Colm Donelane49755b2020-01-29 15:22:43 +000075};
76
77class IBackendProfiling
78{
Colm Donelane49755b2020-01-29 15:22:43 +000079public:
80 virtual ~IBackendProfiling()
81 {}
82
Colm Donelan1aff3932020-02-05 17:48:59 +000083 virtual std::unique_ptr<IRegisterBackendCounters>
James Conroy2dcd3fe2020-02-06 18:34:52 +000084 GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000085
Colm Donelan1aff3932020-02-05 17:48:59 +000086 virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000087
Colm Donelan1aff3932020-02-05 17:48:59 +000088 virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000089
Colm Donelan1aff3932020-02-05 17:48:59 +000090 virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000091
Colm Donelan1aff3932020-02-05 17:48:59 +000092 virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000093
Colm Donelan1aff3932020-02-05 17:48:59 +000094 virtual std::vector<CounterStatus> GetActiveCounters() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000095
Colm Donelan1aff3932020-02-05 17:48:59 +000096 virtual bool IsProfilingEnabled() const = 0;
97
Colm Donelane49755b2020-01-29 15:22:43 +000098};
James Conroy2dcd3fe2020-02-06 18:34:52 +000099
Colm Donelane49755b2020-01-29 15:22:43 +0000100} // namespace profiling
James Conroy2dcd3fe2020-02-06 18:34:52 +0000101
Colm Donelane49755b2020-01-29 15:22:43 +0000102} // namespace armnn