Class WindowsGpuStats

java.lang.Object
oshi.hardware.common.platform.windows.WindowsGpuStats
All Implemented Interfaces:
AutoCloseable, GpuStats

@ThreadSafe public abstract class WindowsGpuStats extends Object implements GpuStats
Common Windows GpuStats implementation. Subclasses provide platform-specific native dispatch.
  • Constructor Details

    • WindowsGpuStats

      protected WindowsGpuStats(String luidPrefix, String lhmParent, int pciBusNumber, String pciBusId, String cardName)
      Constructor.
      Parameters:
      luidPrefix - the LUID prefix for PDH counter matching
      lhmParent - the LHM parent identifier
      pciBusNumber - the PCI bus number
      pciBusId - the PCI bus ID string
      cardName - the card name
  • Method Details

    • queryGpuEngineCounters

      protected abstract Pair<List<String>, Map<GpuInformation.GpuEngineProperty, List<Long>>> queryGpuEngineCounters()
      Queries GPU engine performance counters.
      Returns:
      engine counter data
    • queryGpuAdapterMemoryCounters

      protected abstract Pair<List<String>, Map<GpuInformation.GpuAdapterMemoryProperty, List<Long>>> queryGpuAdapterMemoryCounters()
      Queries GPU adapter memory performance counters.
      Returns:
      adapter memory counter data
    • queryLhmSensors

      protected abstract WmiResult<LhmSensor.LhmSensorProperty> queryLhmSensors(String parent, String sensorType)
      Queries LHM sensors.
      Parameters:
      parent - the parent identifier
      sensorType - the sensor type
      Returns:
      the WMI result
    • isNvmlAvailable

      protected abstract boolean isNvmlAvailable()
      Checks whether the NVML library is available.
      Returns:
      whether NVML is available
    • nvmlFindDevice

      protected abstract String nvmlFindDevice(String pciBusId)
      Finds an NVML device by PCI bus ID.
      Parameters:
      pciBusId - the PCI bus ID
      Returns:
      the device handle string, or null
    • nvmlFindDeviceByName

      protected abstract String nvmlFindDeviceByName(String gpuName)
      Finds an NVML device by name.
      Parameters:
      gpuName - the GPU name
      Returns:
      the device handle string, or null
    • nvmlGetTemperature

      protected abstract double nvmlGetTemperature(String device)
      Gets the GPU temperature via NVML.
      Parameters:
      device - the NVML device handle
      Returns:
      temperature in degrees C, or negative if unavailable
    • nvmlGetPowerDraw

      protected abstract double nvmlGetPowerDraw(String device)
      Gets the GPU power draw via NVML.
      Parameters:
      device - the NVML device handle
      Returns:
      power draw in watts, or negative if unavailable
    • nvmlGetCoreClockMhz

      protected abstract long nvmlGetCoreClockMhz(String device)
      Gets the GPU core clock via NVML.
      Parameters:
      device - the NVML device handle
      Returns:
      core clock in MHz, or negative if unavailable
    • nvmlGetMemoryClockMhz

      protected abstract long nvmlGetMemoryClockMhz(String device)
      Gets the GPU memory clock via NVML.
      Parameters:
      device - the NVML device handle
      Returns:
      memory clock in MHz, or negative if unavailable
    • nvmlGetFanSpeedPercent

      protected abstract double nvmlGetFanSpeedPercent(String device)
      Gets the GPU fan speed via NVML.
      Parameters:
      device - the NVML device handle
      Returns:
      fan speed percent, or negative if unavailable
    • isAdlAvailable

      protected abstract boolean isAdlAvailable()
      Checks whether the ADL library is available.
      Returns:
      whether ADL is available
    • adlFindAdapterIndex

      protected abstract int adlFindAdapterIndex(int pciBusNumber)
      Finds an ADL adapter index by PCI bus number.
      Parameters:
      pciBusNumber - the PCI bus number
      Returns:
      the adapter index, or -1 if not found
    • adlGetTemperature

      protected abstract double adlGetTemperature(int adapterIndex)
      Gets the GPU temperature via ADL.
      Parameters:
      adapterIndex - the ADL adapter index
      Returns:
      temperature in degrees C, or negative if unavailable
    • adlGetPowerDraw

      protected abstract double adlGetPowerDraw(int adapterIndex)
      Gets the GPU power draw via ADL.
      Parameters:
      adapterIndex - the ADL adapter index
      Returns:
      power draw in watts, or negative if unavailable
    • adlGetCoreClockMhz

      protected abstract long adlGetCoreClockMhz(int adapterIndex)
      Gets the GPU core clock via ADL.
      Parameters:
      adapterIndex - the ADL adapter index
      Returns:
      core clock in MHz, or negative if unavailable
    • adlGetMemoryClockMhz

      protected abstract long adlGetMemoryClockMhz(int adapterIndex)
      Gets the GPU memory clock via ADL.
      Parameters:
      adapterIndex - the ADL adapter index
      Returns:
      memory clock in MHz, or negative if unavailable
    • adlGetFanSpeedPercent

      protected abstract double adlGetFanSpeedPercent(int adapterIndex)
      Gets the GPU fan speed via ADL.
      Parameters:
      adapterIndex - the ADL adapter index
      Returns:
      fan speed percent, or negative if unavailable
    • close

      public void close()
      Description copied from interface: GpuStats
      Releases any native resources held by this session. Safe to call multiple times; subsequent calls after the first are no-ops. Does not throw checked exceptions.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface GpuStats
    • isClosed

      public boolean isClosed()
      Description copied from interface: GpuStats
      Returns true if GpuStats.close() has been called on this session. Does not throw.
      Specified by:
      isClosed in interface GpuStats
      Returns:
      true if this session is closed
    • getGpuTicks

      public GpuTicks getGpuTicks()
      Description copied from interface: GpuStats
      Returns a snapshot of cumulative GPU active and idle ticks in opaque, platform-native units. The counters are monotonically increasing; diff two snapshots to compute utilization:
      long dActive = curr.getActiveTicks() - prev.getActiveTicks();
      long dIdle = curr.getIdleTicks() - prev.getIdleTicks();
      long dTotal = dActive + dIdle;
      double utilPct = dTotal > 0 ? dActive * 100.0 / dTotal : -1d;
      

      Both counters are 0 on platforms where tick-level GPU metrics are not available (see GpuTicks for the sentinel semantics). Use GpuStats.getGpuUtilization() as an alternative.

      Specified by:
      getGpuTicks in interface GpuStats
      Returns:
      a GpuTicks snapshot; never null
    • getGpuUtilization

      public double getGpuUtilization()
      Description copied from interface: GpuStats
      Returns the instantaneous GPU core utilization as a percentage, computed internally as a delta between the current sample and the previous one recorded by this session.

      Behaviour on the first call is implementation-dependent. Backends that derive utilization from an energy or residency counter record an initial baseline on the first call and return -1; subsequent calls return the utilization computed over the elapsed interval. Backends that read an instantaneous hardware register may return a valid value immediately. To ensure the first polling iteration returns a valid value on delta-based backends, call this method once as a priming step before the polling loop begins:

      stats.getGpuUtilization(); // prime — may return -1 on delta-based backends
      Thread.sleep(intervalMs);
      double util = stats.getGpuUtilization(); // valid on all backends
      
      Specified by:
      getGpuUtilization in interface GpuStats
      Returns:
      utilization in the range 0.0 to 100.0, or -1 if not available or not yet primed
    • getVramUsed

      public long getVramUsed()
      Description copied from interface: GpuStats
      Returns the amount of dedicated VRAM currently in use.
      Specified by:
      getVramUsed in interface GpuStats
      Returns:
      bytes of VRAM in use, or -1 if unavailable
    • getSharedMemoryUsed

      public long getSharedMemoryUsed()
      Description copied from interface: GpuStats
      Returns the amount of shared system memory currently used by this GPU.
      Specified by:
      getSharedMemoryUsed in interface GpuStats
      Returns:
      bytes of shared memory in use, or -1 if unavailable
    • getTemperature

      public double getTemperature()
      Description copied from interface: GpuStats
      Returns the GPU temperature.
      Specified by:
      getTemperature in interface GpuStats
      Returns:
      temperature in degrees Celsius, or -1 if unavailable
    • getPowerDraw

      public double getPowerDraw()
      Description copied from interface: GpuStats
      Returns the GPU power consumption. On backends that derive power from an energy counter (e.g. macOS Apple Silicon via IOReport), this is computed as a delta between the current sample and the previous one; the first call records the initial baseline and returns -1. On backends that read an instantaneous hardware sensor (e.g. Windows via NVML/ADL/LHM), a valid value may be returned immediately.

      To ensure the first polling iteration returns a valid value on delta-based backends, call this method once as a priming step before the polling loop begins:

      stats.getPowerDraw(); // prime — may return -1 on delta-based backends
      Thread.sleep(intervalMs);
      double watts = stats.getPowerDraw(); // valid on all backends
      
      Specified by:
      getPowerDraw in interface GpuStats
      Returns:
      power draw in watts, or -1 if unavailable or not yet primed
    • getCoreClockMhz

      public long getCoreClockMhz()
      Description copied from interface: GpuStats
      Returns the current GPU core clock speed.
      Specified by:
      getCoreClockMhz in interface GpuStats
      Returns:
      core clock in MHz, or -1 if unavailable
    • getMemoryClockMhz

      public long getMemoryClockMhz()
      Description copied from interface: GpuStats
      Returns the current GPU memory clock speed.
      Specified by:
      getMemoryClockMhz in interface GpuStats
      Returns:
      memory clock in MHz, or -1 if unavailable
    • getFanSpeedPercent

      public double getFanSpeedPercent()
      Description copied from interface: GpuStats
      Returns the GPU fan speed as a percentage of maximum.
      Specified by:
      getFanSpeedPercent in interface GpuStats
      Returns:
      fan speed in the range 0.0 to 100.0, or -1 if unavailable