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