- 24 May, 2019 3 commits
-
-
Carlos Garnacho authored
XkbNewKeyboardNotify informs the client that there is a new keyboard driving the VCK. It is essentially meant to notify that the keyboard possibly has a different range of HW keycodes and/or a different geometry. But the translation of those keycodes remain the same, and we don't do range checks or geometry checks (beyond using KEY_GRAVE as "key under Esc", but that is hardly one). It seems we can avoid the busywork that is releasing all our passive grabs, reloading the keymap and regenerating the keycombos and restoring the passive grabs. Closes: #398
-
Jonas Ådahl authored
The point is to not initialize to some non-zero value to find places incorrectly relying on blocks being zero initialized. Thus, there is no reason to have a different random number each time, and by having it the same, we have slightly more reproducable triggers, would we ever trigger anything due to this. !591
-
Jonas Ådahl authored
Otherwise tests will fail due to the following warning: (mutter-test-runner:3700): dconf-WARNING **: 06:39:42.124: unable to open file '/etc/dconf/db/local': Failed to open file “/etc/dconf/db/local”: open() failed: No such file or directory; expect degraded performance !591
-
- 22 May, 2019 3 commits
-
-
Florian Müllner authored
Update NEWS.
-
Vasilis Liaskovitis authored
#425
-
Ignacio Casal Quinteiro authored
!586
-
- 21 May, 2019 19 commits
-
-
Marco Trevisan authored
Since starting meson 0.50 `install: false` is honored when the install_dir is set to a non-empty value, we can now remove the workaround we added in commit dbe73c32 !585
-
Marco Trevisan authored
We've been using configure_file's `install` property for some time now, but this has been officially supported and works as expected only since meson 0.50, so, bump version to avoid warnings and ensure the behavior is the one we want. !585
-
Marco Trevisan authored
This was needed until we had autotools in place. !585
-
Daniel van Vugt authored
If an update (new frame) had been scheduled already before `_clutter_stage_cogl_presented` was called then that means it was scheduled for the wrong time. Because the `last_presentation_time` has changed since then. And using an `update_time` based on an outdated presentation time results in scheduling frames too early, filling the buffer queue (triple buffering or worse) and high visual latency. So if we do receive a presentation event when an update is already scheduled, remember to reschedule the update based on the newer `last_presentation_time`. This way we avoid overfilling the buffer queue and limit ourselves to double buffering for less visible lag. Closes: #334 Prerequisite: !520 !281
-
Jonas Ådahl authored
There is no reason why we should have an internal type enum when we have all the infrastructure to just use multiple GObject types. Also there was no code sharing between the old "types", the only common API was getting the framebuffer ID, so lets make that a vfunc. !584
-
Jonas Ådahl authored
If triggered, many would result in crashes later anyway, so lets change those to asserts. Some are simply useless, so remove those. !584
-
Jonas Ådahl authored
Nowhere else is it called 'drm_fd' so lets not get rid of this inconsistency. !584
-
Jonas Ådahl authored
MetaKms* will be a dedicated namespace, which MetaKmsBuffer doesn't fit under. !584
-
Jonas Ådahl authored
!584
-
Benjamin Berg authored
If mutter is running as a systemd user service, then we cannot use the magic "self" session for the ID lookup. For now we need to lookup the ID explicitly. Eventually we can change to use the magic "auto" paths for both the session and seat, but that will require systemd v243. See also https://github.com/systemd/systemd/pull/12424#issuecomment-487962314 !571
-
Daniel van Vugt authored
Start reference counting front buffers instead of assuming we know their (scanout) lifetimes. Functionally, this should not change anything. !119
-
Niels De Graef authored
By providing an (internal) table to map `CoglPixelFormat`s to their respective properties we will be able to get rid of the unusual enum values in the future. This is something we will need once we want to have support for more pixel formats (such as YUV-based formats). As an extra feature, we provide a `to_string()` method, which is quite useful for debugging purposes (rather than deciphering enum values). !524
-
Niels De Graef authored
We're going to add some features and extra code to CoglPixelFormat, so it's much nicer to have it in once place. Notice also that it doesn't make sense that e.g. `_cogl_pixel_format_get_bytes_per_pixel()` were in a private header, since they were being exported anyway. !524
-
Marco Trevisan authored
!469
-
Marco Trevisan authored
Set the offsets in different statements. !469
-
Marco Trevisan authored
There's no need to repeat what gcc can do alone. !469
-
Marco Trevisan authored
!469
-
Marco Trevisan authored
!469
-
Marco Trevisan authored
In order to scale a rectangle by a double value, we can reuse a ClutterRect to do the scale computations in floating point math and then to convert it back using the proper strategy that will take in account the subpixel compensation. In this way we can be sure that the resulting rectangle can fully contain the original scaled one. !469
-
- 20 May, 2019 2 commits
-
-
Florian Müllner authored
This commit is a bit deceitful: The main change in the image is *not* the more recent Fedora base, but an updated (and not backward-compatible) evolution-data-server package from the fmuellner/gnome-shell-ci copr. gnome-shell!501 ports gnome-shell to the new API, so to keep mutter and gnome-shell CI working after that change, we need to build against the correct EDS version. !582
-
Florian Müllner authored
While the regular session bus is provided by `dbus-run-session`, the a11y bus is spawn by the "normal" D-Bus daemon (that is, dbus-broker in F30). This currently fails, either due to a bug or some missing dependencies in the container environment. But as we don't actually need the additional bus, just disable it via the environment to make not break tests when updating the base image to F30. !582
-
- 17 May, 2019 1 commit
-
-
Marco Trevisan authored
Pango functions pango_unichar_direction() and pango_find_base_dir() have been deprecated in pango 1.44, since these are used mostly clutter and gtk, copy the code from pango and use fribidi dependency explicitly. This is the same strategy used by Gtk. !583
-
- 16 May, 2019 3 commits
-
-
Daniel van Vugt authored
The `last_presentation_time` is usually a little in the past (although sometimes in the future depending on the driver). When it's over 2ms (`sync_delay`) in the past that would trigger the while loop to count up so that the next `update_time` is in the future. The problem with that is for common values of `last_presentation_time` which are only a few milliseconds ago, incrementing `update_time` by `refresh_interval` also means counting past the next physical frame that we haven't rendered yet. And so mutter would skip that frame. **Example** Given: ``` last_presentation_time = now - 3ms sync_delay = 2ms refresh_interval = 16ms next_presentation_time = last_presentation_time + refresh_interval = now + 13ms -3ms now +13ms +29ms +45ms ----|--+------------|---------------|---------------|---- : : last_presentation_time next_presentation_time ``` Old algorithm: ``` update_time = last_presentation_time + sync_delay = now - 1ms while (update_time < now) (now - 1ms < now) update_time = now - 1ms + 16ms update_time = now + 15ms next_presentation_time = now + 13ms available_render_time = next_presentation_time - max(now, update_time) = (now + 13ms) - (now + 15ms) = -2ms so the next frame will be skipped. -3ms now +13ms +29ms +45ms ----|--+------------|-+-------------|---------------|---- : : : : : update_time (too late) : : last_presentation_time next_presentation_time (a missed frame) ``` New algorithm: ``` min_render_time_allowed = refresh_interval / 2 = 8ms max_render_time_allowed = refresh_interval - sync_delay = 14ms target_presentation_time = last_presentation_time + refresh_interval = now - 3ms + 16ms = now + 13ms while (target_presentation_time - min_render_time_allowed < now) (now + 13ms - 8ms < now) (5ms < 0ms) # loop is never entered update_time = target_presentation_time - max_render_time_allowed = now + 13ms - 14ms = now - 1ms next_presentation_time = now + 13ms available_render_time = next_presentation_time - max(now, update_time) = (now + 13ms) - now = 13ms which is plenty of render time. -3ms now +13ms +29ms +45ms ----|-++------------|---------------|---------------|---- : : : : update_time : : : last_presentation_time next_presentation_time ``` The reason nobody noticed these missed frames very often was because mutter has some accidental workarounds built-in: * Prior to 3.32, the offending code was only reachable in Xorg sessions. It was never reached in Wayland sessions because it hadn't been implemented yet (till e9e4b2b7). * Even though Wayland support is now implemented the native backend provides a `last_presentation_time` much faster than Xorg sessions (being in the same process) and so is less likely to spuriously enter the while loop to miss a frame. * For Xorg sessions we are accidentally triple buffering (#334). This is a good way to avoid the missed frames, but is also an accident. * `sync_delay` is presently just high enough (2ms by coincidence is very close to common values of `now - last_presentation_time`) to push the `update_time` into the future in some cases, which avoids entering the while loop. This is why the same missed frames problem was also noticed when experimenting with `sync_delay = 0`. v2: adjust variable names and code style. Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=789186 and most of #571 !520
-
Marco Trevisan authored
Linux glibc supports a malloc implementation that is allows to be tunable using environment variables, to check allocation issues. When MALLOC_CHECK_ is set to 3, a diagnostic message is printed on stderr and the program is aborted. Setting the MALLOC_PERTURB_ environment variable causes the malloc functions in to return memory which has been wiped and initialized with the byte value of the environment variable. So use this features when running tests in order to catch better memory errors. !578
-
Daniel Mustieles García authored
-
- 15 May, 2019 9 commits
-
-
Marco Trevisan authored
This function was added for historic reasons, before that we had GSlist's free_full function. Since this can be now easily implemented with a function call and an explicit GDestroyFunc, while no known dependency uses it let's move to use g_slist_free_func instead. !57
-
Marco Trevisan authored
GList's used in legacy code were free'd using a g_slist_foreach + g_slist_free, while we can just use g_slist_free_full as per GLib 2.28. So replace code where we were using this legacy codepath. !576
-
Marco Trevisan authored
GList's used in legacy code were free'd using a g_list_foreach + g_list_free, while we can just use g_list_free_full as per GLib 2.28. So replace code where we were using this legacy codepath. !576
-
Carlos Garnacho authored
This shouldn't happen frequently, but is just a sign that the source is being replaced by something else. Just keep the warning for other possible error situations. Also, plug the potential GError leak. Closes: #598