gallium/hud: handle a thread switch for API-thread-busy monitoring
authorMarek Olšák <marek.olsak@amd.com>
Sun, 19 Feb 2017 18:29:06 +0000 (19:29 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 22 Feb 2017 19:26:39 +0000 (20:26 +0100)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/auxiliary/hud/hud_cpu.c

index 1cba353603d9d2efa607b70809689394fec6da15..302445d19b7b952bd4bc5e4747c643b2ab852781 100644 (file)
@@ -244,10 +244,16 @@ 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();
-
-         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;