[PATCH libinput 1/3] test: only initialize the generic rules/hwdb once

Hans de Goede hdegoede at redhat.com
Thu Jul 23 00:47:25 PDT 2015


Hi,

On 23-07-15 06:59, Peter Hutterer wrote:
> Installing the udev rules and reloading udevadm takes around 150ms each
> time. For test-pointer alone (currently 336 tests) this adds almost a
> minute to the runtime.
> The model quirks and libinput udev rules don't change, so installing them once
> at the start of the test run is sufficient.
>
> Unfortunately, now that we're not as slow anymore to initialize, we need to
> up the maximum wait time for the path device to wait for a udev device to
> initialize.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

Series looks good to me:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans



> ---
>   src/path.c    |  2 +-
>   test/litest.c | 34 +++++++++++++++++++++-------------
>   2 files changed, 22 insertions(+), 14 deletions(-)
>
> diff --git a/src/path.c b/src/path.c
> index ab4d065..04c703c 100644
> --- a/src/path.c
> +++ b/src/path.c
> @@ -312,7 +312,7 @@ udev_device_from_devnode(struct libinput *libinput,
>   		dev = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
>
>   		count++;
> -		if (count > 50) {
> +		if (count > 200) {
>   			log_bug_libinput(libinput,
>   					"udev device never initialized (%s)\n",
>   					devnode);
> diff --git a/test/litest.c b/test/litest.c
> index db93bbe..50ae141 100644
> --- a/test/litest.c
> +++ b/test/litest.c
> @@ -63,6 +63,7 @@ const char *filter_device = NULL;
>   const char *filter_group = NULL;
>
>   static inline void litest_remove_model_quirks(void);
> +static void litest_init_udev_rules(void);
>
>   /* defined for the litest selftest */
>   #ifndef LITEST_DISABLE_BACKTRACE_LOGGING
> @@ -442,7 +443,7 @@ litest_drop_udev_rules(void)
>   		    &entries,
>   		    litest_udev_rule_filter,
>   		    alphasort);
> -	if (n < 0)
> +	if (n <= 0)
>   		return;
>
>   	while (n--) {
> @@ -462,7 +463,6 @@ litest_drop_udev_rules(void)
>   	}
>   	free(entries);
>
> -	litest_remove_model_quirks();
>   	litest_reload_udev_rules();
>   }
>
> @@ -822,6 +822,8 @@ litest_run(int argc, char **argv)
>   	if (getenv("LITEST_VERBOSE"))
>   		verbose = 1;
>
> +	litest_init_udev_rules();
> +
>   	srunner_run_all(sr, CK_ENV);
>   	failed = srunner_ntests_failed(sr);
>   	srunner_free(sr);
> @@ -840,6 +842,9 @@ litest_run(int argc, char **argv)
>   		free(s);
>   	}
>
> +	litest_remove_model_quirks();
> +	litest_reload_udev_rules();
> +
>   	return failed;
>   }
>
> @@ -957,12 +962,10 @@ litest_remove_model_quirks(void)
>   	unlink(UDEV_COMMON_HWDB_FILE);
>   }
>
> -static char *
> -litest_init_udev_rules(struct litest_test_device *dev)
> +static void
> +litest_init_udev_rules(void)
>   {
>   	int rc;
> -	FILE *f;
> -	char *path = NULL;
>
>   	rc = mkdir(UDEV_RULES_D, 0755);
>   	if (rc == -1 && errno != EEXIST)
> @@ -975,10 +978,18 @@ litest_init_udev_rules(struct litest_test_device *dev)
>   			     strerror(errno));
>
>   	litest_install_model_quirks();
> +	litest_reload_udev_rules();
> +}
> +
> +static char *
> +litest_init_device_udev_rules(struct litest_test_device *dev)
> +{
> +	int rc;
> +	FILE *f;
> +	char *path = NULL;
>
> -	/* device-specific udev rules */
>   	if (!dev->udev_rule)
> -		goto out;
> +		return NULL;
>
>   	rc = xasprintf(&path,
>   		      "%s/%s%s.rules",
> @@ -995,7 +1006,6 @@ litest_init_udev_rules(struct litest_test_device *dev)
>   	litest_assert_int_ge(fputs(dev->udev_rule, f), 0);
>   	fclose(f);
>
> -out:
>   	litest_reload_udev_rules();
>
>   	return path;
> @@ -1029,13 +1039,11 @@ litest_create(enum litest_device_type which,
>   	d = zalloc(sizeof(*d));
>   	litest_assert(d != NULL);
>
> -	udev_file = litest_init_udev_rules(*dev);
> -
> +	udev_file = litest_init_device_udev_rules(*dev);
>   	/* device has custom create method */
>   	if ((*dev)->create) {
>   		(*dev)->create(d);
>   		if (abs_override || events_override) {
> -			litest_remove_model_quirks();
>   			if (udev_file)
>   				unlink(udev_file);
>   			litest_abort_msg("Custom create cannot be overridden");
> @@ -1186,10 +1194,10 @@ litest_delete_device(struct litest_device *d)
>   		return;
>
>   	if (d->udev_rule_file) {
> -		litest_remove_model_quirks();
>   		unlink(d->udev_rule_file);
>   		free(d->udev_rule_file);
>   		d->udev_rule_file = NULL;
> +		litest_reload_udev_rules();
>   	}
>
>   	libinput_device_unref(d->libinput_device);
>


More information about the wayland-devel mailing list