Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
PowerSnap is a form of power telemetry that records how a Windows device uses energy over an interval of time, rather than at a single moment.
When a device drains its battery faster than expected or stays active when it should be idle, you need to see how its power behavior changed over time to find the cause. PowerSnap events give you that interval-level view. This article explains how PowerSnap events behave and what their payload contains, so you can use them for power diagnostics.
How PowerSnap events fire and cover intervals
The Microsoft.Windows.SRUM.Telemetry provider emits PowerSnap events. Each event provides a snapshot of power-related state over an interval, rather than only at a single point in time.
PowerSnap events can fire on device power state transitions and from a timer while a session is active. This behavior lets power diagnostics correlate changes in battery level, component power, CPU residency, thermal state, fan activity, and app-attributed energy with the time range of a user-visible session.
The interval is typically 15 minutes for screen-on sessions, but can be shorter if a trigger occurs, such as an AC/DC transition, Energy Saver turning on or off, or the device going to sleep. For screen-off/sleep/hibernate sessions, one event fires for the entire session at the end of the session, so these sessions can be much longer than 15 minutes. Intervals under 2 minutes don't fire, and Windows appends their data to the next event.
Diagnostic and trace analysis experiences use PowerSnap data to correlate power-related state with a time interval.
PowerSnap event payload
The PowerSnap event payload can include the following groups of metrics. Not every metric is available on every system or Windows version.
Metadata
Identifies the event and describes the interval, device state, and battery state it covers.
| Metric | Description |
|---|---|
EventVersion |
PowerSnap event payload version. |
CurrentTimeStamp |
Timestamp when the PowerSnap event was logged. |
LastLoggedEventTimeStamp |
Timestamp of the previous logged PowerSnap event. |
IntervalStartTimeStamp |
Timestamp when the PowerSnap interval began. |
IgnoredEventsCount |
Number of short intervals that were skipped and merged into this event. |
IntervalDurationInSeconds |
Length of the PowerSnap interval, in seconds. |
IsMonitorOn |
Whether the monitor was on for the interval. |
IsDC |
Whether the system was running on battery power. |
IsEnergySaverOn |
Whether Energy Saver was active. |
SessionType |
Power session type associated with the interval. |
ExternalDisplayCount |
Number of connected external displays. |
PreviousBatteryPerMyriad |
Battery charge at the start of the interval, in per-myriad (per 10,000) units. |
CurrentBatteryPerMyriad |
Battery charge at the end of the interval, in per-myriad units. |
PreviousBatteryRemainingCapacitymWh |
Remaining battery capacity at the start of the interval, in milliwatt-hours. |
CurrentBatteryRemainingCapacitymWh |
Remaining battery capacity at the end of the interval, in milliwatt-hours. |
PreviousMaxBatteryCapacitymWh |
Maximum battery capacity reported at the start of the interval, in milliwatt-hours. |
CurrentMaxBatteryCapacitymWh |
Maximum battery capacity reported at the end of the interval, in milliwatt-hours. |
BatteryDesignCapacitymWh |
Battery design capacity, in milliwatt-hours. |
CurrentInstantaneousPowerMode |
Instantaneous power mode recorded for the interval. |
PowerModeChangedInSession |
Whether the effective power mode changed during the containing session. |
LastScreenOnSessionGuid |
Identifier for the related screen-on session. |
Power
Reports component power draw and the number of power samples collected during the interval.
| Metric | Description |
|---|---|
TotalPowerInMilliWatts |
Total platform battery drain power for the interval, in milliwatts. |
CpuPowerInMilliWatts |
CPU core power for the interval, in milliwatts. |
PackagePowerInMilliWatts |
Processor package power for the interval, in milliwatts. |
GpuPowerInMilliWatts |
GPU power for the interval, in milliwatts. |
NpuPowerInMilliWatts |
NPU power for the interval, in milliwatts. |
EmiPowerInMilliWatts |
Energy Metering Interface channel power, in milliwatts per channel. |
CpuPowerSamples |
CPU power samples collected inside the interval. |
GpuPowerSamples |
GPU power samples collected inside the interval. |
PackagePowerSamples |
Processor package power samples collected inside the interval. |
CPU power management
Describes core cycles, idle time, and idle and concurrency residency distributions across big and little cores.
| Metric | Description |
|---|---|
BigTotalCycles |
Processor cycles recorded on big, or high-performance, cores. |
LittleTotalCycles |
Processor cycles recorded on little, or high-efficiency, cores. |
AllTotalIdleTime |
Idle time recorded across all cores, in microseconds. |
BigTotalIdleTime |
Idle time recorded for big cores, in microseconds. |
LittleTotalIdleTime |
Idle time recorded for little cores, in microseconds. |
PackageIdleAllIntervalHistogram |
Distribution of all-core idle interval lengths. |
PackageIdleBigIntervalHistogram |
Distribution of big-core idle interval lengths. |
PackageIdleLittleIntervalHistogram |
Distribution of little-core idle interval lengths. |
PackageIdleAllIntervalCumulative |
Cumulative distribution of all-core idle interval lengths. |
PackageIdleBigIntervalCumulative |
Cumulative distribution of big-core idle interval lengths. |
PackageIdleLittleIntervalCumulative |
Cumulative distribution of little-core idle interval lengths. |
AllCoresConcurrencyHistogram |
Distribution of the number of concurrently active cores. |
BigCoresConcurrencyHistogram |
Distribution of concurrently active big cores. |
LittleCoresConcurrencyHistogram |
Distribution of concurrently active little cores. |
AllCoresConcurrencyCumulative |
Cumulative distribution of all-core concurrency. |
BigCoresConcurrencyCumulative |
Cumulative distribution of big-core concurrency. |
LittleCoresConcurrencyCumulative |
Cumulative distribution of little-core concurrency. |
CStateHistogram |
Package C-state residency distribution. |
CStateCumulative |
Cumulative package C-state residency distribution. |
P-state histograms
Captures processor frequency (P-state) residency by quality of service (QoS) class and core type, as both interval and cumulative distributions.
| Metric | Description |
|---|---|
PStatesBigHighQosHistogram |
Frequency residency for high-QoS work on big cores. |
PStatesLittleHighQosHistogram |
Frequency residency for high-QoS work on little cores. |
PStatesBigLowQosHistogram |
Frequency residency for low-QoS work on big cores. |
PStatesLittleLowQosHistogram |
Frequency residency for low-QoS work on little cores. |
PStatesBigTotalHistogram |
Total frequency residency for big cores. |
PStatesLittleTotalHistogram |
Total frequency residency for little cores. |
PStatesBigHighQosCumulative |
Cumulative high-QoS frequency residency for big cores. |
PStatesLittleHighQosCumulative |
Cumulative high-QoS frequency residency for little cores. |
PStatesBigLowQosCumulative |
Cumulative low-QoS frequency residency for big cores. |
PStatesLittleLowQosCumulative |
Cumulative low-QoS frequency residency for little cores. |
PStatesBigTotalCumulative |
Cumulative total frequency residency for big cores. |
PStatesLittleTotalCumulative |
Cumulative total frequency residency for little cores. |
Thermal
Reports time spent at each thermal signal or threshold, plus a temperature readout when available.
| Metric | Description |
|---|---|
THERMAL_STATUS (Index 0) |
Time with a thermal status signal, in seconds. |
THERMAL_PROC_HOT (Index 1) |
Time with processor hot asserted, in seconds. |
THERMAL_CRITICAL_TEMP (Index 2) |
Time at a critical thermal condition, in seconds. |
THERMAL_THRESHOLD_1 (Index 3) |
Time at thermal threshold 1, in seconds. |
THERMAL_THRESHOLD_2 (Index 4) |
Time at thermal threshold 2, in seconds. |
THERMAL_POWER_LIMITATION (Index 5) |
Time under thermal power limitation, in seconds. |
THERMAL_READOUT (Index 6) |
Thermal readout in degrees Celsius, when available. |
Fan
Describes fan on-time and the distribution of fan activity across noise and impact buckets.
| Metric | Description |
|---|---|
FanOnTotalTimeInSeconds |
Total time the fan was on during the interval, in seconds. |
FanImpactNoiseHistogram |
Distribution of fan time by fan impact or noise bucket. |
FanImpactNoiseCumulative |
Cumulative distribution of fan impact or noise buckets. |
FanImpactZonesHistogram |
Distribution of fan time by impact zone. |
FanImpactZonesCumulative |
Cumulative distribution of fan impact zones. |
FanRpmBucketBoundaries |
RPM boundaries for fan buckets. |
FanImpactZonesBoundaries |
RPM boundaries for fan impact zones. |
App power attribution (E3)
The Energy Estimation Engine (E3) attributes interval energy to apps, display, GPU, and other categories, including energy merged from skipped intervals.
| Metric | Description |
|---|---|
TotalAppEnergySessionInMilliJoules |
Total app-attributed energy in the interval, in millijoules. |
TotalAppEnergyMissedSessionsInMilliJoules |
App-attributed energy from skipped intervals, merged into this event, in millijoules. |
TotalDisplayEnergySessionInMilliJoules |
Display-attributed app energy in the interval, in millijoules. |
TotalDisplayEnergyMissedSessionsInMilliJoules |
Display-attributed app energy from skipped intervals, in millijoules. |
TotalGpuEnergyInMilliJoules |
GPU energy attributed by E3 in the interval, in millijoules. |
TotalGpuEnergyMissedSessionsInMilliJoules |
GPU energy from skipped intervals, in millijoules. |
TotalLossEnergyInMilliJoules |
E3 loss energy for the interval, in millijoules. |
TotalOtherEnergyInMilliJoules |
E3 other energy for the interval, in millijoules. |
TotalUnknownAppEnergyInMilliJoules |
E3 energy attributed to unknown app activity, in millijoules. |
UnknownAppDurationInSeconds |
Duration associated with unknown app energy, in seconds. |
AttributedToSpecificAppInMyriad |
Share of app energy attributed to named apps, in per-myriad units. |
AppEnergyNames |
App or package names for top app-attributed records. |
AppEnergySessionInMilliJoules |
Per-app non-display energy in the interval, in millijoules. |
AppEnergyMissedSessionsInMilliJoules |
Per-app non-display energy from skipped intervals, in millijoules. |
AppDisplayEnergySessionInMilliJoules |
Per-app display energy in the interval, in millijoules. |
AppDisplayEnergyMissedSessionsInMilliJoules |
Per-app display energy from skipped intervals, in millijoules. |
SleepStudy reports
SleepStudy HTML reports can include PowerSnap data when PowerSnap collects events for a session. To generate a report, run powercfg /sleepstudy in a terminal. SleepStudy processes the PowerSnap payload for report readability, and the payload is only a subset of all the information PowerSnap collects.
Notes and limitations
- Field availability varies by Windows version, device platform, processor topology, firmware, and available sensors.
- Some fields can be empty or zero when a platform doesn't expose the corresponding hardware data.
- App names and power attribution can reveal user or workload activity. Treat PowerSnap events and reports that contain PowerSnap data as diagnostic data.