xref: /aosp_15_r20/external/armnn/profiling/common/include/ICounterDirectory.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2019 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #pragma once
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include "Counter.hpp"
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <string>
11*89c4ff92SAndroid Build Coastguard Worker #include <vector>
12*89c4ff92SAndroid Build Coastguard Worker #include <memory>
13*89c4ff92SAndroid Build Coastguard Worker #include <unordered_set>
14*89c4ff92SAndroid Build Coastguard Worker #include <unordered_map>
15*89c4ff92SAndroid Build Coastguard Worker 
16*89c4ff92SAndroid Build Coastguard Worker namespace arm
17*89c4ff92SAndroid Build Coastguard Worker {
18*89c4ff92SAndroid Build Coastguard Worker 
19*89c4ff92SAndroid Build Coastguard Worker namespace pipe
20*89c4ff92SAndroid Build Coastguard Worker {
21*89c4ff92SAndroid Build Coastguard Worker 
22*89c4ff92SAndroid Build Coastguard Worker // Forward declarations
23*89c4ff92SAndroid Build Coastguard Worker class Category;
24*89c4ff92SAndroid Build Coastguard Worker class Device;
25*89c4ff92SAndroid Build Coastguard Worker class CounterSet;
26*89c4ff92SAndroid Build Coastguard Worker 
27*89c4ff92SAndroid Build Coastguard Worker // Profiling objects smart pointer types
28*89c4ff92SAndroid Build Coastguard Worker using CategoryPtr   = std::unique_ptr<Category>;
29*89c4ff92SAndroid Build Coastguard Worker using DevicePtr     = std::unique_ptr<Device>;
30*89c4ff92SAndroid Build Coastguard Worker using CounterSetPtr = std::unique_ptr<CounterSet>;
31*89c4ff92SAndroid Build Coastguard Worker using CounterPtr    = std::shared_ptr<Counter>;
32*89c4ff92SAndroid Build Coastguard Worker 
33*89c4ff92SAndroid Build Coastguard Worker // Profiling objects collection types
34*89c4ff92SAndroid Build Coastguard Worker using Categories  = std::unordered_set<CategoryPtr>;
35*89c4ff92SAndroid Build Coastguard Worker using Devices     = std::unordered_map<uint16_t, DevicePtr>;
36*89c4ff92SAndroid Build Coastguard Worker using CounterSets = std::unordered_map<uint16_t, CounterSetPtr>;
37*89c4ff92SAndroid Build Coastguard Worker using Counters    = std::unordered_map<uint16_t, CounterPtr>;
38*89c4ff92SAndroid Build Coastguard Worker 
39*89c4ff92SAndroid Build Coastguard Worker // Profiling objects collection iterator types
40*89c4ff92SAndroid Build Coastguard Worker using CategoriesIt  = Categories::const_iterator;
41*89c4ff92SAndroid Build Coastguard Worker using DevicesIt     = Devices::const_iterator;
42*89c4ff92SAndroid Build Coastguard Worker using CounterSetsIt = CounterSets::const_iterator;
43*89c4ff92SAndroid Build Coastguard Worker using CountersIt    = Counters::const_iterator;
44*89c4ff92SAndroid Build Coastguard Worker 
45*89c4ff92SAndroid Build Coastguard Worker class Category final
46*89c4ff92SAndroid Build Coastguard Worker {
47*89c4ff92SAndroid Build Coastguard Worker public:
48*89c4ff92SAndroid Build Coastguard Worker     // Constructors
Category(const std::string & name)49*89c4ff92SAndroid Build Coastguard Worker     Category(const std::string& name)
50*89c4ff92SAndroid Build Coastguard Worker         : m_Name(name)
51*89c4ff92SAndroid Build Coastguard Worker     {}
52*89c4ff92SAndroid Build Coastguard Worker 
53*89c4ff92SAndroid Build Coastguard Worker     // Fields
54*89c4ff92SAndroid Build Coastguard Worker     std::string m_Name;
55*89c4ff92SAndroid Build Coastguard Worker 
56*89c4ff92SAndroid Build Coastguard Worker     // Connections
57*89c4ff92SAndroid Build Coastguard Worker     std::vector<uint16_t> m_Counters;      // The UIDs of the counters associated with this category
58*89c4ff92SAndroid Build Coastguard Worker };
59*89c4ff92SAndroid Build Coastguard Worker 
60*89c4ff92SAndroid Build Coastguard Worker class Device final
61*89c4ff92SAndroid Build Coastguard Worker {
62*89c4ff92SAndroid Build Coastguard Worker public:
63*89c4ff92SAndroid Build Coastguard Worker     // Constructors
Device(uint16_t deviceUid,const std::string & name,uint16_t cores)64*89c4ff92SAndroid Build Coastguard Worker     Device(uint16_t deviceUid, const std::string& name, uint16_t cores)
65*89c4ff92SAndroid Build Coastguard Worker         : m_Uid(deviceUid)
66*89c4ff92SAndroid Build Coastguard Worker         , m_Name(name)
67*89c4ff92SAndroid Build Coastguard Worker         , m_Cores(cores)
68*89c4ff92SAndroid Build Coastguard Worker     {}
69*89c4ff92SAndroid Build Coastguard Worker 
70*89c4ff92SAndroid Build Coastguard Worker     // Fields
71*89c4ff92SAndroid Build Coastguard Worker     uint16_t    m_Uid;
72*89c4ff92SAndroid Build Coastguard Worker     std::string m_Name;
73*89c4ff92SAndroid Build Coastguard Worker     uint16_t    m_Cores;
74*89c4ff92SAndroid Build Coastguard Worker };
75*89c4ff92SAndroid Build Coastguard Worker 
76*89c4ff92SAndroid Build Coastguard Worker class CounterSet final
77*89c4ff92SAndroid Build Coastguard Worker {
78*89c4ff92SAndroid Build Coastguard Worker public:
79*89c4ff92SAndroid Build Coastguard Worker     // Constructors
CounterSet(uint16_t counterSetUid,const std::string & name,uint16_t count)80*89c4ff92SAndroid Build Coastguard Worker     CounterSet(uint16_t counterSetUid, const std::string& name, uint16_t count)
81*89c4ff92SAndroid Build Coastguard Worker         : m_Uid(counterSetUid)
82*89c4ff92SAndroid Build Coastguard Worker         , m_Name(name)
83*89c4ff92SAndroid Build Coastguard Worker         , m_Count(count)
84*89c4ff92SAndroid Build Coastguard Worker     {}
85*89c4ff92SAndroid Build Coastguard Worker 
86*89c4ff92SAndroid Build Coastguard Worker     // Fields
87*89c4ff92SAndroid Build Coastguard Worker     uint16_t    m_Uid;
88*89c4ff92SAndroid Build Coastguard Worker     std::string m_Name;
89*89c4ff92SAndroid Build Coastguard Worker     uint16_t    m_Count;
90*89c4ff92SAndroid Build Coastguard Worker };
91*89c4ff92SAndroid Build Coastguard Worker 
92*89c4ff92SAndroid Build Coastguard Worker class ICounterDirectory
93*89c4ff92SAndroid Build Coastguard Worker {
94*89c4ff92SAndroid Build Coastguard Worker public:
~ICounterDirectory()95*89c4ff92SAndroid Build Coastguard Worker     virtual ~ICounterDirectory() {}
96*89c4ff92SAndroid Build Coastguard Worker 
97*89c4ff92SAndroid Build Coastguard Worker     // Getters for counts
98*89c4ff92SAndroid Build Coastguard Worker     virtual uint16_t GetCategoryCount()   const = 0;
99*89c4ff92SAndroid Build Coastguard Worker     virtual uint16_t GetDeviceCount()     const = 0;
100*89c4ff92SAndroid Build Coastguard Worker     virtual uint16_t GetCounterSetCount() const = 0;
101*89c4ff92SAndroid Build Coastguard Worker     virtual uint16_t GetCounterCount()    const = 0;
102*89c4ff92SAndroid Build Coastguard Worker 
103*89c4ff92SAndroid Build Coastguard Worker     // Getters for collections
104*89c4ff92SAndroid Build Coastguard Worker     virtual const Categories&  GetCategories()  const = 0;
105*89c4ff92SAndroid Build Coastguard Worker     virtual const Devices&     GetDevices()     const = 0;
106*89c4ff92SAndroid Build Coastguard Worker     virtual const CounterSets& GetCounterSets() const = 0;
107*89c4ff92SAndroid Build Coastguard Worker     virtual const Counters&    GetCounters()    const = 0;
108*89c4ff92SAndroid Build Coastguard Worker 
109*89c4ff92SAndroid Build Coastguard Worker     // Getters for profiling objects
110*89c4ff92SAndroid Build Coastguard Worker     virtual const Category*   GetCategory(const std::string& name) const = 0;
111*89c4ff92SAndroid Build Coastguard Worker     virtual const Device*     GetDevice(uint16_t uid)              const = 0;
112*89c4ff92SAndroid Build Coastguard Worker     virtual const CounterSet* GetCounterSet(uint16_t uid)          const = 0;
113*89c4ff92SAndroid Build Coastguard Worker     virtual const Counter*    GetCounter(uint16_t uid)             const = 0;
114*89c4ff92SAndroid Build Coastguard Worker };
115*89c4ff92SAndroid Build Coastguard Worker 
116*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
117*89c4ff92SAndroid Build Coastguard Worker 
118*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
119