Merged GPU temp reader

This commit is contained in:
seerge
2023-03-13 20:02:59 +01:00
parent 550e9fc036
commit a211dd412f
4 changed files with 66 additions and 65 deletions

View File

@@ -37,7 +37,7 @@ public class NvidiaGpuTemperatureProvider : IGpuTemperatureProvider {
return PhysicalGPU
.GetPhysicalGPUs()
.FirstOrDefault(gpu => gpu.SystemType == SystemType.Laptop);
} catch (NVIDIAApiException) {
} catch {
return null;
}
}

63
HardwareMonitor.cs Normal file
View File

@@ -0,0 +1,63 @@
using System.Diagnostics;
using GHelper.Gpu;
public class HardwareMonitor
{
private static IGpuTemperatureProvider? GpuTemperatureProvider;
public static float? cpuTemp = -1;
public static float? batteryDischarge = -1;
public static int? gpuTemp = null;
public static void ReadSensors()
{
cpuTemp = -1;
batteryDischarge = -1;
try
{
var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true);
cpuTemp = ct.NextValue() - 273;
ct.Dispose();
var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true);
batteryDischarge = cb.NextValue() / 1000;
cb.Dispose();
gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature();
}
catch
{
Logger.WriteLine("Failed reading sensors");
}
}
public static void RecreateGpuTemperatureProvider() {
try {
if (GpuTemperatureProvider != null) {
GpuTemperatureProvider.Dispose();
}
// Detect valid GPU temperature provider.
// We start with NVIDIA because there's always at least an integrated AMD GPU
IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider();
if (gpuTemperatureProvider.IsValid) {
GpuTemperatureProvider = gpuTemperatureProvider;
return;
}
gpuTemperatureProvider.Dispose();
gpuTemperatureProvider = new AmdGpuTemperatureProvider();
if (gpuTemperatureProvider.IsValid) {
GpuTemperatureProvider = gpuTemperatureProvider;
return;
}
gpuTemperatureProvider.Dispose();
GpuTemperatureProvider = null;
} finally {
Debug.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}");
}
}
}

View File

@@ -550,7 +550,7 @@ public class NativeMethods
displayNum = count;
}
count++;
Debug.WriteLine(device.outputTechnology);
//Debug.WriteLine(device.outputTechnology);
//Debug.WriteLine(device.monitorFriendlyDeviceName);
}
@@ -569,7 +569,7 @@ public class NativeMethods
{
laptopScreen = screen.DeviceName;
}
Debug.WriteLine(screen.DeviceName);
//Debug.WriteLine(screen.DeviceName);
count++;
}
}

View File

@@ -4,68 +4,6 @@ using System.Management;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text.Json;
using GHelper.Gpu;
public class HardwareMonitor
{
private static IGpuTemperatureProvider? GpuTemperatureProvider;
public static float? cpuTemp = -1;
public static float? batteryDischarge = -1;
public static int? gpuTemp = null;
public static void ReadSensors()
{
cpuTemp = -1;
batteryDischarge = -1;
try
{
var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true);
cpuTemp = ct.NextValue() - 273;
ct.Dispose();
var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true);
batteryDischarge = cb.NextValue() / 1000;
cb.Dispose();
gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature();
}
catch
{
Logger.WriteLine("Failed reading sensors");
}
}
public static void RecreateGpuTemperatureProvider() {
try {
if (GpuTemperatureProvider != null) {
GpuTemperatureProvider.Dispose();
}
// Detect valid GPU temperature provider.
// We start with NVIDIA because there's always at least an integrated AMD GPU
IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider();
if (gpuTemperatureProvider.IsValid) {
GpuTemperatureProvider = gpuTemperatureProvider;
return;
}
gpuTemperatureProvider.Dispose();
gpuTemperatureProvider = new AmdGpuTemperatureProvider();
if (gpuTemperatureProvider.IsValid) {
GpuTemperatureProvider = gpuTemperatureProvider;
return;
}
gpuTemperatureProvider.Dispose();
GpuTemperatureProvider = null;
} finally {
Debug.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}");
}
}
}
public static class Logger
{
public static void WriteLine(string logMessage)