From: Tvrtko Ursulin <[email protected]>

Check that no-op execution speed is the same in headless mode
and with the display active.

Signed-off-by: Tvrtko Ursulin <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100572
Cc: Imre Deak <[email protected]>
---
 tests/gem_exec_nop.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/tests/gem_exec_nop.c b/tests/gem_exec_nop.c
index 5d0d4957545e..e0e53a3108c6 100644
--- a/tests/gem_exec_nop.c
+++ b/tests/gem_exec_nop.c
@@ -112,6 +112,45 @@ static void single(int fd, uint32_t handle,
                 ring_name, count, time*1e6 / count);
 }
 
+static void headless(int fd, uint32_t handle)
+{
+       const struct intel_execution_engine *e = &intel_execution_engines[0];
+       unsigned int nr_connected = 0;
+       drmModeConnector *connector;
+       drmModeRes *res;
+       unsigned long n1, n2;
+       double delta;
+
+       res = drmModeGetResources(fd);
+       igt_assert(res);
+
+       /* require one connected connector for the test */
+       for (int i = 0; i < res->count_connectors; i++) {
+               connector = drmModeGetConnectorCurrent(fd, res->connectors[i]);
+               if (connector->connection == DRM_MODE_CONNECTED)
+                       nr_connected++;
+               drmModeFreeConnector(connector);
+       }
+       igt_require(nr_connected == 1);
+
+       /* warmup */
+       nop_on_ring(fd, handle, e->exec_id | e->flags, 2, &n1);
+       /* benchmark nops */
+       nop_on_ring(fd, handle, e->exec_id | e->flags, 2, &n1);
+
+       /* force the last connector off */
+       kmstest_unset_all_crtcs(fd, res);
+
+       /* warmup */
+       nop_on_ring(fd, handle, e->exec_id | e->flags, 2, &n2);
+       /* benchmark nops again */
+       nop_on_ring(fd, handle, e->exec_id | e->flags, 2, &n2);
+
+       /* check that the two execution speeds are roughly the same */
+       delta = abs((long)n2 - (long)n1);
+       igt_assert(delta < n1 * 0.1f);
+}
+
 static bool ignore_engine(int fd, unsigned engine)
 {
        if (engine == 0)
@@ -494,6 +533,9 @@ igt_main
        igt_subtest("context-sequential")
                sequential(device, handle, FORKED | CONTEXT, 150);
 
+       igt_subtest("headless")
+               headless(device, handle);
+
        igt_fixture {
                igt_stop_hang_detector();
                gem_close(device, handle);
-- 
2.9.3

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

Reply via email to