1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020,2023 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker #pragma once 6*89c4ff92SAndroid Build Coastguard Worker 7*89c4ff92SAndroid Build Coastguard Worker #include <cstdint> 8*89c4ff92SAndroid Build Coastguard Worker #include <map> 9*89c4ff92SAndroid Build Coastguard Worker #include <string> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace arm 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker namespace pipe 14*89c4ff92SAndroid Build Coastguard Worker { 15*89c4ff92SAndroid Build Coastguard Worker 16*89c4ff92SAndroid Build Coastguard Worker class ICounterMappings 17*89c4ff92SAndroid Build Coastguard Worker { 18*89c4ff92SAndroid Build Coastguard Worker public: 19*89c4ff92SAndroid Build Coastguard Worker virtual uint16_t GetGlobalId(uint16_t backendCounterId, const std::string& backendId) const = 0; 20*89c4ff92SAndroid Build Coastguard Worker virtual const std::pair<uint16_t, std::string>& GetBackendId(uint16_t globalCounterId) const = 0; ~ICounterMappings()21*89c4ff92SAndroid Build Coastguard Worker virtual ~ICounterMappings() {} 22*89c4ff92SAndroid Build Coastguard Worker }; 23*89c4ff92SAndroid Build Coastguard Worker 24*89c4ff92SAndroid Build Coastguard Worker class IRegisterCounterMapping 25*89c4ff92SAndroid Build Coastguard Worker { 26*89c4ff92SAndroid Build Coastguard Worker public: 27*89c4ff92SAndroid Build Coastguard Worker virtual void RegisterMapping(uint16_t globalCounterId, 28*89c4ff92SAndroid Build Coastguard Worker uint16_t backendCounterId, 29*89c4ff92SAndroid Build Coastguard Worker const std::string& backendId) = 0; 30*89c4ff92SAndroid Build Coastguard Worker virtual void Reset() = 0; ~IRegisterCounterMapping()31*89c4ff92SAndroid Build Coastguard Worker virtual ~IRegisterCounterMapping() {} 32*89c4ff92SAndroid Build Coastguard Worker }; 33*89c4ff92SAndroid Build Coastguard Worker 34*89c4ff92SAndroid Build Coastguard Worker class CounterIdMap : public ICounterMappings, public IRegisterCounterMapping 35*89c4ff92SAndroid Build Coastguard Worker { 36*89c4ff92SAndroid Build Coastguard Worker 37*89c4ff92SAndroid Build Coastguard Worker public: 38*89c4ff92SAndroid Build Coastguard Worker CounterIdMap() = default; ~CounterIdMap()39*89c4ff92SAndroid Build Coastguard Worker virtual ~CounterIdMap() {} 40*89c4ff92SAndroid Build Coastguard Worker void RegisterMapping(uint16_t globalCounterId, 41*89c4ff92SAndroid Build Coastguard Worker uint16_t backendCounterId, 42*89c4ff92SAndroid Build Coastguard Worker const std::string& backendId) override; 43*89c4ff92SAndroid Build Coastguard Worker void Reset() override; 44*89c4ff92SAndroid Build Coastguard Worker uint16_t GetGlobalId(uint16_t backendCounterId, const std::string& backendId) const override; 45*89c4ff92SAndroid Build Coastguard Worker const std::pair<uint16_t, std::string>& GetBackendId(uint16_t globalCounterId) const override; 46*89c4ff92SAndroid Build Coastguard Worker private: 47*89c4ff92SAndroid Build Coastguard Worker std::map<uint16_t, std::pair<uint16_t, std::string>> m_GlobalCounterIdMap; 48*89c4ff92SAndroid Build Coastguard Worker std::map<std::pair<uint16_t, std::string>, uint16_t> m_BackendCounterIdMap; 49*89c4ff92SAndroid Build Coastguard Worker }; 50*89c4ff92SAndroid Build Coastguard Worker 51*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe 52*89c4ff92SAndroid Build Coastguard Worker } // namespace arm 53