fb4869d628
When we create a new view, assign it to the primary plane from the
beginning.
Currently, every view across the compositor will be assigned to a plane
during every repaint cycle of every output: the DRM renderer's
assign_planes hook will either move a view to a drm_plane, or to the
primary plane if a suitable drm_plane could not be found for the output
it is on. There are no other assign_planes implementation, and the
fallback when none is provided, is to assign every view to the primary
plane.
DRM's behaviour is undesirable in multi-output situations, since it
means that views which were on a plane on one output will be demoted to
the primary plane; doing this causes damage, which will cause a spurious
repaint for the output. This spurious repaint will have no effect on the
other output, but it will do the same demotion of views to the primary
plane, which will again provoke a repaint on the other output.
With a simple fix for this behaviour (i.e. not moving views which are
only visible on other outputs), the following behaviour is observed:
- outputs A and B are present
- views A and B are created for those outputs respectively, with SHM
buffers attached; view->plane == NULL for both
- current buffer content for views A and B are uploaded to the
renderer
- output A runs its repaint cycle, and sets keep_buffer to false on
surface B's output, as it can never be promoted to a plane; it does
not move view B to another plane
- output B runs its repaint cycle, and moves view B to the primary
plane
- weston_view_assign_to_plane has work to do (as the plane is changing
from NULL to the primary plane), calls weston_surface_damage and
calls weston_surface_damage
- weston_surface_damage re-uploads buffer content, possibly from
nowhere at all;
|
||
---|---|---|
.. | ||
animation.c | ||
bindings.c | ||
clipboard.c | ||
compositor-drm.c | ||
compositor-drm.h | ||
compositor-fbdev.c | ||
compositor-fbdev.h | ||
compositor-headless.c | ||
compositor-headless.h | ||
compositor-rdp.c | ||
compositor-rdp.h | ||
compositor-wayland.c | ||
compositor-wayland.h | ||
compositor-x11.c | ||
compositor-x11.h | ||
compositor.c | ||
compositor.h | ||
data-device.c | ||
dbus.c | ||
dbus.h | ||
gl-renderer.c | ||
gl-renderer.h | ||
input.c | ||
launcher-direct.c | ||
launcher-impl.h | ||
launcher-logind.c | ||
launcher-util.c | ||
launcher-util.h | ||
launcher-weston-launch.c | ||
libbacklight.c | ||
libbacklight.h | ||
libinput-device.c | ||
libinput-device.h | ||
libinput-seat.c | ||
libinput-seat.h | ||
libweston.pc.in | ||
linux-dmabuf.c | ||
linux-dmabuf.h | ||
log.c | ||
noop-renderer.c | ||
pixman-renderer.c | ||
pixman-renderer.h | ||
plugin-registry.c | ||
plugin-registry.h | ||
screenshooter.c | ||
spring-tool.c | ||
timeline-object.h | ||
timeline.c | ||
timeline.h | ||
vaapi-recorder.c | ||
vaapi-recorder.h | ||
version.h.in | ||
vertex-clipping.c | ||
vertex-clipping.h | ||
weston-egl-ext.h | ||
weston-launch.c | ||
weston-launch.h | ||
windowed-output-api.h | ||
zoom.c |