[Mesa-dev] [PATCH 4/4] gallium/hud: handle a thread switch for API-thread-busy monitoring
Marek Olšák
maraeo at gmail.com
Mon Feb 20 17:44:45 UTC 2017
From: Marek Olšák <marek.olsak at amd.com>
---
src/gallium/auxiliary/hud/hud_cpu.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/gallium/auxiliary/hud/hud_cpu.c b/src/gallium/auxiliary/hud/hud_cpu.c
index 1cba353..302445d 100644
--- a/src/gallium/auxiliary/hud/hud_cpu.c
+++ b/src/gallium/auxiliary/hud/hud_cpu.c
@@ -237,24 +237,30 @@ struct thread_info {
static void
query_api_thread_busy_status(struct hud_graph *gr)
{
struct thread_info *info = gr->query_data;
int64_t now = os_time_get_nano();
if (info->last_time) {
if (info->last_time + gr->pane->period*1000 <= now) {
int64_t thread_now = pipe_current_thread_get_time_nano();
-
- hud_graph_add_value(gr,
- (thread_now - info->last_thread_time) * 100 /
- (now - info->last_time));
+ unsigned percent = (thread_now - info->last_thread_time) * 100 /
+ (now - info->last_time);
+
+ /* Check if the context changed a thread, so that we don't show
+ * a random value. When a thread is changed, the new thread clock
+ * is different, which can result in "percent" being very high.
+ */
+ if (percent > 100)
+ percent = 0;
+ hud_graph_add_value(gr, percent);
info->last_thread_time = thread_now;
info->last_time = now;
}
} else {
/* initialize */
info->last_time = now;
info->last_thread_time = pipe_current_thread_get_time_nano();
}
}
--
2.7.4
More information about the mesa-dev
mailing list