xref: /aosp_15_r20/external/armnn/profiling/client/src/RegisterBackendCounters.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 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 #include "RegisterBackendCounters.hpp"
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker namespace arm
9*89c4ff92SAndroid Build Coastguard Worker {
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker namespace pipe
12*89c4ff92SAndroid Build Coastguard Worker {
13*89c4ff92SAndroid Build Coastguard Worker 
RegisterCategory(const std::string & categoryName)14*89c4ff92SAndroid Build Coastguard Worker void RegisterBackendCounters::RegisterCategory(const std::string& categoryName)
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker      m_CounterDirectory.RegisterCategory(categoryName);
17*89c4ff92SAndroid Build Coastguard Worker }
18*89c4ff92SAndroid Build Coastguard Worker 
RegisterDevice(const std::string & deviceName,uint16_t cores,const arm::pipe::Optional<std::string> & parentCategoryName)19*89c4ff92SAndroid Build Coastguard Worker uint16_t RegisterBackendCounters::RegisterDevice(const std::string& deviceName,
20*89c4ff92SAndroid Build Coastguard Worker                                                  uint16_t cores,
21*89c4ff92SAndroid Build Coastguard Worker                                                  const arm::pipe::Optional<std::string>& parentCategoryName)
22*89c4ff92SAndroid Build Coastguard Worker {
23*89c4ff92SAndroid Build Coastguard Worker     const Device* devicePtr = m_CounterDirectory.RegisterDevice(deviceName, cores, parentCategoryName);
24*89c4ff92SAndroid Build Coastguard Worker     return devicePtr->m_Uid;
25*89c4ff92SAndroid Build Coastguard Worker }
26*89c4ff92SAndroid Build Coastguard Worker 
RegisterCounterSet(const std::string & counterSetName,uint16_t count,const arm::pipe::Optional<std::string> & parentCategoryName)27*89c4ff92SAndroid Build Coastguard Worker uint16_t RegisterBackendCounters::RegisterCounterSet(const std::string& counterSetName,
28*89c4ff92SAndroid Build Coastguard Worker                                                      uint16_t count,
29*89c4ff92SAndroid Build Coastguard Worker                                                      const arm::pipe::Optional<std::string>& parentCategoryName)
30*89c4ff92SAndroid Build Coastguard Worker {
31*89c4ff92SAndroid Build Coastguard Worker     const CounterSet* counterSetPtr = m_CounterDirectory.RegisterCounterSet(counterSetName, count, parentCategoryName);
32*89c4ff92SAndroid Build Coastguard Worker     return counterSetPtr->m_Uid;
33*89c4ff92SAndroid Build Coastguard Worker }
34*89c4ff92SAndroid Build Coastguard Worker 
RegisterCounter(const uint16_t uid,const std::string & parentCategoryName,uint16_t counterClass,uint16_t interpolation,double multiplier,const std::string & name,const std::string & description,const arm::pipe::Optional<std::string> & units,const arm::pipe::Optional<uint16_t> & numberOfCores,const arm::pipe::Optional<uint16_t> & deviceUid,const arm::pipe::Optional<uint16_t> & counterSetUid)35*89c4ff92SAndroid Build Coastguard Worker uint16_t RegisterBackendCounters::RegisterCounter(const uint16_t uid,
36*89c4ff92SAndroid Build Coastguard Worker                                                   const std::string& parentCategoryName,
37*89c4ff92SAndroid Build Coastguard Worker                                                   uint16_t counterClass,
38*89c4ff92SAndroid Build Coastguard Worker                                                   uint16_t interpolation,
39*89c4ff92SAndroid Build Coastguard Worker                                                   double multiplier,
40*89c4ff92SAndroid Build Coastguard Worker                                                   const std::string& name,
41*89c4ff92SAndroid Build Coastguard Worker                                                   const std::string& description,
42*89c4ff92SAndroid Build Coastguard Worker                                                   const arm::pipe::Optional<std::string>& units,
43*89c4ff92SAndroid Build Coastguard Worker                                                   const arm::pipe::Optional<uint16_t>& numberOfCores,
44*89c4ff92SAndroid Build Coastguard Worker                                                   const arm::pipe::Optional<uint16_t>& deviceUid,
45*89c4ff92SAndroid Build Coastguard Worker                                                   const arm::pipe::Optional<uint16_t>& counterSetUid)
46*89c4ff92SAndroid Build Coastguard Worker {
47*89c4ff92SAndroid Build Coastguard Worker     ++m_CurrentMaxGlobalCounterID;
48*89c4ff92SAndroid Build Coastguard Worker     const Counter* counterPtr = m_CounterDirectory.RegisterCounter(m_BackendId,
49*89c4ff92SAndroid Build Coastguard Worker                                                                    m_CurrentMaxGlobalCounterID,
50*89c4ff92SAndroid Build Coastguard Worker                                                                    parentCategoryName,
51*89c4ff92SAndroid Build Coastguard Worker                                                                    counterClass,
52*89c4ff92SAndroid Build Coastguard Worker                                                                    interpolation,
53*89c4ff92SAndroid Build Coastguard Worker                                                                    multiplier,
54*89c4ff92SAndroid Build Coastguard Worker                                                                    name,
55*89c4ff92SAndroid Build Coastguard Worker                                                                    description,
56*89c4ff92SAndroid Build Coastguard Worker                                                                    units,
57*89c4ff92SAndroid Build Coastguard Worker                                                                    numberOfCores,
58*89c4ff92SAndroid Build Coastguard Worker                                                                    deviceUid,
59*89c4ff92SAndroid Build Coastguard Worker                                                                    counterSetUid);
60*89c4ff92SAndroid Build Coastguard Worker     m_CurrentMaxGlobalCounterID = counterPtr->m_MaxCounterUid;
61*89c4ff92SAndroid Build Coastguard Worker     // register mappings
62*89c4ff92SAndroid Build Coastguard Worker     IRegisterCounterMapping& counterIdMap = m_ProfilingService.GetCounterMappingRegistry();
63*89c4ff92SAndroid Build Coastguard Worker     uint16_t globalCounterId = counterPtr->m_Uid;
64*89c4ff92SAndroid Build Coastguard Worker     if (globalCounterId == counterPtr->m_MaxCounterUid)
65*89c4ff92SAndroid Build Coastguard Worker     {
66*89c4ff92SAndroid Build Coastguard Worker         counterIdMap.RegisterMapping(globalCounterId, uid, m_BackendId);
67*89c4ff92SAndroid Build Coastguard Worker     }
68*89c4ff92SAndroid Build Coastguard Worker     else
69*89c4ff92SAndroid Build Coastguard Worker     {
70*89c4ff92SAndroid Build Coastguard Worker         uint16_t backendCounterId = uid;
71*89c4ff92SAndroid Build Coastguard Worker         while (globalCounterId <= counterPtr->m_MaxCounterUid)
72*89c4ff92SAndroid Build Coastguard Worker         {
73*89c4ff92SAndroid Build Coastguard Worker             // register mapping
74*89c4ff92SAndroid Build Coastguard Worker             // globalCounterId -> backendCounterId, m_BackendId
75*89c4ff92SAndroid Build Coastguard Worker             counterIdMap.RegisterMapping(globalCounterId, backendCounterId, m_BackendId);
76*89c4ff92SAndroid Build Coastguard Worker             ++globalCounterId;
77*89c4ff92SAndroid Build Coastguard Worker             ++backendCounterId;
78*89c4ff92SAndroid Build Coastguard Worker         }
79*89c4ff92SAndroid Build Coastguard Worker     }
80*89c4ff92SAndroid Build Coastguard Worker     return m_CurrentMaxGlobalCounterID;
81*89c4ff92SAndroid Build Coastguard Worker }
82*89c4ff92SAndroid Build Coastguard Worker 
83*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
84*89c4ff92SAndroid Build Coastguard Worker 
85*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
86