libweston: add required_capabilities test suite quirk

This allows tests to skip when required capabilities are not present.
The output damage test for the shadow buffer case needs this.

required_capabilities is added to struct weston_testsuite_quirks which
is libweston public API just because there is no better place currently.
This is a little weird because the code to check it is in compositor,
not libweston.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
Pekka Paalanen
2021-03-01 11:24:59 +02:00
parent ed2182f356
commit 19d31dd4c3
4 changed files with 44 additions and 0 deletions
+33
View File
@@ -816,6 +816,33 @@ weston_compositor_log_capabilities(struct weston_compositor *compositor)
"presentation clock resolution: N/A\n");
}
static bool
check_compositor_capabilities(struct weston_compositor *compositor,
uint32_t mask)
{
uint32_t missing = mask & ~compositor->capabilities;
unsigned i;
if (missing == 0)
return true;
weston_log("Quirk error, missing capabilities:\n");
for (i = 0; i < ARRAY_LENGTH(capability_strings); i++) {
if (!(missing & capability_strings[i].bit))
continue;
weston_log_continue(STAMP_SPACE "- %s\n",
capability_strings[i].desc);
missing &= ~capability_strings[i].bit;
}
if (missing) {
weston_log_continue(STAMP_SPACE "- unlisted bits 0x%x\n",
missing);
}
return false;
}
static void
handle_primary_client_destroyed(struct wl_listener *listener, void *data)
{
@@ -3355,6 +3382,12 @@ wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_data)
goto out;
}
if (!check_compositor_capabilities(wet.compositor,
test_data->test_quirks.required_capabilities)) {
ret = WET_MAIN_RET_MISSING_CAPS;
goto out;
}
weston_compositor_flush_heads_changed(wet.compositor);
if (wet.init_failed)
goto out;
+6
View File
@@ -95,6 +95,12 @@ text_backend_init(struct weston_compositor *ec);
void
text_backend_destroy(struct text_backend *text_backend);
/*
* Return value from wet_main() when
* weston_testsuite_quirks::required_capabilities are not met.
*/
#define WET_MAIN_RET_MISSING_CAPS 77
int
wet_main(int argc, char *argv[], const struct weston_testsuite_data *test_data);