[Spice-devel] [PATCH spice-server] worker: Add some loop statistics

Frediano Ziglio fziglio at redhat.com
Fri Aug 25 14:00:51 UTC 2017


Trace the number of loops done processing display commands
and the number of loops in which the queue was full.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
This patch came from quite ancien time when we were debugging
the loop to understand some issues due to GLib integration.
Was marked as "statistics from Jonathon".
The initial patch was composed by a set of simple logs.
As now the statistics code is compiled out by default is worth
having in the main code.
---
 server/red-worker.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/server/red-worker.c b/server/red-worker.c
index 03a409cd..ed538e95 100644
--- a/server/red-worker.c
+++ b/server/red-worker.c
@@ -77,6 +77,8 @@ struct RedWorker {
     RedStatNode stat;
     RedStatCounter wakeup_counter;
     RedStatCounter command_counter;
+    RedStatCounter full_loop_counter;
+    RedStatCounter total_loop_counter;
 
     int driver_cap_monitors_config;
 
@@ -190,6 +192,8 @@ static int red_process_display(RedWorker *worker, int *ring_is_empty)
         return n;
     }
 
+    stat_inc_counter(worker->total_loop_counter, 1);
+
     worker->process_display_generation++;
     *ring_is_empty = FALSE;
     while (red_channel_max_pipe_size(RED_CHANNEL(worker->display_channel)) <= MAX_PIPE_SIZE) {
@@ -270,6 +274,7 @@ static int red_process_display(RedWorker *worker, int *ring_is_empty)
         }
     }
     worker->was_blocked = TRUE;
+    stat_inc_counter(worker->full_loop_counter, 1);
     return n;
 }
 
@@ -1322,6 +1327,8 @@ RedWorker* red_worker_new(QXLInstance *qxl,
     stat_init_node(&worker->stat, reds, NULL, worker_str, TRUE);
     stat_init_counter(&worker->wakeup_counter, reds, &worker->stat, "wakeups", TRUE);
     stat_init_counter(&worker->command_counter, reds, &worker->stat, "commands", TRUE);
+    stat_init_counter(&worker->full_loop_counter, reds, &worker->stat, "full_loops", TRUE);
+    stat_init_counter(&worker->total_loop_counter, reds, &worker->stat, "total_loops", TRUE);
 
     worker->dispatch_watch =
         worker->core.watch_add(&worker->core, dispatcher_get_recv_fd(dispatcher),
-- 
2.13.5



More information about the Spice-devel mailing list