diff options
author | Marek Olšák <[email protected]> | 2017-06-21 21:12:26 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-06-26 02:17:03 +0200 |
commit | 8f4bc8a3240de6255ead042704b80a18ebcf0973 (patch) | |
tree | 344cdfcd503c2edeb29d230a9b1e8cb39fe6a757 /src/gallium/auxiliary/hud/hud_cpu.c | |
parent | 11cf079b678aed0c5d4d0df9fa59949ec1d07794 (diff) |
gallium/hud: add API-thread-busy for monitoring the thread load
Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/hud/hud_cpu.c')
-rw-r--r-- | src/gallium/auxiliary/hud/hud_cpu.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/hud/hud_cpu.c b/src/gallium/auxiliary/hud/hud_cpu.c index 26f9fa78ee2..38403f9f78a 100644 --- a/src/gallium/auxiliary/hud/hud_cpu.c +++ b/src/gallium/auxiliary/hud/hud_cpu.c @@ -32,6 +32,7 @@ #include "os/os_time.h" #include "os/os_thread.h" #include "util/u_memory.h" +#include "util/u_queue.h" #include <stdio.h> #include <inttypes.h> #ifdef PIPE_OS_WINDOWS @@ -231,6 +232,7 @@ hud_get_num_cpus(void) } struct thread_info { + bool main_thread; int64_t last_time; int64_t last_thread_time; }; @@ -243,7 +245,19 @@ query_api_thread_busy_status(struct hud_graph *gr) if (info->last_time) { if (info->last_time + gr->pane->period*1000 <= now) { - int64_t thread_now = pipe_current_thread_get_time_nano(); + int64_t thread_now; + + if (info->main_thread) { + thread_now = pipe_current_thread_get_time_nano(); + } else { + struct util_queue_monitoring *mon = gr->pane->hud->monitored_queue; + + if (mon && mon->queue) + thread_now = util_queue_get_thread_time_nano(mon->queue, 0); + else + thread_now = 0; + } + unsigned percent = (thread_now - info->last_thread_time) * 100 / (now - info->last_time); @@ -266,7 +280,7 @@ query_api_thread_busy_status(struct hud_graph *gr) } void -hud_main_thread_busy_install(struct hud_pane *pane, const char *name) +hud_thread_busy_install(struct hud_pane *pane, const char *name, bool main) { struct hud_graph *gr; @@ -282,6 +296,7 @@ hud_main_thread_busy_install(struct hud_pane *pane, const char *name) return; } + ((struct thread_info*)gr->query_data)->main_thread = main; gr->query_new_value = query_api_thread_busy_status; /* Don't use free() as our callback as that messes up Gallium's |