Skip to content

Commit 48d07c6

Browse files
committed
enhanced cap bit dumping
1 parent 6fff9d9 commit 48d07c6

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed

IntelPresentMon/CommonUtilities/ref/StaticReflection.h

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <optional>
77
#include "WrapReflect.h"
88
#include "../Meta.h"
9+
#include <bitset>
910

1011

1112
namespace 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
}
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,35 @@
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

68
namespace 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
}

0 commit comments

Comments
 (0)