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