From 10bb4a89f2959bf7a88518ea4832e540c77df65a Mon Sep 17 00:00:00 2001 From: stsdc <6031763+stsdc@users.noreply.github.com> Date: Wed, 28 Feb 2024 18:34:00 +0100 Subject: [PATCH 1/2] Fixes VRAM percentage #369 --- src/Resources/GPU/GPUAmd.vala | 13 ++++++++++--- src/Resources/GPU/GPUNvidia.vala | 8 ++++++-- src/Resources/GPU/IGPU.vala | 6 +++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Resources/GPU/GPUAmd.vala b/src/Resources/GPU/GPUAmd.vala index c57667df..38ecc512 100644 --- a/src/Resources/GPU/GPUAmd.vala +++ b/src/Resources/GPU/GPUAmd.vala @@ -9,7 +9,9 @@ public class Monitor.GPUAmd : IGPU, Object { public int memory_percentage { get; protected set; } - public int memory_vram_used { get; protected set; } + public double memory_vram_used { get; protected set; } + + public double memory_vram_total { get; set; } public double temperature { get; protected set; } @@ -22,11 +24,15 @@ public class Monitor.GPUAmd : IGPU, Object { } private void update_memory_vram_used () { - memory_vram_used = int.parse (get_sysfs_value ("/sys/class/drm/card0/device/mem_info_vram_used")); + memory_vram_used = double.parse (get_sysfs_value ("/sys/class/drm/card0/device/mem_info_vram_used")); + } + + private void update_memory_vram_total () { + memory_vram_total = double.parse (get_sysfs_value ("/sys/class/drm/card0/device/mem_info_vram_total"));; } private void update_memory_percentage () { - memory_percentage = int.parse (get_sysfs_value ("/sys/class/drm/card0/device/mem_busy_percent")); + memory_percentage = (int) (Math.round ((memory_vram_used / memory_vram_total) * 100)); } private void update_percentage () { @@ -36,6 +42,7 @@ public class Monitor.GPUAmd : IGPU, Object { public void update () { update_temperature (); update_memory_vram_used (); + update_memory_vram_total (); update_memory_percentage (); update_percentage (); } diff --git a/src/Resources/GPU/GPUNvidia.vala b/src/Resources/GPU/GPUNvidia.vala index 66afe19b..6c325634 100644 --- a/src/Resources/GPU/GPUNvidia.vala +++ b/src/Resources/GPU/GPUNvidia.vala @@ -9,7 +9,9 @@ public class Monitor.GPUNvidia : IGPU, Object { public int memory_percentage { get; protected set; } - public int memory_vram_used { get; protected set; } + public double memory_vram_used { get; protected set; } + + public double memory_vram_total { get; set; } public double temperature { get; protected set; } @@ -88,7 +90,9 @@ public class Monitor.GPUNvidia : IGPU, Object { private void update_temperature () { temperature = nvidia_temperature; } - private void update_memory_vram_used () { memory_vram_used = nvidia_memory_vram_used; } + private void update_memory_vram_used () { memory_vram_used = (double) nvidia_memory_vram_used; } + + private void update_memory_vram_total () { } private void update_memory_percentage () { memory_percentage = nvidia_memory_percentage; } diff --git a/src/Resources/GPU/IGPU.vala b/src/Resources/GPU/IGPU.vala index d15abce5..bccbfc67 100644 --- a/src/Resources/GPU/IGPU.vala +++ b/src/Resources/GPU/IGPU.vala @@ -15,7 +15,9 @@ public interface Monitor.IGPU : Object { public abstract int memory_percentage { get; protected set; } - public abstract int memory_vram_used { get; protected set; } + public abstract double memory_vram_used { get; protected set; } + + public abstract double memory_vram_total { get; protected set; } public abstract double temperature { get; protected set; } @@ -23,6 +25,8 @@ public interface Monitor.IGPU : Object { public abstract void update_memory_vram_used (); + public abstract void update_memory_vram_total (); + public abstract void update_memory_percentage (); public abstract void update_percentage (); From 1e0645dfb2249a21918fefd9722b37b4bfb1190d Mon Sep 17 00:00:00 2001 From: stsdc <6031763+stsdc@users.noreply.github.com> Date: Wed, 28 Feb 2024 18:38:08 +0100 Subject: [PATCH 2/2] format --- src/Resources/GPU/GPUAmd.vala | 5 ++-- src/Resources/GPU/GPUNvidia.vala | 40 ++++++++++++++++++++------------ src/Resources/GPU/IGPU.vala | 3 ++- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/Resources/GPU/GPUAmd.vala b/src/Resources/GPU/GPUAmd.vala index 38ecc512..667ab300 100644 --- a/src/Resources/GPU/GPUAmd.vala +++ b/src/Resources/GPU/GPUAmd.vala @@ -1,5 +1,5 @@ public class Monitor.GPUAmd : IGPU, Object { - public SessionManager? session_manager { get; protected set; } + public SessionManager ? session_manager { get; protected set; } public Gee.HashMap<string, HwmonTemperature> hwmon_temperatures { get; set; } @@ -16,7 +16,7 @@ public class Monitor.GPUAmd : IGPU, Object { public double temperature { get; protected set; } construct { - // session_manager = get_sessman (); + // session_manager = get_sessman (); } private void update_temperature () { @@ -46,4 +46,5 @@ public class Monitor.GPUAmd : IGPU, Object { update_memory_percentage (); update_percentage (); } + } diff --git a/src/Resources/GPU/GPUNvidia.vala b/src/Resources/GPU/GPUNvidia.vala index 6c325634..1074d6a4 100644 --- a/src/Resources/GPU/GPUNvidia.vala +++ b/src/Resources/GPU/GPUNvidia.vala @@ -1,5 +1,5 @@ public class Monitor.GPUNvidia : IGPU, Object { - public SessionManager? session_manager { get; protected set; } + public SessionManager ? session_manager { get; protected set; } public Gee.HashMap<string, HwmonTemperature> hwmon_temperatures { get; set; } @@ -23,7 +23,7 @@ public class Monitor.GPUNvidia : IGPU, Object { public int nvidia_percentage = 0; - public char *nvidia_used = ""; + public char * nvidia_used = ""; public bool nvidia_resources_temperature; @@ -34,7 +34,7 @@ public class Monitor.GPUNvidia : IGPU, Object { public X.Display nvidia_display; construct { - // session_manager = get_sessman (); + // session_manager = get_sessman (); nvidia_display = new X.Display (); } @@ -45,7 +45,7 @@ public class Monitor.GPUNvidia : IGPU, Object { 0, NV_CTRL_GPU_CORE_TEMPERATURE, &nvidia_temperature - ); + ); if (!nvidia_resources_temperature) { warning ("Could not query NV_CTRL_GPU_CORE_TEMPERATURE attribute!\n"); @@ -59,11 +59,11 @@ public class Monitor.GPUNvidia : IGPU, Object { 0, NV_CTRL_USED_DEDICATED_GPU_MEMORY, &nvidia_memory_vram_used - ); + ); if (!nvidia_resources_vram_used) { warning ("Could not query NV_CTRL_USED_DEDICATED_GPU_MEMORY attribute!\n"); - return ; + return; } nvidia_resources_used = NVCtrl.XNVCTRLQueryTargetStringAttribute ( @@ -73,30 +73,39 @@ public class Monitor.GPUNvidia : IGPU, Object { 0, NV_CTRL_STRING_GPU_UTILIZATION, &nvidia_used - ); + ); // var str_used = (string)nvidia_used; - nvidia_percentage = int.parse (((string)nvidia_used).split_set ("=,")[1]); - nvidia_memory_percentage = int.parse (((string)nvidia_used).split_set ("=,")[3]); + nvidia_percentage = int.parse (((string) nvidia_used).split_set ("=,")[1]); + nvidia_memory_percentage = int.parse (((string) nvidia_used).split_set ("=,")[3]); debug ("USED_GRAPHICS: %d%\n", nvidia_percentage); debug ("USED_MEMORY: %d%\n", nvidia_memory_percentage); if (!nvidia_resources_used) { warning ("Could not query NV_CTRL_STRING_GPU_UTILIZATION attribute!\n"); - return ; + return; } } - private void update_temperature () { temperature = nvidia_temperature; } + private void update_temperature () { + temperature = nvidia_temperature; + } - private void update_memory_vram_used () { memory_vram_used = (double) nvidia_memory_vram_used; } + private void update_memory_vram_used () { + memory_vram_used = (double) nvidia_memory_vram_used; + } - private void update_memory_vram_total () { } + private void update_memory_vram_total () { + } - private void update_memory_percentage () { memory_percentage = nvidia_memory_percentage; } + private void update_memory_percentage () { + memory_percentage = nvidia_memory_percentage; + } - private void update_percentage () { percentage = nvidia_percentage; } + private void update_percentage () { + percentage = nvidia_percentage; + } public void update () { update_nv_resources (); @@ -105,4 +114,5 @@ public class Monitor.GPUNvidia : IGPU, Object { update_memory_percentage (); update_percentage (); } + } diff --git a/src/Resources/GPU/IGPU.vala b/src/Resources/GPU/IGPU.vala index bccbfc67..82abe02a 100644 --- a/src/Resources/GPU/IGPU.vala +++ b/src/Resources/GPU/IGPU.vala @@ -1,5 +1,5 @@ public interface Monitor.IGPU : Object { - public abstract SessionManager? session_manager { get; public set; } + public abstract SessionManager ? session_manager { get; public set; } public abstract Gee.HashMap<string, HwmonTemperature> hwmon_temperatures { get; set; } @@ -44,4 +44,5 @@ public interface Monitor.IGPU : Object { } return content; } + }