summaryrefslogtreecommitdiff
path: root/overlay/gpu-perf.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-08-17 23:07:01 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2013-08-17 23:21:34 +0100
commitf185f46114620ff8938abc965f89ecb4d295b4f4 (patch)
treea4f41c7b0fb43e7bb5726fcd19854f8d0e9c8c7a /overlay/gpu-perf.c
parent67f533f836487093a27e176d64de206772088345 (diff)
overlay: Correct layout of ring/seqno in raw sample
For seqno completion, the events are too coarse i.e. one event may signal the completion of a few seqno. We will need to sort the events to properly compute the busy times. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'overlay/gpu-perf.c')
-rw-r--r--overlay/gpu-perf.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/overlay/gpu-perf.c b/overlay/gpu-perf.c
index 56bc8b02..642d20c9 100644
--- a/overlay/gpu-perf.c
+++ b/overlay/gpu-perf.c
@@ -231,6 +231,7 @@ static int busy_start(struct gpu_perf *gp, const void *event)
if (busy == NULL)
return 0;
+ busy->ring = sample->raw[1];
busy->seqno = sample->raw[2];
busy->time = sample->time;
busy->comm = comm;
@@ -246,6 +247,9 @@ static int busy_end(struct gpu_perf *gp, const void *event)
struct gpu_perf_time *busy, **prev;
for (prev = &gp->busy; (busy = *prev) != NULL; prev = &busy->next) {
+ if (busy->ring != sample->raw[1])
+ continue;
+
if (busy->seqno != sample->raw[2])
continue;
@@ -279,7 +283,8 @@ static int wait_begin(struct gpu_perf *gp, const void *event)
return 0;
wait->comm = comm;
- wait->seqno = sample->raw[3];
+ wait->ring = sample->raw[1];
+ wait->seqno = sample->raw[2];
wait->time = sample->time;
wait->next = gp->wait;
gp->wait = wait;
@@ -293,7 +298,10 @@ static int wait_end(struct gpu_perf *gp, const void *event)
struct gpu_perf_time *wait, **prev;
for (prev = &gp->wait; (wait = *prev) != NULL; prev = &wait->next) {
- if (wait->seqno != sample->raw[3])
+ if (wait->ring != sample->raw[1])
+ continue;
+
+ if (wait->seqno != sample->raw[2])
continue;
wait->comm->wait_time += sample->time - wait->time;