Skip to content

Feature/granular telemetry#632

Merged
markgalvan-intel merged 42 commits into
mainfrom
feature/granular-telemetry
Jun 1, 2026
Merged

Feature/granular telemetry#632
markgalvan-intel merged 42 commits into
mainfrom
feature/granular-telemetry

Conversation

@planetchili
Copy link
Copy Markdown
Collaborator

@planetchili planetchili commented May 29, 2026

closes #607
closes #606
closes #616
closes #438
closes #352
closes #579

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors PresentMon’s telemetry stack toward fine-grained, per-metric providers with device correlation/routing, removing legacy “monolithic provider + shim” paths and folding adapter enumeration into the existing introspection flow. It also adds UCI runtime packaging support and introduces a per-core CPU temperature metric.

Changes:

  • Introduces a new TelemetryProvider abstraction with a TelemetryCoordinator that correlates devices across providers and routes/polls metrics into IPC.
  • Replaces legacy telemetry/adapters actions & containers (e.g., EnumerateAdapters, PowerTelemetryContainer, legacy caps shims) with introspection-driven device/adapter data and a richer metric-use model.
  • Adds UCI SDK detection + runtime deployment/installer harvesting, and extends the public API/metadata with PM_METRIC_CPU_CORE_TEMPERATURE.

Reviewed changes

Copilot reviewed 142 out of 143 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
Tools/generate/EnumMetric/metrics.awk Handle BOM + filter metric rows during enum generation.
Reflector/StructDumpers.h.scriban Generate dumpers for rooted typedefs.
IntelPresentMon/PresentMonService/PresentMonSession.h Remove legacy CPU/power telemetry hooks; include coordinator.
IntelPresentMon/PresentMonService/PresentMonSession.cpp Remove legacy CPU/power telemetry methods.
IntelPresentMon/PresentMonService/PresentMonService.vcxproj.filters Remove legacy telemetry container/actions; add MetricUse header.
IntelPresentMon/PresentMonService/PresentMonService.vcxproj Remove legacy telemetry container/actions; add UCI runtime deploy step.
IntelPresentMon/PresentMonService/PresentMon.h Replace device-usage tracking with metric-level usage snapshot + eventing.
IntelPresentMon/PresentMonService/PresentMon.cpp Remove legacy adapter enumeration path.
IntelPresentMon/PresentMonService/PowerTelemetryContainer.h Delete legacy telemetry container.
IntelPresentMon/PresentMonService/PowerTelemetryContainer.cpp Delete legacy telemetry container implementation.
IntelPresentMon/PresentMonService/MetricUse.h New shared header for metric-use types (service/control-lib).
IntelPresentMon/PresentMonService/LogSetup.cpp Update IGCL error provider include/namespace.
IntelPresentMon/PresentMonService/AllActions.h Remove legacy actions from generated action list.
IntelPresentMon/PresentMonService/acts/StopTracking.h Include ActionExecutionContext explicitly.
IntelPresentMon/PresentMonService/acts/StopPlayback.h Include ActionExecutionContext explicitly; normalize file header.
IntelPresentMon/PresentMonService/acts/StartTracking.h Include ActionExecutionContext explicitly.
IntelPresentMon/PresentMonService/acts/StartEtlLogging.h Include ActionExecutionContext explicitly; normalize file header.
IntelPresentMon/PresentMonService/acts/SetTelemetryPeriod.h Include ActionExecutionContext explicitly; normalize file header.
IntelPresentMon/PresentMonService/acts/SetEtwFlushPeriod.h Include ActionExecutionContext explicitly; normalize file header.
IntelPresentMon/PresentMonService/acts/ReportMetricUse.h Include ActionExecutionContext explicitly.
IntelPresentMon/PresentMonService/acts/OpenSession.h Include ActionExecutionContext explicitly; normalize file header.
IntelPresentMon/PresentMonService/acts/GetStaticCpuMetrics.h Remove legacy static CPU metrics action.
IntelPresentMon/PresentMonService/acts/FinishEtlLogging.h Include ActionExecutionContext explicitly; normalize file header.
IntelPresentMon/PresentMonService/acts/EnumerateAdapters.h Remove legacy adapter enumeration action.
IntelPresentMon/PresentMonService/ActionExecutionContext.h Move MetricUse to shared header; simplify context state.
IntelPresentMon/PresentMonService/ActionExecutionContext.cpp Aggregate per-device metric use into map and publish snapshot.
IntelPresentMon/PresentMonMiddleware/Middleware.cpp Switch to shared svc::MetricUse type.
IntelPresentMon/PresentMonAPI2Tests/InterimBroadcasterTests.cpp Update tests to use shared svc::MetricUse.
IntelPresentMon/PresentMonAPI2/PresentMonAPI.h Bump API minor version; add CPU core temperature metric ID.
IntelPresentMon/PMInstallerLib/wix-uci-dist.ps1 New script to harvest UCI runtime files into WiX fragment.
IntelPresentMon/PMInstallerLib/PMInstallerLib.wixproj Generate/compile harvested UCI fragment; define UciDistDir.
IntelPresentMon/PMInstallerLib/Library.wxs Include UCI harvested component group in installer library.
IntelPresentMon/PMInstaller/PMInstaller.wixproj Propagate PMON_UCI_SDK_DIR into wixlib build.
IntelPresentMon/metrics.csv Update CPU temp description; add CPU core temperature metric row.
IntelPresentMon/KernelProcess/KernelProcess.vcxproj.filters Remove legacy EnumerateAdapters action header entry.
IntelPresentMon/KernelProcess/KernelProcess.vcxproj Remove legacy EnumerateAdapters action header entry; normalize XML header.
IntelPresentMon/KernelProcess/KernelProcess.args.json Update default verbose module to tele_gpu.
IntelPresentMon/KernelProcess/kact/Introspect.h Extend introspection response to include adapters list.
IntelPresentMon/KernelProcess/kact/EnumerateAdapters.h Remove legacy kernel EnumerateAdapters action.
IntelPresentMon/KernelProcess/kact/AllActions.h Remove legacy EnumerateAdapters from kernel action list.
IntelPresentMon/Interprocess/source/TelemetryMap.h Add scalar int support for enum-valued telemetry.
IntelPresentMon/Interprocess/source/MetricCapabilitiesShim.h Remove legacy caps bitset conversion shim.
IntelPresentMon/Interprocess/source/MetricCapabilitiesShim.cpp Remove legacy caps bitset conversion shim implementation.
IntelPresentMon/Interprocess/source/MetricCapabilities.cpp Improve debug string output with metric symbols.
IntelPresentMon/Interprocess/source/metadata/MetricList.h Add CPU core temperature metric metadata.
IntelPresentMon/Interprocess/source/IntrospectionPopulators.cpp Simplify “universal metric” registration using device type metadata.
IntelPresentMon/Interprocess/source/IntrospectionCapsLookup.h Remove legacy caps lookup table.
IntelPresentMon/Interprocess/source/Interprocess.h Remove legacy telemetry includes; normalize file header.
IntelPresentMon/Interprocess/Interprocess.vcxproj.filters Remove legacy shim/lookup files from filters.
IntelPresentMon/Interprocess/Interprocess.vcxproj Remove legacy shim/lookup files from project.
IntelPresentMon/Core/source/pmon/PresentMon.h Remove adapter enumeration API surface.
IntelPresentMon/Core/source/pmon/PresentMon.cpp Remove adapter enumeration impl; adjust default adapter selection.
IntelPresentMon/Core/source/pmon/AdapterInfo.h Remove legacy adapter info struct.
IntelPresentMon/Core/source/kernel/Kernel.h Remove adapter enumeration API surface.
IntelPresentMon/Core/source/kernel/Kernel.cpp Remove adapter enumeration impl.
IntelPresentMon/Core/Core.vcxproj.filters Remove AdapterInfo header from project filters; normalize XML header.
IntelPresentMon/Core/Core.vcxproj Remove AdapterInfo header from project.
IntelPresentMon/ControlLib/WmiCpu.h Remove legacy WMI CPU telemetry class.
IntelPresentMon/ControlLib/WmiCpu.cpp Remove legacy WMI CPU telemetry implementation.
IntelPresentMon/ControlLib/wmi/WmiTelemetryProvider.h New WMI provider implementing TelemetryProvider.
IntelPresentMon/ControlLib/wmi/WmiTelemetryProvider.cpp New WMI provider implementation (CPU name/vendor + counters).
IntelPresentMon/ControlLib/Ver.h Remove legacy IPF version header.
IntelPresentMon/ControlLib/uci/UciTelemetryProvider.h New UCI provider interface and state tracking.
IntelPresentMon/ControlLib/uci/UciSdk.h New compile-time detection wrapper for UCI SDK headers.
IntelPresentMon/ControlLib/uci/.gitignore Ignore UCI dist/external payload directories.
IntelPresentMon/ControlLib/TelemetryProvider.h New provider interface + common metric/value types.
IntelPresentMon/ControlLib/TelemetryDeviceFingerprint.h New device fingerprint + correlation helpers.
IntelPresentMon/ControlLib/TelemetryDeviceFingerprint.cpp Implement fingerprint matching/merge + LUID formatting.
IntelPresentMon/ControlLib/TelemetryCoordinator.h New coordinator that correlates devices and routes metrics.
IntelPresentMon/ControlLib/TelemetryCoordinator.cpp Implement provider construction, routing, polling, IPC population.
IntelPresentMon/ControlLib/SignatureComparison.h Remove legacy NVIDIA signature comparison.
IntelPresentMon/ControlLib/SignatureComparison.cpp Remove legacy NVIDIA signature comparison implementation.
IntelPresentMon/ControlLib/PresentMonPowerTelemetry.h Remove legacy monolithic power telemetry structs/caps.
IntelPresentMon/ControlLib/PowerTelemetryProviderFactory.h Remove legacy provider factory.
IntelPresentMon/ControlLib/PowerTelemetryProviderFactory.cpp Remove legacy provider factory implementation.
IntelPresentMon/ControlLib/PowerTelemetryProvider.h Remove legacy provider interface.
IntelPresentMon/ControlLib/PowerTelemetryAdapter.h Remove legacy adapter interface.
IntelPresentMon/ControlLib/PowerTelemetryAdapter.cpp Remove legacy adapter implementation.
IntelPresentMon/ControlLib/nvml/NvmlWrapper.h Move NVML wrapper to new namespace; add DeviceGetName endpoint.
IntelPresentMon/ControlLib/nvml/NvmlWrapper.cpp Improve NVML init error handling; drop legacy signature code.
IntelPresentMon/ControlLib/nvml/NvmlTelemetryProvider.h New NVML provider (power + memory metrics).
IntelPresentMon/ControlLib/nvml/NvmlTelemetryProvider.cpp New NVML provider implementation.
IntelPresentMon/ControlLib/nvml/nvml.h Add name buffer constant; normalize file header.
IntelPresentMon/ControlLib/nvapi/NvapiWrapper.h Move NVAPI wrapper to new namespace; remove legacy signature struct/method.
IntelPresentMon/ControlLib/nvapi/NvapiWrapper.cpp Improve NVAPI init error handling; remove legacy signature method.
IntelPresentMon/ControlLib/nvapi/NvapiTelemetryProvider.h New NVAPI provider (temps/clocks/utilization/fan).
IntelPresentMon/ControlLib/nvapi/nvapi.h Normalize file header.
IntelPresentMon/ControlLib/nvapi/nvapi_interface_table.h Normalize file header.
IntelPresentMon/ControlLib/Logging.h Update IGCL include path; move to new namespace.
IntelPresentMon/ControlLib/ipf_version.h Remove legacy IPF version header.
IntelPresentMon/ControlLib/ipf_sdk_version.h Remove legacy IPF SDK version header.
IntelPresentMon/ControlLib/IntelPowerTelemetryProvider.h Remove legacy IGCL-based provider wrapper.
IntelPresentMon/ControlLib/IntelPowerTelemetryProvider.cpp Remove legacy IGCL-based provider wrapper implementation.
IntelPresentMon/ControlLib/IntelPowerTelemetryAdapter.h Remove legacy IGCL-based adapter.
IntelPresentMon/ControlLib/igcl/IgclTelemetryProvider.h New IGCL provider interface (metric-level polling).
IntelPresentMon/ControlLib/igcl/IgclErrorCodeProvider.h Move IGCL error provider to new namespace + include path fixes.
IntelPresentMon/ControlLib/igcl/IgclErrorCodeProvider.cpp Move IGCL error provider to new namespace + include path fixes.
IntelPresentMon/ControlLib/igcl/igcl_api.h Normalize file header.
IntelPresentMon/ControlLib/igcl/cApiWrapper.cpp Normalize file header.
IntelPresentMon/ControlLib/Exceptions.h Move telemetry exceptions into pmon::tel and add new exception types.
IntelPresentMon/ControlLib/EndpointCache.h New lightweight endpoint cache keyed by request QPC.
IntelPresentMon/ControlLib/DllModule.h Move DLL loader into pmon::tel; use WinAPI wrapper include.
IntelPresentMon/ControlLib/DeviceIdAllocator.h Remove legacy allocator (device ID now coordinated differently).
IntelPresentMon/ControlLib/CpuTelemetryInfo.h Remove legacy CPU telemetry bitset info struct.
IntelPresentMon/ControlLib/CpuTelemetry.h Remove legacy CPU telemetry class.
IntelPresentMon/ControlLib/CpuTelemetry.cpp Remove legacy CPU telemetry implementation.
IntelPresentMon/ControlLib/ControlLib.vcxproj.filters Reorganize filters; add new provider/coordinator sources; remove legacy telemetry sources.
IntelPresentMon/ControlLib/ControlLib.vcxproj Add UCI include dir + Interprocess reference; add new provider/coordinator sources; remove legacy telemetry sources.
IntelPresentMon/ControlLib/AmdPowerTelemetryProvider.h Remove legacy AMD power telemetry provider.
IntelPresentMon/ControlLib/AmdPowerTelemetryProvider.cpp Remove legacy AMD power telemetry provider implementation.
IntelPresentMon/ControlLib/AmdPowerTelemetryAdapter.h Remove legacy AMD power telemetry adapter.
IntelPresentMon/ControlLib/AmdPowerTelemetryAdapter.cpp Remove legacy AMD power telemetry adapter implementation.
IntelPresentMon/ControlLib/adl/AdlTelemetryProvider.h New ADL provider interface (metric-level polling).
IntelPresentMon/ControlLib/adl/Adl2Wrapper.h Move ADL wrapper to new namespace; add endpoints; fix includes.
IntelPresentMon/ControlLib/adl/Adl2Wrapper.cpp Improve ADL init error handling; fix allocator callback usage.
IntelPresentMon/ControlLib/adl/adl_structures.h Normalize file header.
IntelPresentMon/ControlLib/adl/adl_sdk.h Normalize file header.
IntelPresentMon/ControlLib/adl/adl_defines.h Normalize file header.
IntelPresentMon/CommonUtilities/win/com/WbemConnection.h Add GetServices() accessor for WMI connection.
IntelPresentMon/CommonUtilities/win/com/WbemConnection.cpp Implement GetServices() accessor.
IntelPresentMon/CommonUtilities/ref/GeneratedReflectionHelpers.h Refine array dumping; adjust pointer formatting.
IntelPresentMon/CommonUtilities/log/Verbose.h Add uci verbose module.
IntelPresentMon/CommonUtilities/CommonUtilities.vcxproj Normalize XML header.
IntelPresentMon/Common.props Add UCI SDK dir/include/bin MSBuild properties.
IntelPresentMon/AppCef/source/util/KernelActionRegistration.cpp Remove kernel EnumerateAdapters binding.
IntelPresentMon/AppCef/ipm-ui-vue/src/views/DataConfigView.vue Use introspection store adapters instead of adapters store.
IntelPresentMon/AppCef/ipm-ui-vue/src/stores/introspection.ts Add adapters to introspection store state/load.
IntelPresentMon/AppCef/ipm-ui-vue/src/stores/adapters.ts Remove legacy adapters store (now introspection-backed).
IntelPresentMon/AppCef/ipm-ui-vue/src/main.ts Stop refreshing adapters store at startup.
IntelPresentMon/AppCef/ipm-ui-vue/src/core/api.ts Extend introspection payload with adapters; remove EnumerateAdapters API call.
AGENTS.md Add/clarify coding conventions (casts, structured bindings, namespace qualification).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 2 to 4
#include <string>
#include <concepts>
#include "GeneratedReflection.h"
Comment on lines +163 to +166
uint64_t NvmlTelemetryProvider::GetLegacyTotalMemoryBytes_(const nvmlMemory_t& memoryInfo) noexcept
{
return (uint64_t)memoryInfo.free;
}
Copy link
Copy Markdown
Collaborator

@markgalvan-intel markgalvan-intel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great. I love the new direction! Excellent work.

@markgalvan-intel markgalvan-intel merged commit a848d9a into main Jun 1, 2026
1 check passed
@markgalvan-intel markgalvan-intel deleted the feature/granular-telemetry branch June 1, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants