|
45 | 45 | static unsigned int sizeof_device_field[device_field_count] = { |
46 | 46 | [device_name] = 11, [device_fan_speed] = 11, [device_temperature] = 10, [device_power] = 15, |
47 | 47 | [device_clock] = 11, [device_mem_clock] = 12, [device_pcie] = 46, [device_shadercores] = 7, |
48 | | - [device_l2features] = 11, [device_execengines] = 11, [device_effective_load] = 12, |
| 48 | + [device_l2features] = 11, [device_execengines] = 11, |
49 | 49 | }; |
50 | 50 |
|
51 | 51 | static unsigned int sizeof_process_field[process_field_count] = { |
@@ -94,13 +94,6 @@ static void alloc_device_window(unsigned int start_row, unsigned int start_col, |
94 | 94 | sizeof_device_field[device_temperature] + sizeof_device_field[device_fan_speed]); |
95 | 95 | if (dwin->power_info == NULL) |
96 | 96 | goto alloc_error; |
97 | | - dwin->effective_load = |
98 | | - newwin(1, sizeof_device_field[device_effective_load], start_row + 1, |
99 | | - start_col + spacer * 5 + sizeof_device_field[device_clock] + sizeof_device_field[device_mem_clock] + |
100 | | - sizeof_device_field[device_temperature] + sizeof_device_field[device_fan_speed] + |
101 | | - sizeof_device_field[device_power]); |
102 | | - if (dwin->effective_load == NULL) |
103 | | - goto alloc_error; |
104 | 97 |
|
105 | 98 | // Line 3 = GPU used | MEM used | Encoder | Decoder |
106 | 99 |
|
@@ -206,7 +199,6 @@ static void free_device_windows(struct device_window *dwin) { |
206 | 199 | delwin(dwin->gpu_clock_info); |
207 | 200 | delwin(dwin->mem_clock_info); |
208 | 201 | delwin(dwin->power_info); |
209 | | - delwin(dwin->effective_load); |
210 | 202 | delwin(dwin->temperature); |
211 | 203 | delwin(dwin->fan_speed); |
212 | 204 | delwin(dwin->pcie_info); |
@@ -353,7 +345,7 @@ static unsigned device_length(void) { |
353 | 345 | return max(sizeof_device_field[device_name] + sizeof_device_field[device_pcie] + 1, |
354 | 346 | sizeof_device_field[device_clock] + sizeof_device_field[device_mem_clock] + |
355 | 347 | sizeof_device_field[device_temperature] + sizeof_device_field[device_fan_speed] + |
356 | | - sizeof_device_field[device_power] + sizeof_device_field[device_effective_load] + 5); |
| 348 | + sizeof_device_field[device_power] + 5); |
357 | 349 | } |
358 | 350 |
|
359 | 351 | static pid_t nvtop_pid; |
@@ -501,6 +493,23 @@ static void draw_percentage_meter(WINDOW *win, const char *prelude, unsigned int |
501 | 493 | wnoutrefresh(win); |
502 | 494 | } |
503 | 495 |
|
| 496 | +// Draw percentage with a yellow highlight percentage (yellow percentage <= new_percentage) |
| 497 | +static void draw_percentage_meter_with_yellow_highlight(WINDOW *win, const char *prelude, unsigned int new_percentage, |
| 498 | + unsigned int yellow_percentage, |
| 499 | + const char inside_braces_right[1024]) { |
| 500 | + draw_percentage_meter(win, prelude, new_percentage, inside_braces_right); |
| 501 | + if (yellow_percentage > new_percentage) |
| 502 | + yellow_percentage = new_percentage; |
| 503 | + int rows, cols; |
| 504 | + getmaxyx(win, rows, cols); |
| 505 | + (void)rows; |
| 506 | + size_t size_prelude = strlen(prelude); |
| 507 | + int between_sbraces = cols - size_prelude - 2; |
| 508 | + float usage = round((float)between_sbraces * yellow_percentage / 100.f); |
| 509 | + mvwchgat(win, 0, size_prelude + 1, (int)usage, 0, yellow_color, NULL); |
| 510 | + wnoutrefresh(win); |
| 511 | +} |
| 512 | + |
504 | 513 | static const char *memory_prefix[] = {" B", "Ki", "Mi", "Gi", "Ti", "Pi"}; |
505 | 514 |
|
506 | 515 | static void draw_temp_color(WINDOW *win, unsigned int temp, unsigned int temp_slowdown, bool celsius) { |
@@ -693,8 +702,15 @@ static void draw_devices(struct list_head *devices, struct nvtop_interface *inte |
693 | 702 | draw_percentage_meter(decode_win, "DEC", rate, buff); |
694 | 703 | } |
695 | 704 | if (GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, gpu_util_rate)) { |
696 | | - snprintf(buff, 1024, "%u%%", device->dynamic_info.gpu_util_rate); |
697 | | - draw_percentage_meter(gpu_util_win, "GPU", device->dynamic_info.gpu_util_rate, buff); |
| 705 | + if (GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, effective_load_rate)) { |
| 706 | + snprintf(buff, 1024, "%u%%(eff %u%%)", device->dynamic_info.gpu_util_rate, |
| 707 | + device->dynamic_info.effective_load_rate); |
| 708 | + draw_percentage_meter_with_yellow_highlight(gpu_util_win, "GPU", device->dynamic_info.gpu_util_rate, |
| 709 | + device->dynamic_info.effective_load_rate, buff); |
| 710 | + } else { |
| 711 | + snprintf(buff, 1024, "%u%%", device->dynamic_info.gpu_util_rate); |
| 712 | + draw_percentage_meter(gpu_util_win, "GPU", device->dynamic_info.gpu_util_rate, buff); |
| 713 | + } |
698 | 714 | } else { |
699 | 715 | snprintf(buff, 1024, "N/A"); |
700 | 716 | draw_percentage_meter(gpu_util_win, "GPU", 0, buff); |
@@ -797,15 +813,6 @@ static void draw_devices(struct list_head *devices, struct nvtop_interface *inte |
797 | 813 | mvwchgat(dev->power_info, 0, 0, 3, 0, cyan_color, NULL); |
798 | 814 | wnoutrefresh(dev->power_info); |
799 | 815 |
|
800 | | - // EFFECTIVE LOAD |
801 | | - werase(dev->effective_load); |
802 | | - if (GPUINFO_DYNAMIC_FIELD_VALID(&device->dynamic_info, effective_load_rate)) |
803 | | - mvwprintw(dev->effective_load, 0, 0, "Eff. %3u%%", device->dynamic_info.effective_load_rate); |
804 | | - else |
805 | | - mvwprintw(dev->effective_load, 0, 0, "Eff. N/A%%"); |
806 | | - mvwchgat(dev->effective_load, 0, 0, 4, 0, cyan_color, NULL); |
807 | | - wnoutrefresh(dev->effective_load); |
808 | | - |
809 | 816 | // PICe throughput |
810 | 817 | werase(dev->pcie_info); |
811 | 818 | if (device->static_info.integrated_graphics) { |
|
0 commit comments