This protocol allows clients to create single-pixel RGBA buffers. Now
that we have proper support for these buffers internally within Weston,
we can expose them to clients.
This bumps the build container version, as we now depend on
wayland-protocols v1.26.
Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is truly horrible.
We want to run ASan with leak checking enabled in CI so we can catch
memory leaks before they're introduced. This works well with Pixman, and
with NIR-only drivers like iris or Panfrost.
But when we run under llvmpipe - which we do under CI - we start failing
because:
- Mesa pulls in llvmpipe via dlopen
- llvmpipe pulls in LLVM itself via DT_NEEDED
- initialising LLVM's global type/etc systems performs thread-local
allocations
- llvmpipe can't free those allocations since the application might
also be using LLVM
- Weston stops using GL and destroys all GL objects, leading to Mesa
unloading llvmpipe like it should
- with everything disappearing from the process's vmap, ASan can no
longer keep track of still-reachable pointers
- tests fail because LLVM is 'leaking'
Usually, an alternative is to LD_PRELOAD a shim which overrides
dlclose() to be a no-op. This is not usable here, because when
$LD_PRELOAD is not empty and ASan is not first in it, ASan immediately
errors out. Prepending ASan doesn't work, because we run our tests
through Meson (which also invokes Ninja), leading to LSan exploding
over CPython and Ninja, which is not what we're interested in.
It would be possible to inject _both_ ASan and a dlclose-does-nothing
shim DSO into the LD_PRELOAD environment for every test, but that seems
even worse, especially as Meson strongly discourages globbing for random
files in the root.
So, here we are, doing what we can: finding where swrast_dri.so (aka
llvmpipe) lives, stashing that in an environment variable, and
deliberately leaking a dlopen handle which we never close to ensure that
neither llvmpipe nor LLVM leave our process's address space before we
exit.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Unfortunately just adding suppressions isn't enough; the build of Expat
we have in our CI system does not have frame pointers, so ASan's fast
unwinder can't see through it. This means that the suppressions we've
added won't be taken into account.
For now, disable the fast unwinder for the Xwayland test only. Disabling
it globally is not practical as it massively increases the per-test
runtime, so here (to avoid polluting the build system), we use a
per-test wrapper to selectively choose the unwinder.
Signed-off-by: Daniel Stone <daniels@collabora.com>
For some reason, the Debian CI setup leaks fontconfig allocations in a
way which it does not for me on Fedora. On the assumption that this has
been fixed between our older CI Debian and Fedora 36, suppress the leak
warning, because we do already call FcFini() which should free it.
Signed-off-by: Daniel Stone <daniels@collabora.com>
CLASS_DIAGRAM has been obsolete in newer version of doxygen, and
it's enabled if HAVE_DOT and CLASS_GRAPH are set.
This increase DOT_GRAPH_MAX_NODES to avoid dot complaning,
and include dot/graphviz for doxygen.
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Pango, Cairo, and fontconfig, all want to leave thread-global data
hanging around in order to maintain a cache. Try to clean up as much of
it as we possibly can on exit, apart from the Pango language string
which appears to be unfreeable, so has been added to LSan suppressions.
Signed-off-by: Daniel Stone <daniels@collabora.com>
libdrm with version 2.4.108 provides new functionality for parsing
IN_FORMATS blobs. Weston can make use of it and avoid implementing
its own logic. At present CI uses Debian 11 (bullseye) which comes
with an older version (2.4.104), so we build it from source.
Signed-off-by: Luigi Santivetti <luigi.santivetti@imgtec.com>
Moving forward we're going to be supporting libseat and logind as our
only launchers. We're doing this to reduce our maintenance burden,
and security impact.
Libseat supports all our existing use cases, and seatd can replace
weston-launch so we no longer have to carry a setuid-root program.
This patch removes weston-launch, and launcher-direct, leaving only
libseat and logind.
Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
Add VGEM to the Linux image that runs in the CI. There are tests that we
plan to add in the future that need this.
This brings a complication, as we already have VKMS in the image. The
order in which DRM devices are loaded is not always the same, so the
node they receive is non-deterministic. Until now we were sure that VKMS
(the virtual device we use to run the DRM-backend tests in the CI) would
be in "/dev/dri/card0", but now we can't be sure. To deal with this
problem we find the node of each device using a one-liner shell script.
This commit also updates the documentation section that describes
specificities of DRM-backend tests in our test suite.
Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
These formats are useful because they are often easier to produce
on CPU than half-float formats, and abgr16161616 has both >= 10bpc
color channels and adequate alpha, unlike abgr2101010.
The 16-bpc textures created from buffers with these formats require
the GL_EXT_texture_norm16 extension.
As WL_SHM_FORMAT_ABGR16161616 was introduced in libwayland 1.20,
update Weston's build requirements and CI.
The formats also needed to be registered in the pixel format table,
and defined in a fallback path if recent libdrm is not available.
Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
This was previously introduced with commit '.gitlab.ci: Enable debug for
libsteat and for the DRM backend' in order to figure out another CI
issue we were seeing.
Unfortunatelly, not keeping the return value after the tests ran it
would silently make the entire CI succeed when it should actually fail.
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Suggested-by: Pekka Paalanen <pekka.paalanen@collabora.com>
As the drm-smoke test randomly reports having the connector disabled,
and with it libseat reports setMaster errors, this enables DRM backend
debug messages for the kernel, and for libseat in an attempt to
track down the issue, whenever it might happen again.
These are pretty harmless, in terms of data being generated as we only
have a single DRM test using VKMS, and the libseat debug message aren't
that verbose, so we're safe keeping them for the time being.
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Bump the wayland-protocol dependency version in order to include dma-buf
feedback, whose support in Weston is added in the next commits.
Also, as we need the newer EGL extension EGL_EXT_device_drm_render_node
to add the support for dma-buf feedback, bump the Mesa dependency
version as well.
It also includes some minor changes in order to keep build-deps.sh more
consistent.
Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Now Debian 11 (Bullseye) has been released, shift our CI builds to using
that instead of the older Buster.
Due to dependency-chain changes, we have to install a lot more packages
explicitly and retain more at runtime. This is exacerbated by pkg-config
now requiring the entire chain to be installed, not just the immediate
dependencies.
Our documentation toolchain also gets bumped to a higher version to deal
with Doxygen changes.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Older kernels cannot be built and booted with GCC 10+, as included in
Debian bullseye, due to unfortunate stack-canary issues:
https://lore.kernel.org/lkml/20200314164451.346497-1-slyfox@gentoo.org/T/
Upgrade to the last-released kernel, 5.14, to fix this.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Instead of manually waiting for the seatd socket to come up, use
seatd-launch.
Add /usr/local/bin to PATH to avoid having to specify the whole
path to seatd-launch.
Signed-off-by: Simon Ser <contact@emersion.fr>
This upgrades seatd to the latest version.
Examples are disabled by default. Man pages are already disabled
by auto_features=disabled. Other build options have been renamed.
Signed-off-by: Simon Ser <contact@emersion.fr>
Remove the following warning:
WARNING: 'make kvmconfig' will be removed after Linux 5.10
Please use 'make kvm_guest.config' instead.
Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Build a kernel for AArch64 and run it under virtme just like we do for
x86-64.
This requires adding support for the AArch64 defconfig variant, and
accommodating for the fact that it builds DRM as a module by default
rather than built in. The virtme branch we are using has also been
rebased on top of newer virtme upstream which unbreaks AArch64.
Signed-off-by: Daniel Stone <daniels@collabora.com>
This only runs a single build job, to build without GL and not run any
tests, as KVM support is not yet included.
Signed-off-by: Daniel Stone <daniels@collabora.com>
0.57.0 has a bug where the whole test harness crashes when using TAP and
failing tests, cf. https://github.com/mesonbuild/meson/pull/8385
Signed-off-by: Daniel Stone <daniels@collabora.com>
When we build our base-OS container, we run debian-install.sh to install
packages and compile our build dependencies. Since the latter is mostly
OS-independent, split debian-install.sh into two scripts: one to install
and cleanup packages, and another just to compile stuff.
Signed-off-by: Daniel Stone <daniels@collabora.com>
The shared runners export ${FDO_CI_CONCURRENT} for the appropriate
number of CPUs we should use during our builds.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Updating PipeWire to the latest version lets us check that everything
still works well, and shows users that they are able to use it.
[daniels: Updated to 0.3.31, use symbolic ref tags rather than SHAs.
0.3.32 is released, but doesn't build in our Debian
environment; this is fixed upstream but there is no release
for it yet.]
Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
ASan will detect leaks also outside of the code we build, and sometimes
that external code leaks and we cannot work around it. Then we need to
suppress the leak reports to make our own ASan testing succeed. This
commit only introduces the suppressions file, making use of it CI is for
another time. This file is useful for manual targeted testing as below.
Start by suppressing two functions what weston-keyboard client ends up
calling, suppressing leak reports like these:
Indirect leak of 96 byte(s) in 3 object(s) allocated from:
#0 0x7fc109c3d518 in calloc (/lib/x86_64-linux-gnu/libasan.so.5+0xe9518)
#1 0x7fc109083d18 (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x20d18)
#2 0x7fc1090849a7 in FcPatternDuplicate (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x219a7)
#3 0x7fc109adf93e (/lib/x86_64-linux-gnu/libcairo.so.2+0xbb93e)
#4 0x7fc109adfc8d (/lib/x86_64-linux-gnu/libcairo.so.2+0xbbc8d)
#5 0x7fc109aa02e7 in cairo_toy_font_face_create (/lib/x86_64-linux-gnu/libcairo.so.2+0x7c2e7)
#6 0x7fc109aa856c in cairo_select_font_face (/lib/x86_64-linux-gnu/libcairo.so.2+0x8456c)
#7 0x5603cb49a06a in redraw_handler ../../git/weston/clients/keyboard.c:378
#8 0x5603cb4b506b in widget_redraw ../../git/weston/clients/window.c:4520
#9 0x5603cb4b55da in surface_redraw ../../git/weston/clients/window.c:4578
#10 0x5603cb4b5750 in idle_redraw ../../git/weston/clients/window.c:4607
#11 0x5603cb4bebe3 in display_run ../../git/weston/clients/window.c:6525
#12 0x5603cb49e55d in main ../../git/weston/clients/keyboard.c:1054
#13 0x7fc1092a709a in __libc_start_main ../csu/libc-start.c:308
#14 0x5603cb499019 in _start (/home/pq/build/weston-meson/clients/weston-keyboard+0x19019)
Indirect leak of 528 byte(s) in 51 object(s) allocated from:
#0 0x7fc109b8e810 in strdup (/lib/x86_64-linux-gnu/libasan.so.5+0x3a810)
#1 0x7fc109082fc4 in FcValueSave (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x1ffc4)
#2 0x7fc109083d2e (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x20d2e)
#3 0x7fc1090852c7 (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x222c7)
#4 0x7fc10908c28b (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x2928b)
#5 0x7fc108603a15 (/lib/x86_64-linux-gnu/libexpat.so.1+0xba15)
#6 0x7fc1086044bb (/lib/x86_64-linux-gnu/libexpat.so.1+0xc4bb)
#7 0x7fc108601f8a (/lib/x86_64-linux-gnu/libexpat.so.1+0x9f8a)
#8 0x7fc108602e7a (/lib/x86_64-linux-gnu/libexpat.so.1+0xae7a)
#9 0x7fc108606a37 in XML_ParseBuffer (/lib/x86_64-linux-gnu/libexpat.so.1+0xea37)
#10 0x7fc10908a0fa (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x270fa)
#11 0x7fc10908a519 (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x27519)
#12 0x7fc10908a73a (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x2773a)
#13 0x7fc10908b48f (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x2848f)
#14 0x7fc108603a15 (/lib/x86_64-linux-gnu/libexpat.so.1+0xba15)
#15 0x7fc1086044bb (/lib/x86_64-linux-gnu/libexpat.so.1+0xc4bb)
#16 0x7fc108601f8a (/lib/x86_64-linux-gnu/libexpat.so.1+0x9f8a)
#17 0x7fc108602e7a (/lib/x86_64-linux-gnu/libexpat.so.1+0xae7a)
#18 0x7fc108606a37 in XML_ParseBuffer (/lib/x86_64-linux-gnu/libexpat.so.1+0xea37)
#19 0x7fc10908a0fa (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x270fa)
#20 0x7fc10908a519 (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x27519)
#21 0x7fc10907c4b3 (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x194b3)
#22 0x7fc10907c715 (/lib/x86_64-linux-gnu/libfontconfig.so.1+0x19715)
#23 0x7fc10906e8e6 (/lib/x86_64-linux-gnu/libfontconfig.so.1+0xb8e6)
#24 0x7fc109070928 in FcConfigSubstituteWithPat (/lib/x86_64-linux-gnu/libfontconfig.so.1+0xd928)
#25 0x7fc109ae2d6b (/lib/x86_64-linux-gnu/libcairo.so.2+0xbed6b)
#26 0x7fc109a8aba2 in cairo_scaled_font_create (/lib/x86_64-linux-gnu/libcairo.so.2+0x66ba2)
#27 0x7fc109a50d1d (/lib/x86_64-linux-gnu/libcairo.so.2+0x2cd1d)
#28 0x7fc109a53be0 (/lib/x86_64-linux-gnu/libcairo.so.2+0x2fbe0)
#29 0x7fc109a4c1df (/lib/x86_64-linux-gnu/libcairo.so.2+0x281df)
#30 0x7fc109aa8dab in cairo_text_extents (/lib/x86_64-linux-gnu/libcairo.so.2+0x84dab)
#31 0x5603cb499af3 in draw_key ../../git/weston/clients/keyboard.c:329
#32 0x5603cb49a30c in redraw_handler ../../git/weston/clients/keyboard.c:392
#33 0x5603cb4b506b in widget_redraw ../../git/weston/clients/window.c:4520
#34 0x5603cb4b55da in surface_redraw ../../git/weston/clients/window.c:4578
#35 0x5603cb4b5750 in idle_redraw ../../git/weston/clients/window.c:4607
#36 0x5603cb4bebe3 in display_run ../../git/weston/clients/window.c:6525
#37 0x5603cb49e55d in main ../../git/weston/clients/keyboard.c:1054
#38 0x7fc1092a709a in __libc_start_main ../csu/libc-start.c:308
#39 0x5603cb499019 in _start (/home/pq/build/weston-meson/clients/weston-keyboard+0x19019)
With the command line
ASAN_OPTIONS=fast_unwind_on_malloc=0,malloc_context_size=50 \
LSAN_OPTIONS=suppressions=/home/pq/git/weston/.gitlab-ci/leak-sanitizer.supp \
./tests/test-viewporter test_viewporter_double_create
Suppressions used:
count bytes template
5 357 cairo_select_font_face
130 9104 cairo_text_extents
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Running under ASan introduces a good amount of overhead. Using the Meson
test wrapper rather than invoking a Ninja target lets us set a timeout
multiplier, which we smash up pretty high to account for this overhead
and prevent some of the larger tests from hitting timeout.
Signed-off-by: Daniel Stone <daniels@collabora.com>
Use address sanitizer to catch use-after-free and other errors when
running the test suite.
Leak detection is disabled, because currently there are too many leaks,
making almost all tests fail otherwise.
The atexit=1 is for verifying that ASan was actually used.
The default 128 MB of RAM in the qemu machine leads to oom-killer
killing most tests, so bump the memory size to 1 GB.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
While the commonly used Weston launchers are weston-launch and launcher-logind,
the direct backend was used in CI out of convenience, and due to logind being a
bit cumbersome to get to work in a CI environment.
The new libseat launcher can be used with seatd as well as logind. seatd is easy
to start in a CI environment, allowing us to test the libseat launcher codepath
instead of the less user relevant direct launcher.
This also prepares us for the future intended removal of non-libseat launchers.
Signed-off-by: Kenny Levinsen <kl@kl.wtf>
This installs libseat in the debian image build from source in order to enable,
build and test weston with libseat support.
Signed-off-by: Kenny Levinsen <kl@kl.wtf>
This runs the coverage tools to produce HTML pages listing the code lines /
functions / branches hit/totalled by the test suite.
Nowadays Gitlab has some Cobertura support itself:
https://docs.gitlab.com/ee/user/project/merge_requests/test_coverage_visualization.html
lcov is needed for the HTML report, gcovr is needed for the Cobertura
report. 'ninja clean' must be removed, otherwise it deletes the coverage
files before they are analysed.
Seeing the test suite code coverage is really interesting. It can guide
designing tests. If Gitlab MRs show the coverage in diff view, it shows
if new code actually gets executed in CI.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This support is added so that the XYUV shader variant can be tested with
wl_shm from the test suite.
Libwayland version requirement is bumped to get WL_SHM_FORMAT_XYUV8888.
Libwayland is bumped to 1.18 too in the CI image. libwayland-dev package
is dropped, because we build wayland anyway.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
The version we used does not advertise GL_EXT_color_buffer_half_float
with llvmpipe even though the functionality seems to work.
If the extension is not advertised, the future commit
"tests: extend output-damage to GL shadow framebuffer"
will result in a test failure.
Upgrade Mesa, this gets the extension advertised and the test is happy.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This allows Gitlab to show a detailed test report in a human friendly
manner on a merge request page.
The junit output depends on Meson 0.55, but Meson in CI is bumped to the
latest release on Feb 15th. It is beneficial to use the newest
possible Meson in CI even if we do not require it, so that we benefit
from fixes, e.g. new warnings about accidentally using more recent
Meson features than our minimum Meson version supports.
Meson 0.57 is required for proper test names in the Gitlab report after
switching the tests to TAP. See:
https://github.com/mesonbuild/meson/issues/8316
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
The stable FreeRDP 2.x branch has been released, so let's rely on that maintained
version and drop all the hacks for older versions. That makes the code and build
cleaner.
Signed-off-by: David Fort <contact@hardening-consulting.com>
In order to run DRM-backend tests, a DRM-device is needed. As we
do not necessarily have control of the hardware that is going to
run our tests in GitLab CI, DRM-backend tests were being skipped.
This patch add support to run the tests using VKMS (virtual KMS).
To achieve this, virtualization is needed, as we need to run a
custom kernel during the CI job. We've decided to go with virtme,
as it is simpler to setup and works good for our use case.
Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
The reason the Xwayland test skips is that Xwayland was not installed. We
should exercise Xwayland as well in CI, so install it.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This line is far too long, it makes it really had to see in a diff what
changed. Wrap it into multiple lines and sort them alphabetically. If a piece
of it changes in the future, it will be easy to see in a diff.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>