File tree Expand file tree Collapse file tree 2 files changed +64
-2
lines changed
Expand file tree Collapse file tree 2 files changed +64
-2
lines changed Original file line number Diff line number Diff line change 66#include < optional>
77#include " WrapReflect.h"
88#include " ../Meta.h"
9+ #include < bitset>
910
1011
1112namespace pmon ::util::ref
@@ -36,7 +37,7 @@ namespace pmon::util::ref
3637 oss << " {unknown}" ;
3738 }
3839 else if constexpr (std::is_enum_v<S>) {
39- oss << reflect::enum_name (s);
40+ oss << reflect::type_name<S>() << " :: " << reflect:: enum_name (s);
4041 }
4142 else if constexpr (std::is_class_v<S>) {
4243 oss << " struct " << reflect::type_name (s) << " { " ;
@@ -64,4 +65,51 @@ namespace pmon::util::ref
6465 DumpStaticImpl_ (s, oss);
6566 return oss.str ();
6667 }
68+
69+ template <typename E, size_t N>
70+ std::string DumpEnumBitset (const std::bitset<N>& set)
71+ {
72+ std::ostringstream oss;
73+ oss << " | " ;
74+ for (size_t n = 0 ; n < N; n++) {
75+ if (!set.test (n)) {
76+ continue ;
77+ }
78+ const auto name = reflect::enum_name (E (n));
79+ if (!name.length ()) {
80+ continue ;
81+ }
82+ oss << name << " , " ;
83+ }
84+ oss << " |" ;
85+ return oss.str ();
86+ }
87+
88+ template <typename E>
89+ std::string DumpEnumFlagSet (uint64_t bits)
90+ {
91+ // simple hacky impl assumes 32-bit ints, logically unsigned for flags
92+ // unless underlying type is 8-bytes, then assume 64-bit
93+ size_t nBits;
94+ if constexpr (sizeof (std::underlying_type_t <E>) == 8 ) {
95+ nBits = 64 ;
96+ }
97+ else {
98+ nBits = 32 ;
99+ }
100+ std::ostringstream oss;
101+ oss << " | " ;
102+ // loop over n-bits, shifting a 1-hot bit value to test all positions
103+ for (size_t n = 0 , b = 1 ; n < nBits; n++, b<<1 ) {
104+ if (!(bits & b)) {
105+ continue ;
106+ }
107+ const auto name = reflect::enum_name (E (b));
108+ if (!name.length ()) {
109+ continue ;
110+ }
111+ oss << name << " , " ;
112+ }
113+ oss << " |" ;
114+ }
67115}
Original file line number Diff line number Diff line change 11#include " PowerTelemetryAdapter.h"
22#include " Logging.h"
3+ #include " ../CommonUtilities/ref/WrapReflect.h"
4+ #include " ../CommonUtilities/ref/StaticReflection.h"
35#include < format>
46
57
68namespace pwr
79{
10+ using namespace std ::literals;
11+ using namespace pmon ::util;
12+
813 void PowerTelemetryAdapter::SetTelemetryCapBit (GpuTelemetryCapBits telemetryCapBit) noexcept
914 {
15+ if constexpr (v::gpu) {
16+ if (!gpuTelemetryCapBits_.test (static_cast <size_t >(telemetryCapBit))) {
17+ pmlog_verb (v::gpu)(" Telemetry cap bit being set: " s + std::string (reflect::enum_name (telemetryCapBit)))
18+ .pmwatch (GetName ());
19+ }
20+ }
1021 gpuTelemetryCapBits_.set (static_cast <size_t >(telemetryCapBit));
1122 }
1223 PowerTelemetryAdapter::SetTelemetryCapBitset PowerTelemetryAdapter::GetPowerTelemetryCapBits ()
1324 {
25+ pmlog_verb (v::gpu)(" Telemetry cap bits being retrieved" ).pmwatch (GetName ())
26+ .pmwatch (ref::DumpEnumBitset<GpuTelemetryCapBits>(gpuTelemetryCapBits_));
1427 return gpuTelemetryCapBits_;
1528 }
1629 bool PowerTelemetryAdapter::HasTelemetryCapBit (GpuTelemetryCapBits bit) const
1730 {
18- pmlog_verb (v::gpu)(" Telemetry cap bits being retrieved" ).pmwatch (GetName ()).pmwatch (gpuTelemetryCapBits_.to_string ());
31+ pmlog_verb (v::gpu)(" Telemetry cap bit being retrieved: " s + std::string (reflect::enum_name (bit)))
32+ .pmwatch (GetName ()).pmwatch (gpuTelemetryCapBits_.test (size_t (bit)));
1933 return gpuTelemetryCapBits_.test (size_t (bit));
2034 }
2135}
You can’t perform that action at this time.
0 commit comments