summaryrefslogtreecommitdiff
path: root/benchmarks/gem_exec_ctx.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2015-11-27 09:56:09 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2015-11-27 10:03:56 +0000
commitd44100ed233db46085b626c1d493856ca1900eab (patch)
tree4f721a4768892b4f1f2e5a221e55726b35ffb809 /benchmarks/gem_exec_ctx.c
parent26507f3e21fe14b0fe5b3daec73c26f37bb2189a (diff)
benchmarks/gem_exec_ctx: Measure switching between fds
Switching between fds also involves a context switch, include it amongst the measurements. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'benchmarks/gem_exec_ctx.c')
-rw-r--r--benchmarks/gem_exec_ctx.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/benchmarks/gem_exec_ctx.c b/benchmarks/gem_exec_ctx.c
index 2da653aa..58ebf0b4 100644
--- a/benchmarks/gem_exec_ctx.c
+++ b/benchmarks/gem_exec_ctx.c
@@ -44,7 +44,7 @@
#include "intel_io.h"
#include "igt_stats.h"
-enum mode { NOP, CREATE, SWITCH, };
+enum mode { NOP, CREATE, SWITCH, DEFAULT };
#define LOCAL_I915_EXEC_NO_RELOC (1<<11)
#define LOCAL_I915_EXEC_HANDLE_LUT (1<<12)
@@ -86,13 +86,15 @@ static int loop(unsigned ring, int reps, enum mode mode)
{
struct drm_i915_gem_execbuffer2 execbuf;
struct drm_i915_gem_exec_object2 gem_exec;
- int count, fd;
+ int count, fds[2], fd;
uint32_t ctx;
- fd = drm_open_driver(DRIVER_INTEL);
+ fd = fds[0] = drm_open_driver(DRIVER_INTEL);
+ fds[1] = drm_open_driver(DRIVER_INTEL);
memset(&gem_exec, 0, sizeof(gem_exec));
gem_exec.handle = batch(fd);
+ igt_assert(gem_open(fds[1], gem_flink(fds[0], gem_exec.handle)) == gem_exec.handle);
memset(&execbuf, 0, sizeof(execbuf));
execbuf.buffers_ptr = (uintptr_t)&gem_exec;
@@ -100,16 +102,17 @@ static int loop(unsigned ring, int reps, enum mode mode)
execbuf.flags = ring;
execbuf.flags |= LOCAL_I915_EXEC_HANDLE_LUT;
execbuf.flags |= LOCAL_I915_EXEC_NO_RELOC;
- execbuf.rsvd1 = __gem_context_create(fd);
- if (execbuf.rsvd1 == 0)
- return 77;
+ if (mode != DEFAULT) {
+ execbuf.rsvd1 = __gem_context_create(fd);
+ if (execbuf.rsvd1 == 0)
+ return 77;
+ }
if (__gem_execbuf(fd, &execbuf)) {
execbuf.flags = ring;
if (__gem_execbuf(fd, &execbuf))
return 77;
}
-
ctx = gem_context_create(fd);
for (count = 1; count <= 1<<16; count <<= 1) {
@@ -136,6 +139,11 @@ static int loop(unsigned ring, int reps, enum mode mode)
execbuf.rsvd1 = ctx;
ctx = tmp;
break;
+
+ case DEFAULT:
+ fd = fds[count & 1];
+ break;
+
case NOP:
break;
}
@@ -181,6 +189,8 @@ int main(int argc, char **argv)
mode = CREATE;
else if (strcmp(optarg, "switch") == 0)
mode = SWITCH;
+ else if (strcmp(optarg, "default") == 0)
+ mode = DEFAULT;
else if (strcmp(optarg, "nop") == 0)
mode = NOP;
else