xref: /aosp_15_r20/external/armnn/profiling/common/include/ProfilingGuid.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2021 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 <memory>
9*89c4ff92SAndroid Build Coastguard Worker #include <stdint.h>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker namespace arm
12*89c4ff92SAndroid Build Coastguard Worker {
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker namespace pipe
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker static constexpr uint64_t MIN_STATIC_GUID = 1llu << 63;
18*89c4ff92SAndroid Build Coastguard Worker 
19*89c4ff92SAndroid Build Coastguard Worker class ProfilingGuid
20*89c4ff92SAndroid Build Coastguard Worker {
21*89c4ff92SAndroid Build Coastguard Worker public:
ProfilingGuid()22*89c4ff92SAndroid Build Coastguard Worker     ProfilingGuid() : m_Guid(0) {}
23*89c4ff92SAndroid Build Coastguard Worker 
ProfilingGuid(uint64_t guid)24*89c4ff92SAndroid Build Coastguard Worker     ProfilingGuid(uint64_t guid) : m_Guid(guid) {}
25*89c4ff92SAndroid Build Coastguard Worker 
operator uint64_t() const26*89c4ff92SAndroid Build Coastguard Worker     operator uint64_t() const { return m_Guid; }
27*89c4ff92SAndroid Build Coastguard Worker 
operator ==(const ProfilingGuid & other) const28*89c4ff92SAndroid Build Coastguard Worker     bool operator==(const ProfilingGuid& other) const
29*89c4ff92SAndroid Build Coastguard Worker     {
30*89c4ff92SAndroid Build Coastguard Worker         return m_Guid == other.m_Guid;
31*89c4ff92SAndroid Build Coastguard Worker     }
32*89c4ff92SAndroid Build Coastguard Worker 
operator !=(const ProfilingGuid & other) const33*89c4ff92SAndroid Build Coastguard Worker     bool operator!=(const ProfilingGuid& other) const
34*89c4ff92SAndroid Build Coastguard Worker     {
35*89c4ff92SAndroid Build Coastguard Worker         return m_Guid != other.m_Guid;
36*89c4ff92SAndroid Build Coastguard Worker     }
37*89c4ff92SAndroid Build Coastguard Worker 
operator <(const ProfilingGuid & other) const38*89c4ff92SAndroid Build Coastguard Worker     bool operator<(const ProfilingGuid& other) const
39*89c4ff92SAndroid Build Coastguard Worker     {
40*89c4ff92SAndroid Build Coastguard Worker         return m_Guid < other.m_Guid;
41*89c4ff92SAndroid Build Coastguard Worker     }
42*89c4ff92SAndroid Build Coastguard Worker 
operator <=(const ProfilingGuid & other) const43*89c4ff92SAndroid Build Coastguard Worker     bool operator<=(const ProfilingGuid& other) const
44*89c4ff92SAndroid Build Coastguard Worker     {
45*89c4ff92SAndroid Build Coastguard Worker         return m_Guid <= other.m_Guid;
46*89c4ff92SAndroid Build Coastguard Worker     }
47*89c4ff92SAndroid Build Coastguard Worker 
operator >(const ProfilingGuid & other) const48*89c4ff92SAndroid Build Coastguard Worker     bool operator>(const ProfilingGuid& other) const
49*89c4ff92SAndroid Build Coastguard Worker     {
50*89c4ff92SAndroid Build Coastguard Worker         return m_Guid > other.m_Guid;
51*89c4ff92SAndroid Build Coastguard Worker     }
52*89c4ff92SAndroid Build Coastguard Worker 
operator >=(const ProfilingGuid & other) const53*89c4ff92SAndroid Build Coastguard Worker     bool operator>=(const ProfilingGuid& other) const
54*89c4ff92SAndroid Build Coastguard Worker     {
55*89c4ff92SAndroid Build Coastguard Worker         return m_Guid >= other.m_Guid;
56*89c4ff92SAndroid Build Coastguard Worker     }
57*89c4ff92SAndroid Build Coastguard Worker 
58*89c4ff92SAndroid Build Coastguard Worker     protected:
59*89c4ff92SAndroid Build Coastguard Worker         uint64_t m_Guid;
60*89c4ff92SAndroid Build Coastguard Worker };
61*89c4ff92SAndroid Build Coastguard Worker 
62*89c4ff92SAndroid Build Coastguard Worker /// Strongly typed guids to distinguish between those generated at runtime, and those that are statically defined.
63*89c4ff92SAndroid Build Coastguard Worker struct ProfilingDynamicGuid : public ProfilingGuid
64*89c4ff92SAndroid Build Coastguard Worker {
65*89c4ff92SAndroid Build Coastguard Worker     using ProfilingGuid::ProfilingGuid;
66*89c4ff92SAndroid Build Coastguard Worker };
67*89c4ff92SAndroid Build Coastguard Worker 
68*89c4ff92SAndroid Build Coastguard Worker struct ProfilingStaticGuid : public ProfilingGuid
69*89c4ff92SAndroid Build Coastguard Worker {
70*89c4ff92SAndroid Build Coastguard Worker     using ProfilingGuid::ProfilingGuid;
71*89c4ff92SAndroid Build Coastguard Worker };
72*89c4ff92SAndroid Build Coastguard Worker 
73*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
74*89c4ff92SAndroid Build Coastguard Worker 
75*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
76*89c4ff92SAndroid Build Coastguard Worker 
77*89c4ff92SAndroid Build Coastguard Worker 
78*89c4ff92SAndroid Build Coastguard Worker 
79*89c4ff92SAndroid Build Coastguard Worker namespace std
80*89c4ff92SAndroid Build Coastguard Worker {
81*89c4ff92SAndroid Build Coastguard Worker /// make ProfilingGuid hashable
82*89c4ff92SAndroid Build Coastguard Worker template <>
83*89c4ff92SAndroid Build Coastguard Worker struct hash<arm::pipe::ProfilingGuid>
84*89c4ff92SAndroid Build Coastguard Worker {
operator ()std::hash85*89c4ff92SAndroid Build Coastguard Worker     std::size_t operator()(arm::pipe::ProfilingGuid const& guid) const noexcept
86*89c4ff92SAndroid Build Coastguard Worker     {
87*89c4ff92SAndroid Build Coastguard Worker         return hash<uint64_t>()(uint64_t(guid));
88*89c4ff92SAndroid Build Coastguard Worker     }
89*89c4ff92SAndroid Build Coastguard Worker };
90*89c4ff92SAndroid Build Coastguard Worker 
91*89c4ff92SAndroid Build Coastguard Worker /// make ProfilingDynamicGuid hashable
92*89c4ff92SAndroid Build Coastguard Worker template <>
93*89c4ff92SAndroid Build Coastguard Worker struct hash<arm::pipe::ProfilingDynamicGuid>
94*89c4ff92SAndroid Build Coastguard Worker {
operator ()std::hash95*89c4ff92SAndroid Build Coastguard Worker     std::size_t operator()(arm::pipe::ProfilingDynamicGuid const& guid) const noexcept
96*89c4ff92SAndroid Build Coastguard Worker     {
97*89c4ff92SAndroid Build Coastguard Worker         return hash<uint64_t>()(uint64_t(guid));
98*89c4ff92SAndroid Build Coastguard Worker     }
99*89c4ff92SAndroid Build Coastguard Worker };
100*89c4ff92SAndroid Build Coastguard Worker 
101*89c4ff92SAndroid Build Coastguard Worker /// make ProfilingStaticGuid hashable
102*89c4ff92SAndroid Build Coastguard Worker template <>
103*89c4ff92SAndroid Build Coastguard Worker struct hash<arm::pipe::ProfilingStaticGuid>
104*89c4ff92SAndroid Build Coastguard Worker {
operator ()std::hash105*89c4ff92SAndroid Build Coastguard Worker     std::size_t operator()(arm::pipe::ProfilingStaticGuid const& guid) const noexcept
106*89c4ff92SAndroid Build Coastguard Worker     {
107*89c4ff92SAndroid Build Coastguard Worker         return hash<uint64_t>()(uint64_t(guid));
108*89c4ff92SAndroid Build Coastguard Worker     }
109*89c4ff92SAndroid Build Coastguard Worker };
110*89c4ff92SAndroid Build Coastguard Worker 
111*89c4ff92SAndroid Build Coastguard Worker }  // namespace std