The first dispatch incurs the cost of waking up the device, so also
measure after issuing a spinner to keep the device awake as we submit.

Signed-off-by: Chris Wilson <[email protected]>
---
 tests/i915/gem_exec_latency.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/tests/i915/gem_exec_latency.c b/tests/i915/gem_exec_latency.c
index ea44adc14..234e27f1e 100644
--- a/tests/i915/gem_exec_latency.c
+++ b/tests/i915/gem_exec_latency.c
@@ -55,8 +55,9 @@
 
 #define ENGINE_FLAGS  (I915_EXEC_RING_MASK | LOCAL_I915_EXEC_BSD_MASK)
 
-#define CORK 0x1
-#define PREEMPT 0x2
+#define LIVE 0x1
+#define CORK 0x2
+#define PREEMPT 0x4
 
 static unsigned int ring_size;
 static double rcs_clock;
@@ -120,6 +121,7 @@ static void latency_on_ring(int fd,
        struct drm_i915_gem_exec_object2 obj[3];
        struct drm_i915_gem_relocation_entry reloc;
        struct drm_i915_gem_execbuffer2 execbuf;
+       igt_spin_t *spin = NULL;
        IGT_CORK_HANDLE(c);
        volatile uint32_t *reg;
        unsigned repeats = ring_size;
@@ -189,6 +191,9 @@ static void latency_on_ring(int fd,
                execbuf.buffer_count = 3;
        }
 
+       if (flags & LIVE)
+               spin = igt_spin_batch_new(fd, .engine = ring);
+
        start = *reg;
        for (j = 0; j < repeats; j++) {
                uint64_t presumed_offset = reloc.presumed_offset;
@@ -204,6 +209,7 @@ static void latency_on_ring(int fd,
        end = *reg;
        igt_assert(reloc.presumed_offset == obj[1].offset);
 
+       igt_spin_batch_free(fd, spin);
        if (flags & CORK)
                igt_cork_unplug(&c);
 
@@ -696,6 +702,11 @@ igt_main
                                                        e->exec_id | e->flags,
                                                        e->name, 0);
 
+                               igt_subtest_f("%s-live-dispatch", e->name)
+                                       latency_on_ring(device,
+                                                       e->exec_id | e->flags,
+                                                       e->name, LIVE);
+
                                igt_subtest_f("%s-poll", e->name)
                                        poll_ring(device,
                                                  e->exec_id | e->flags,
@@ -715,6 +726,10 @@ igt_main
                                                              e->name,
                                                              0);
 
+                               igt_subtest_f("%s-live-dispatch-queued", 
e->name)
+                                       latency_on_ring(device,
+                                                       e->exec_id | e->flags,
+                                                       e->name, LIVE | CORK);
                                igt_subtest_f("%s-dispatch-queued", e->name)
                                        latency_on_ring(device,
                                                        e->exec_id | e->flags,
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to