xref: /aosp_15_r20/external/armnn/profiling/client/include/backends/IBackendProfiling.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2020 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include <client/include/CounterStatus.hpp>
9 #include <client/include/CounterValue.hpp>
10 #include <client/include/IProfilingService.hpp>
11 #include <client/include/ISendCounterPacket.hpp>
12 #include <client/include/ISendTimelinePacket.hpp>
13 #include <client/include/ProfilingOptions.hpp>
14 #include <client/include/Timestamp.hpp>
15 
16 #include <common/include/IProfilingGuidGenerator.hpp>
17 #include <common/include/Optional.hpp>
18 
19 #include <memory>
20 #include <vector>
21 
22 namespace arm
23 {
24 
25 namespace pipe
26 {
27 
28 class IRegisterBackendCounters
29 {
30 public:
31     virtual void RegisterCategory(const std::string& categoryName) = 0;
32 
33     virtual uint16_t RegisterDevice(const std::string& deviceName,
34                                     uint16_t cores = 0,
35                                     const arm::pipe::Optional<std::string>& parentCategoryName
36                                         = arm::pipe::EmptyOptional()) = 0;
37 
38     virtual uint16_t RegisterCounterSet(const std::string& counterSetName,
39                                         uint16_t count = 0,
40                                         const arm::pipe::Optional<std::string>& parentCategoryName
41                                             = arm::pipe::EmptyOptional()) = 0;
42 
43     virtual uint16_t RegisterCounter(const uint16_t uid,
44         const std::string& parentCategoryName,
45         uint16_t counterClass,
46         uint16_t interpolation,
47         double multiplier,
48         const std::string& name,
49         const std::string& description,
50         const arm::pipe::Optional<std::string>& units      = arm::pipe::EmptyOptional(),
51         const arm::pipe::Optional<uint16_t>& numberOfCores = arm::pipe::EmptyOptional(),
52         const arm::pipe::Optional<uint16_t>& deviceUid     = arm::pipe::EmptyOptional(),
53         const arm::pipe::Optional<uint16_t>& counterSetUid = arm::pipe::EmptyOptional()) = 0;
54 
~IRegisterBackendCounters()55     virtual ~IRegisterBackendCounters() {}
56 };
57 
58 class IBackendProfiling
59 {
60 public:
61     static std::unique_ptr<IBackendProfiling> CreateBackendProfiling(const ProfilingOptions& options,
62                                                                      IProfilingService& profilingService,
63                                                                      const std::string& backendId);
~IBackendProfiling()64     virtual ~IBackendProfiling()
65     {}
66 
67     virtual std::unique_ptr<IRegisterBackendCounters>
68             GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0;
69 
70     virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0;
71 
72     virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0;
73 
74     virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0;
75 
76     virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0;
77 
78     virtual std::vector<CounterStatus> GetActiveCounters() = 0;
79 
80     virtual bool IsProfilingEnabled() const = 0;
81 
82 };
83 
84 }    // namespace pipe
85 
86 }    // namespace arm
87