xref: /aosp_15_r20/external/armnn/profiling/common/include/CounterDirectory.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 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 
6*89c4ff92SAndroid Build Coastguard Worker #pragma once
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include "ICounterDirectory.hpp"
9*89c4ff92SAndroid Build Coastguard Worker #include "ICounterRegistry.hpp"
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker #include <string>
12*89c4ff92SAndroid Build Coastguard Worker #include <unordered_set>
13*89c4ff92SAndroid Build Coastguard Worker #include <unordered_map>
14*89c4ff92SAndroid Build Coastguard Worker 
15*89c4ff92SAndroid Build Coastguard Worker #include <common/include/NumericCast.hpp>
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker namespace arm
18*89c4ff92SAndroid Build Coastguard Worker {
19*89c4ff92SAndroid Build Coastguard Worker 
20*89c4ff92SAndroid Build Coastguard Worker namespace pipe
21*89c4ff92SAndroid Build Coastguard Worker {
22*89c4ff92SAndroid Build Coastguard Worker 
23*89c4ff92SAndroid Build Coastguard Worker class CounterDirectory final : public ICounterDirectory, public ICounterRegistry
24*89c4ff92SAndroid Build Coastguard Worker {
25*89c4ff92SAndroid Build Coastguard Worker public:
26*89c4ff92SAndroid Build Coastguard Worker     CounterDirectory() = default;
27*89c4ff92SAndroid Build Coastguard Worker     ~CounterDirectory() = default;
28*89c4ff92SAndroid Build Coastguard Worker 
29*89c4ff92SAndroid Build Coastguard Worker     // Register profiling objects
30*89c4ff92SAndroid Build Coastguard Worker     const Category*   RegisterCategory  (const std::string& categoryName) override;
31*89c4ff92SAndroid Build Coastguard Worker     const Device*     RegisterDevice    (const std::string& deviceName,
32*89c4ff92SAndroid Build Coastguard Worker                                          uint16_t cores = 0,
33*89c4ff92SAndroid Build Coastguard Worker                                          const arm::pipe::Optional<std::string>& parentCategoryName
34*89c4ff92SAndroid Build Coastguard Worker                                          = arm::pipe::EmptyOptional()) override;
35*89c4ff92SAndroid Build Coastguard Worker     const CounterSet* RegisterCounterSet(const std::string& counterSetName,
36*89c4ff92SAndroid Build Coastguard Worker                                          uint16_t count = 0,
37*89c4ff92SAndroid Build Coastguard Worker                                          const arm::pipe::Optional<std::string>& parentCategoryName
38*89c4ff92SAndroid Build Coastguard Worker                                             = arm::pipe::EmptyOptional()) override;
39*89c4ff92SAndroid Build Coastguard Worker     const Counter* RegisterCounter(const std::string& backendId,
40*89c4ff92SAndroid Build Coastguard Worker         const uint16_t uid,
41*89c4ff92SAndroid Build Coastguard Worker         const std::string& parentCategoryName,
42*89c4ff92SAndroid Build Coastguard Worker         uint16_t counterClass,
43*89c4ff92SAndroid Build Coastguard Worker         uint16_t interpolation,
44*89c4ff92SAndroid Build Coastguard Worker         double multiplier,
45*89c4ff92SAndroid Build Coastguard Worker         const std::string& name,
46*89c4ff92SAndroid Build Coastguard Worker         const std::string& description,
47*89c4ff92SAndroid Build Coastguard Worker         const arm::pipe::Optional<std::string>& units = arm::pipe::EmptyOptional(),
48*89c4ff92SAndroid Build Coastguard Worker         const arm::pipe::Optional<uint16_t>& numberOfCores = arm::pipe::EmptyOptional(),
49*89c4ff92SAndroid Build Coastguard Worker         const arm::pipe::Optional<uint16_t>& deviceUid = arm::pipe::EmptyOptional(),
50*89c4ff92SAndroid Build Coastguard Worker         const arm::pipe::Optional<uint16_t>& counterSetUid = arm::pipe::EmptyOptional()) override;
51*89c4ff92SAndroid Build Coastguard Worker 
52*89c4ff92SAndroid Build Coastguard Worker     // Getters for counts
GetCategoryCount() const53*89c4ff92SAndroid Build Coastguard Worker     uint16_t GetCategoryCount()   const override { return arm::pipe::numeric_cast<uint16_t>(m_Categories.size());  }
GetDeviceCount() const54*89c4ff92SAndroid Build Coastguard Worker     uint16_t GetDeviceCount()     const override { return arm::pipe::numeric_cast<uint16_t>(m_Devices.size());     }
GetCounterSetCount() const55*89c4ff92SAndroid Build Coastguard Worker     uint16_t GetCounterSetCount() const override { return arm::pipe::numeric_cast<uint16_t>(m_CounterSets.size()); }
GetCounterCount() const56*89c4ff92SAndroid Build Coastguard Worker     uint16_t GetCounterCount()    const override { return arm::pipe::numeric_cast<uint16_t>(m_Counters.size());    }
57*89c4ff92SAndroid Build Coastguard Worker 
58*89c4ff92SAndroid Build Coastguard Worker     // Getters for collections
GetCategories() const59*89c4ff92SAndroid Build Coastguard Worker     const Categories&  GetCategories()  const override { return m_Categories;  }
GetDevices() const60*89c4ff92SAndroid Build Coastguard Worker     const Devices&     GetDevices()     const override { return m_Devices;     }
GetCounterSets() const61*89c4ff92SAndroid Build Coastguard Worker     const CounterSets& GetCounterSets() const override { return m_CounterSets; }
GetCounters() const62*89c4ff92SAndroid Build Coastguard Worker     const Counters&    GetCounters()    const override { return m_Counters;    }
63*89c4ff92SAndroid Build Coastguard Worker 
64*89c4ff92SAndroid Build Coastguard Worker     // Getters for profiling objects
65*89c4ff92SAndroid Build Coastguard Worker     const Category*   GetCategory(const std::string& name) const override;
66*89c4ff92SAndroid Build Coastguard Worker     const Device*     GetDevice(uint16_t uid) const override;
67*89c4ff92SAndroid Build Coastguard Worker     const CounterSet* GetCounterSet(uint16_t uid) const override;
68*89c4ff92SAndroid Build Coastguard Worker     const Counter*    GetCounter(uint16_t uid) const override;
69*89c4ff92SAndroid Build Coastguard Worker 
70*89c4ff92SAndroid Build Coastguard Worker     // Queries for profiling objects
71*89c4ff92SAndroid Build Coastguard Worker     bool IsCategoryRegistered(const std::string& categoryName) const;
72*89c4ff92SAndroid Build Coastguard Worker     bool IsDeviceRegistered(uint16_t deviceUid) const;
73*89c4ff92SAndroid Build Coastguard Worker     bool IsDeviceRegistered(const std::string& deviceName) const;
74*89c4ff92SAndroid Build Coastguard Worker     bool IsCounterSetRegistered(uint16_t counterSetUid) const;
75*89c4ff92SAndroid Build Coastguard Worker     bool IsCounterSetRegistered(const std::string& counterSetName) const;
76*89c4ff92SAndroid Build Coastguard Worker     bool IsCounterRegistered(uint16_t counterUid) const;
77*89c4ff92SAndroid Build Coastguard Worker     bool IsCounterRegistered(const std::string& counterName) const;
78*89c4ff92SAndroid Build Coastguard Worker 
79*89c4ff92SAndroid Build Coastguard Worker     // Clears all the counter directory contents
80*89c4ff92SAndroid Build Coastguard Worker     void Clear();
81*89c4ff92SAndroid Build Coastguard Worker 
82*89c4ff92SAndroid Build Coastguard Worker private:
83*89c4ff92SAndroid Build Coastguard Worker     // The profiling collections owned by the counter directory
84*89c4ff92SAndroid Build Coastguard Worker     Categories  m_Categories;
85*89c4ff92SAndroid Build Coastguard Worker     Devices     m_Devices;
86*89c4ff92SAndroid Build Coastguard Worker     CounterSets m_CounterSets;
87*89c4ff92SAndroid Build Coastguard Worker     Counters    m_Counters;
88*89c4ff92SAndroid Build Coastguard Worker 
89*89c4ff92SAndroid Build Coastguard Worker     // Helper functions
90*89c4ff92SAndroid Build Coastguard Worker     CategoriesIt  FindCategory(const std::string& categoryName) const;
91*89c4ff92SAndroid Build Coastguard Worker     DevicesIt     FindDevice(uint16_t deviceUid) const;
92*89c4ff92SAndroid Build Coastguard Worker     DevicesIt     FindDevice(const std::string& deviceName) const;
93*89c4ff92SAndroid Build Coastguard Worker     CounterSetsIt FindCounterSet(uint16_t counterSetUid) const;
94*89c4ff92SAndroid Build Coastguard Worker     CounterSetsIt FindCounterSet(const std::string& counterSetName) const;
95*89c4ff92SAndroid Build Coastguard Worker     CountersIt    FindCounter(uint16_t counterUid) const;
96*89c4ff92SAndroid Build Coastguard Worker     CountersIt    FindCounter(const std::string& counterName) const;
97*89c4ff92SAndroid Build Coastguard Worker     uint16_t      GetNumberOfCores(const arm::pipe::Optional<uint16_t>& numberOfCores,
98*89c4ff92SAndroid Build Coastguard Worker                                    uint16_t deviceUid);
99*89c4ff92SAndroid Build Coastguard Worker };
100*89c4ff92SAndroid Build Coastguard Worker 
101*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
102*89c4ff92SAndroid Build Coastguard Worker 
103*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
104