tests/gem_flink_race: count leaked objects
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 24 Jul 2013 05:37:45 +0000 (07:37 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 24 Jul 2013 05:37:45 +0000 (07:37 +0200)
And fail the test if the leak count is bigger than 0.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
tests/gem_flink_race.c

index 47544bd..612f39e 100644 (file)
@@ -24,6 +24,7 @@
  *    Daniel Vetter <daniel.vetter@ffwll.ch>
  */
 
+#define _GNU_SOURCE
 #include <sys/ioctl.h>
 #include <stdlib.h>
 #include <string.h>
@@ -31,6 +32,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <pthread.h>
+#include <stdio.h>
 
 #include "drmtest.h"
 #include "i915_drm.h"
@@ -64,15 +66,35 @@ static void *thread_fn(void *p)
        return (void *)0;
 }
 
+static int get_object_count(const char *path)
+{
+       FILE *file;
+       int ret, scanned;
+       file = fopen(path, "r");
+
+       scanned = fscanf(file, "%i objects,", &ret);
+       assert(scanned == 1);
+
+       return ret;
+}
+
 int main(int argc, char **argv)
 {
        int num_threads;
        pthread_t *threads;
        int r, i;
        void *status;
+       int device = drm_get_card(0);
+       int old_object_count, new_object_count;
+       char *path;
 
        drmtest_skip_on_simulation();
 
+       r = asprintf(&path, "/sys/kernel/debug/dri/%d/i915_gem_objects", device);
+       assert(r != -1);
+
+       old_object_count = get_object_count(path);
+
        num_threads = sysconf(_SC_NPROCESSORS_ONLN) - 1;
        if (!num_threads)
                num_threads = 1;
@@ -109,5 +131,9 @@ int main(int argc, char **argv)
 
        close(fd);
 
-       return 0;
+       new_object_count = get_object_count(path);
+
+       printf("leaked %d objects\n", new_object_count - old_object_count);
+
+       return new_object_count - old_object_count > 0 ? 1 : 0;
 }