1
0
Fork 0
mutter-performance-source/src/tests
Jonas Ådahl 6f30764320 tests/clutter/timeline-interpolate: Rework test to be less flaky
This more or less rewrites this test so that it explicitly tests the
"interpolation" when a timeline loops, i.e. that if something occupies
the thread when a timeline was supposed to have looped, we end up in the
right place "in the middle" of the next timeline cycle.

The test more or less does this:

 * Start a 3 second looping timeline
 * Sleep so that we're in the middle of the first cycle
 * Sleep again so that we end up in the middle of the next cycle

The semantics checked are that we see the following frames:

 * The first frame with timestamp 0
 * The second frame in the middle of the first cycle (timestamp ~= 1.5
   sceonds)
 * The third frame in the end of the first cycle (timestamp == 3.0
   seconds)
 * The fourth frame, first in the second cycle, with timestamp ~= 1.5
   seconds)

This means we can increase the "grace period" to the double (from 0.5 s
to 1 s), while at the same time decrease the time spent running the test
(from 10 s to 4.5 s). This should hopefully make the test less flaky,
especially in slower runners, e.g. aarch64.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1751>
2021-03-08 14:37:00 +00:00
..
clutter tests/clutter/timeline-interpolate: Rework test to be less flaky 2021-03-08 14:37:00 +00:00
migration monitor-config-store: Properly escape monitor spec 2021-01-29 16:49:58 +00:00
monitor-configs monitor-config-store: Properly escape monitor spec 2021-01-29 16:49:58 +00:00
stacking tests/stacking: Add test hiding a modal with a not shown parent 2020-12-18 17:17:50 +00:00
wayland-test-clients wayland/xdg-shell: Warn when invalid geometry is set 2020-12-03 21:39:13 +00:00
anonymous-file.c tests/anonymous-file: Skip the rlimit part of the test when running CI 2020-12-03 21:39:13 +00:00
boxes-tests.c Add MetaGravity and replace X11 equivalent with it 2020-02-29 21:01:50 +00:00
boxes-tests.h tests: Make testboxes an actual test 2018-11-06 17:17:36 +01:00
clutter-test-utils.c tests/clutter: Disable X11 client support 2020-11-09 16:12:35 +00:00
clutter-test-utils.h tests/clutter: Always use stage from backend 2020-08-13 17:51:56 +02:00
headless-start-test.c Fix segfaults on 32-bit systems. 2020-07-24 11:24:08 +00:00
kms-utils-unit-tests.c backend/native: Add tests for refresh rate calculation 2021-03-05 14:37:48 +00:00
kms-utils-unit-tests.h backend/native: Add tests for refresh rate calculation 2021-03-05 14:37:48 +00:00
meson.build backend/native: Add tests for refresh rate calculation 2021-03-05 14:37:48 +00:00
meta-backend-test.c backend: Move GPU ownership from the monitor manager to the backend 2019-06-20 13:31:55 +00:00
meta-backend-test.h backend: Move GPU ownership from the monitor manager to the backend 2019-06-20 13:31:55 +00:00
meta-gpu-test.c backend: Move GPU ownership from the monitor manager to the backend 2019-06-20 13:31:55 +00:00
meta-gpu-test.h backend: Move GPU ownership from the monitor manager to the backend 2019-06-20 13:31:55 +00:00
meta-monitor-manager-test.c monitor-manager: Clean up hot-plug paths slightly 2021-01-28 20:05:23 +00:00
meta-monitor-manager-test.h crtc: Make implementations inherit MetaCrtc 2020-06-10 18:54:51 +00:00
monitor-config-migration-unit-tests.c tests/monitor-config: Improve debugging output 2021-01-29 16:49:58 +00:00
monitor-config-migration-unit-tests.h tests: Add monitor config migration tests 2017-08-21 12:23:51 +08:00
monitor-store-unit-tests.c tests/monitor-store-unit-tests: Rename some structs 2020-05-13 08:38:40 +00:00
monitor-store-unit-tests.h tests: Add MetaMonitorConfigStore tests 2017-01-25 16:28:56 +08:00
monitor-test-utils.c tests/monitor-unit-tests: Sanity check some monitor info 2021-01-28 20:05:23 +00:00
monitor-test-utils.h crtc: Move all_transforms field into instance private 2020-06-10 18:54:50 +00:00
monitor-transform-tests.c tests/monitor-transform: Also test invert() 2020-05-13 08:19:42 +00:00
monitor-transform-tests.h monitor-transform: Add meta_monitor_transform_transform() helper 2020-02-27 09:07:25 +01:00
monitor-unit-tests.c tests/monitor-unit-tests: Set up async waiter after X11 client 2021-01-25 15:14:35 +00:00
monitor-unit-tests.h tests/monitor-unit-tests: Set initial state during backend construction 2020-06-10 18:54:50 +00:00
mutter-all.test.in Add Meson support for installed tests 2018-12-20 13:52:35 -02:00
README docs: Update tests instructions 2019-06-05 14:49:35 -03:00
stage-view-tests.c tests: Add test for destroyed frame clock free timeline actor 2021-02-08 19:40:05 +00:00
test-client.c tests/test-client: Set padding to 0 too 2021-03-08 14:37:00 +00:00
test-runner.c tests/test-runner: Hook up async waiter on demand 2021-01-25 15:14:35 +00:00
test-utils.c tests/utils: Spawn Xwayland before X11 test client 2021-01-25 15:14:35 +00:00
test-utils.h tests: Ensure MetaX11Display is initialized before running tests 2020-02-28 20:20:35 +00:00
unit-tests.c backend/native: Add tests for refresh rate calculation 2021-03-05 14:37:48 +00:00
wayland-unit-tests.c wayland/xdg-shell: Warn when invalid geometry is set 2020-12-03 21:39:13 +00:00
wayland-unit-tests.h tests/wayland: Test subsurface commits after parent was reset 2020-01-10 16:01:22 +00:00

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. This is currently a no-op
 for Wayland, where this capability is not supported in the protocol.

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.