overlay: Tidy presentation of ring busy values
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 27 Aug 2013 16:35:51 +0000 (17:35 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 27 Aug 2013 16:43:46 +0000 (17:43 +0100)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
overlay/gpu-top.c

index 1efbbfd..7716695 100644 (file)
@@ -292,11 +292,19 @@ int gpu_top_update(struct gpu_top *gt)
 
                d_time = s->time - d->time;
                for (n = 0; n < gt->num_rings; n++) {
-                       gt->ring[n].u.u.busy = 100 * (s->busy[n] - d->busy[n]) / d_time;
+                       gt->ring[n].u.u.busy = (100 * (s->busy[n] - d->busy[n]) + d_time/2) / d_time;
                        if (gt->have_wait)
-                               gt->ring[n].u.u.wait = 100 * (s->wait[n] - d->wait[n]) / d_time;
+                               gt->ring[n].u.u.wait = (100 * (s->wait[n] - d->wait[n]) + d_time/2) / d_time;
                        if (gt->have_sema)
-                               gt->ring[n].u.u.sema = 100 * (s->sema[n] - d->sema[n]) / d_time;
+                               gt->ring[n].u.u.sema = (100 * (s->sema[n] - d->sema[n]) + d_time/2) / d_time;
+
+                       /* in case of rounding + sampling errors, fudge */
+                       if (gt->ring[n].u.u.busy > 100)
+                               gt->ring[n].u.u.busy = 100;
+                       if (gt->ring[n].u.u.wait > 100)
+                               gt->ring[n].u.u.wait = 100;
+                       if (gt->ring[n].u.u.sema > 100)
+                               gt->ring[n].u.u.sema = 100;
                }
 
                update = 1;