diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2013-08-17 23:07:01 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2013-08-17 23:21:34 +0100 |
commit | f185f46114620ff8938abc965f89ecb4d295b4f4 (patch) | |
tree | a4f41c7b0fb43e7bb5726fcd19854f8d0e9c8c7a | |
parent | 67f533f836487093a27e176d64de206772088345 (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>
-rw-r--r-- | overlay/gpu-perf.c | 12 | ||||
-rw-r--r-- | overlay/gpu-perf.h | 1 |
2 files changed, 11 insertions, 2 deletions
diff --git a/overlay/gpu-perf.c b/overlay/gpu-perf.c index 56bc8b02d..642d20c9c 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; diff --git a/overlay/gpu-perf.h b/overlay/gpu-perf.h index ced9379ef..c0e003016 100644 --- a/overlay/gpu-perf.h +++ b/overlay/gpu-perf.h @@ -25,6 +25,7 @@ struct gpu_perf { struct gpu_perf_time { struct gpu_perf_time *next; struct gpu_perf_comm *comm; + int ring; uint32_t seqno; uint64_t time; } *wait, *busy; |