mirror of
https://github.com/brl/mutter.git
synced 2024-11-27 02:20:43 -05:00
788ad43e17
This will be necessary in order to default to 'kernel' and then switch to 'user' if the thread instance can no longer be properly multi threaded. To avoid having the same thread impl creating and destroying GMainContext's, this also means always creating a GMainContext for the thread-impl. When running in user-thread mode, the GMainContext is wrapped in a wrapper source and dispatched as part of the real main thread GMainContext, and when in kernel-thread mode, it runs independently in the dedicated thread. This has the consequence that the wrapper source will always have the priority of the highest impl context GSource, but only after it has dispatched once. Would we need it earlier than that, we either need a way to introspect existing sources in a GMainContext and their priorities, or manually track known sources in MetaThreadImpl. The wrapper source will never be below 0, as that'd mean it could reach INT_MAX priority if it had no more sources attached to it, meaning it'd never be dispatched again. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2777> |
||
---|---|---|
.. | ||
clutter | ||
cogl | ||
dbusmock-templates | ||
drm-mock | ||
icc-profiles | ||
kvm | ||
meta-test | ||
migration | ||
monitor-configs | ||
protocol | ||
ref-tests | ||
share/icc | ||
stacking | ||
wayland-test-clients | ||
anonymous-file.c | ||
boxes-tests.c | ||
boxes-tests.h | ||
clutter-test-utils.c | ||
clutter-test-utils.h | ||
cogl-test-utils.c | ||
cogl-test-utils.h | ||
color-management-profile-conflict-test.c | ||
color-management-tests.c | ||
edid-tests.c | ||
hdr-metadata-unit-tests.c | ||
hdr-metadata-unit-tests.h | ||
input-capture-test-client.c | ||
input-capture-tests.c | ||
kms-utils-unit-tests.c | ||
meson.build | ||
meta-backend-test.c | ||
meta-backend-test.h | ||
meta-context-test.c | ||
meta-dbus-runner.py | ||
meta-gpu-test.c | ||
meta-gpu-test.h | ||
meta-kms-test-utils.c | ||
meta-kms-test-utils.h | ||
meta-monitor-manager-test.c | ||
meta-monitor-manager-test.h | ||
meta-monitor-test-utils.c | ||
meta-monitor-test-utils.h | ||
meta-ref-test.c | ||
meta-ref-test.h | ||
meta-sensors-proxy-mock.c | ||
meta-sensors-proxy-mock.h | ||
meta-test-monitor.c | ||
meta-test-utils-private.h | ||
meta-test-utils.c | ||
meta-test-utils.h | ||
meta-thread-impl-test.c | ||
meta-thread-impl-test.h | ||
meta-thread-test.c | ||
meta-thread-test.h | ||
meta-wayland-test-driver.c | ||
meta-wayland-test-driver.h | ||
meta-wayland-test-utils.c | ||
meta-wayland-test-utils.h | ||
monitor-config-migration-unit-tests.c | ||
monitor-config-migration-unit-tests.h | ||
monitor-store-unit-tests.c | ||
monitor-store-unit-tests.h | ||
monitor-transform-tests.c | ||
monitor-transform-tests.h | ||
monitor-unit-tests.c | ||
monitor-util-tests.c | ||
mutter_dbusrunner.py | ||
mutter-installed-dbus-session.py.in | ||
native-headless.c | ||
native-kms-cursor-hotplug.c | ||
native-kms-device.c | ||
native-kms-force-atomic-sanity.c | ||
native-kms-force-kernel-thread-sanity.c | ||
native-kms-force-simple-sanity.c | ||
native-kms-force-user-thread-sanity.c | ||
native-kms-headless-start.c | ||
native-kms-hotplug.c | ||
native-kms-render.c | ||
native-kms-updates.c | ||
native-persistent-virtual-monitor.c | ||
native-pointer-constraints.c | ||
native-screen-cast.c | ||
native-screen-cast.h | ||
native-thread.c | ||
native-virtual-monitor.c | ||
native-virtual-monitor.h | ||
orientation-manager-unit-tests.c | ||
orientation-manager-unit-tests.h | ||
README | ||
ref-test-sanity.c | ||
screen-cast-client.c | ||
service-channel-tests.c | ||
stacking.test.in | ||
stage-view-tests.c | ||
test-client.c | ||
test-runner.c | ||
unit-tests.c | ||
unit-tests.h | ||
wayland-client-tests.c | ||
wayland-fractional-scale-test.c | ||
wayland-fullscreen-test.c | ||
wayland-unit-tests.c | ||
wayland-x11-interop-tests.c | ||
x11-compositor-checker.c | ||
x11-test.sh | ||
xwayland-tests.c |
This directory implements a framework for automated tests of Mutter. The basic idea is that mutter-test-runner acts as the window manager and compositor, and forks off instances of mutter-test-client to act as clients. There's a simple scripting language for tests. A very small test would look like: --- # Start up a new X11 client with the client id 1 (doesn't have to be an integer) # Windows for this client will be referred to as 1/<window-id> new_client 1 x11 # Create and show two windows - again the IDs don't have to be integers create 1/1 show 1/1 create 1/2 show 1/2 # Wait for the commands we've executed in the clients to reach Mutter wait # Check that the windows are in the order we expect assert_stacking 1/1 1/2 --- Running ======= The tests are installed according to: https://wiki.gnome.org/Initiatives/GnomeGoals/InstalledTests if -Dtests=true is passed to `meson configure`. You can run them uninstalled with: ninja test Command reference ================= The following commands are supported. Quoting and comments follow shell rules. new_client <client-id> [wayland|x11] Starts a client, connecting by either Wayland or X11. The client will subsequently be known with the given client-id (an arbitrary string) quit_client <client-id> Destroys all windows for the client, waits for that to be processed, then instructs the client to exit. create <client-id>/<window-id> [override|csd] Creates a new window. For the X11 backend, the keyword 'override' can be given to create an override-redirect and the keyword 'csd' can be given to create a client-side decorated window. show <client-id>/<window-id> hide <client-id>/<window-id> Ask the client to show (map) or hide (unmap) the given window activate <client-id>/<window-id> Ask the client to raise and focus the given window. local_activate <client-id>-<window-id> The same as 'activate', but the operation is done directly inside Mutter and works for both backends raise <client-id>/<window-id> lower <client-id>/<window-id> Ask the client to raise or lower the given window ID. This is a no-op for Wayland clients. (It's also considered discouraged, but supported, for non-override-redirect X11 clients.) minimize <client-id>/<window-id> unminimize <client-id>/<window-id> Ask the client to minimize or unminimize the given window ID. This older term for this operation is "iconify". destroy <client-id>/<window-id> Destroy the given window wait Wait until all requests sent by Mutter to clients have been received by Mutter, and then wait until all requests by Mutter have been processed by the X server. assert_stacking <client-id>/<window-id> <client-id>/<window-id> ... Assert that the list of client windows known to Mutter is as given and in the given order, bottom to top. The character '|' can be present in the list of windows to indicate the guard window that separates hidden and visible windows. If '|' isn't present, the guard window is asserted to be below all client windows. This function also queries the X server stack and verifies that Mutter's expectation of the X server stack matches reality.