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