> On 23 Mar 2018, at 19.16, Ray, Ian (GE Healthcare) <ian....@ge.com> wrote: > > >> On 23 Mar 2018, at 15.12, Ray, Ian (GE Healthcare) <ian....@ge.com> wrote: >> >> >>> On 16 Feb 2018, at 16.56, Pekka Paalanen <ppaala...@gmail.com> wrote: >>> >>> From: Pekka Paalanen <pekka.paala...@collabora.co.uk> >>> >>> Hi all, >>> >>> here is the v6 of the shared-CRTC clone mode series. Since v5, quite >>> many patches have been extracted from this series, sent out and merged >>> upstream. However, now the series is bigger than ever, because here I am >>> posting the complete series, including the full DRM-backend migration >>> and DRM shared-CRTC clone mode implementation, thanks to having the >>> basic atomic modesetting landed upstream. >>> >>> The previous submission is here: >>> https://lists.freedesktop.org/archives/wayland-devel/2017-December/036236.html >>> >>> Design discussion etc. (sequence diagrams!) can be found here: >>> https://phabricator.freedesktop.org/T7727 >>> https://phabricator.freedesktop.org/w/wayland/weston/atomic-output-config/ >>> https://lists.freedesktop.org/archives/wayland-devel/2017-October/035604.html >>> >>> The series is available as a branch at: >>> https://gitlab.collabora.com/pq/weston/commits/clonemode-6 >>> >>> Highlights since v5: >>> - DRM-backend migration >>> - shared-CRTC clone mode implemented in DRM backend >>> - applied review comments from v5 >>> - don't create a weston_output just to turn it off (DRM) >>> - cms-colord will print a warning when used with clone mode >>> - cms-colord vs. clone mode mentioned in weston-drm.man >>> >>> Unfortunately the testing results are not 100%, you can find my testing >>> procedure below the diffstat. >>> >>> The patch series is structured as follows: >>> >>> - Patches 1-17 introduce most of the new head-based API, and build the >>> scaffolding that allows migrating the frontends and the backends one >>> by one. >>> >> >> Patches 01-17 : Reviewed-by Ian Ray <ian....@ge.com> >> >> >>> - Patches 18-24 migrate the frontends one by one. Patch 19 introduces >>> the simple output configurator which is first used for all backends, >>> including the DRM-backend. >>> >>> - Patches 25-30 clean up libweston after the frontend migration. > > Patches 18-30 : Reviewed-by Ian Ray <ian....@ge.com> > > >>> >>> - Patches 31-38 migrate all the backends to the head-based API. At this >>> point the DRM-backend migration is basically a fake, though. >>> >>> - Patch 39 removes weston_output::head with the last bits of the >>> scaffolding.
Patches 31-39 : Reviewed-by Ian Ray <ian....@ge.com> (May I say that I am really enjoying the review so far. The commits are well structured and the commit messages are highly informative.) >>> >>> - Patches 40-44 enhances libweston core to better support the >>> DRM-backend's clone mode configuration and improve logging. >>> >>> - Patches 45-55 implement the head-based API for real in the >>> DRM-backend, culminating in patch 55 which creates heads for all >>> connectors. >>> >>> - Patch 56 removes unused_connectors array which has been replace with >>> the head list. >>> >>> - Patches 57-70 finally implement everything needed for shared-CRTC >>> clone mode in the DRM-backend. >>> >>> - Patches 71-73 add a new output configrator logic in the frontend to >>> handle clone mode, supporting a new weston.ini key "same-as". >>> >>> >>> Do you think we should call the weston.ini key "clone-of" instead, to >>> leave "same-as" reserved for clone mode where only the desktop area is >>> the same but the monitors would have different video modes, scaling, >>> etc.? >>> >>> There are several imaginable uses for "same-as" variants: >>> - get me shared-CRTC clone mode or fail >>> - get me clone mode, preferring shared-CRTC but automatic fallback to >>> independent CRTCs >>> - get me clone mode, but I want one monitor with HiDPI and one with >>> LoDPI >>> >>> Here I have implemented the automatic fallback version, except it cannot >>> actually fall back, because we have no API to make two weston_outputs >>> show the same area, and libweston's damage tracking could not handle it >>> even if we could. >>> >>> >>> Pekka Paalanen (73): >>> libweston: introduce weston_head >>> libweston: move wl_output to weston_head >>> libweston: use head in wl_output global >>> libweston: make wl_output point to weston_head >>> libweston: refactor weston_mode_switch_finish >>> libweston: introduce weston_output::head_list >>> libweston: properly orphan wl_output resources >>> libweston: strdup head make, model, serial_number >>> cms-colord: find a good head >>> libweston: add name to weston_head >>> libweston: add weston_head::connected >>> libweston: add weston_head_is_enabled() >>> libweston: add compositor list of heads >>> libweston: add heads_changed hook >>> libweston: new head-based output management API >>> libweston: add weston_head destroy signal >>> libweston: add weston_head_is_device_changed() API >>> weston: move weston_output_enable() into callers >>> weston: migrate headless to head-based output API >>> weston: migrate x11 to head-based output API >>> weston: migrate wayland to head-based output API >>> weston: migrate fbdev to head-based output API >>> weston: migrate RDP to head-based output API >>> weston: migrate DRM to head-based output API >>> libweston: change windowed_output_api output_create to create_head >>> libweston: remove output_pending_signal >>> libweston: stop auto-adding the implicit head >>> libweston: assert make/model in weston_output_enable() >>> libweston: assert current_mode in weston_output_enable() >>> libweston: cancel idle_repaint on output destroy >>> compositor-headless: migrate to head-based output API >>> compositor-rdp: migrate to head-based output API >>> compositor-fbdev: make re-enable less drastic >>> compositor-fbdev: migrate to head-based output API >>> compositor-x11: migrate to head-based output API >>> compositor-wayland: strict surface create/destroy >>> compositor-wayland: migrate to head-based output API >>> compositor-drm: start migration to head-based output API >>> libweston: remove weston_output::head >>> libweston: print head names on output enable >>> libweston: create/find output by name >>> libweston: support user data on weston_output >>> libweston: allow attaching heads to enabled outputs >>> libweston: log head detach on enabled output >>> compositor-drm: drm_output_find_by_connector from head_list >>> compositor-drm: use head_find_by_connector in update_unused_outputs >>> compositor-drm: find disconnects from head_list >>> compositor-drm: move backlight into drm_head >>> compositor-drm: move connector fields into drm_head >>> compositor-drm: allocate CRTC on enable() >>> compositor-drm: simplify drm_output_find_by_crtc() >>> compositor-drm: simplify drm_output_find_special_plane() >>> compositor-drm: get current mode on head discovery >>> compositor-drm: move mode list to set_mode() >>> compositor-drm: create heads for all connectors >>> compositor-drm: remove unused_connectors array >>> compositor-drm: drm_output_apply_state_legacy heads >>> compositor-drm: drm_output_apply_state_atomic heads >>> compositor-drm: drm_set_backlight heads >>> compositor-drm: unify head status logging >>> compositor-drm: combine mode list from heads >>> compositor-drm: backlight control for all heads >>> compositor-drm: update video mode printing >>> compositor-drm: introduce drm_head_read_current_setup() >>> compositor-drm: no need to clear inherited_mode >>> compositor-drm: rewrite crtc picking for clone mode >>> compositor-drm: preserve CRTC routing harder >>> compositor-drm: head detach requires a modeset >>> compositor-drm: head attach requires a modeset >>> compositor-drm: allow shared-CRTC cloning >>> weston: store weston_compositor in wet_compositor >>> weston: use wet.compositor consistently in main() >>> weston: support clone mode on DRM-frontend >>> >>> compositor/cms-colord.c | 45 +- >>> compositor/main.c | 818 +++++++++++++++++++++---- >>> compositor/weston-screenshooter.c | 2 +- >>> desktop-shell/input-panel.c | 4 +- >>> desktop-shell/shell.c | 4 +- >>> fullscreen-shell/fullscreen-shell.c | 4 +- >>> ivi-shell/input-panel-ivi.c | 4 +- >>> libweston-desktop/wl-shell.c | 2 +- >>> libweston-desktop/xdg-shell-v6.c | 2 +- >>> libweston/compositor-drm.c | 1128 >>> +++++++++++++++++++++++------------ >>> libweston/compositor-fbdev.c | 206 ++++--- >>> libweston/compositor-headless.c | 75 ++- >>> libweston/compositor-rdp.c | 64 +- >>> libweston/compositor-wayland.c | 254 ++++++-- >>> libweston/compositor-x11.c | 71 ++- >>> libweston/compositor.c | 1107 >>> +++++++++++++++++++++++++++++++--- >>> libweston/compositor.h | 198 +++++- >>> libweston/windowed-output-api.h | 23 +- >>> man/weston-drm.man | 12 + >>> tests/weston-test.c | 2 +- >>> 20 files changed, 3249 insertions(+), 776 deletions(-) >>> >>> >>> Testing procedure and results: >>> >>> All tests were successful except where otherwise mentioned. >>> >>> >>> headless-backend testing: >>> >>> $ make -j7 distcheck >>> >>> >>> x11-backend testing: >>> >>> $ weston >>> $ weston --output-count=3 >>> - close x11 windows one by one >>> $ weston --fullscreen (equally broken before and after) >>> >>> >>> Wayland-backend testing: >>> >>> parent: $ weston --output-count=2 --width=700 >>> outputs have different height >>> >>> tests: >>> >>> weston --use-pixman >>> weston --use-pixman --fullscreen >>> weston --use-pixman --output-count=2 >>> weston --use-pixman --sprawl >>> - close parent outputs one by one >>> >>> In the --sprawl case, closing the first output soon results in the >>> parent compositor: >>> >>> Program received signal SIGSEGV, Segmentation fault. >>> 0x00007ffff7ba3b8f in wl_signal_emit (signal=0x555555da74a8, >>> data=0x555555da74a0) at /home/pq/local/include/wayland-server-core.h:467 >>> 467 wl_list_for_each_safe(l, next, &signal->listener_list, link) >>> (gdb) bt >>> #0 0x00007ffff7ba3b8f in wl_signal_emit (signal=0x555555da74a8, >>> data=0x555555da74a0) at /home/pq/local/include/wayland-server-core.h:467 >>> #1 0x00007ffff7ba8a4c in weston_surface_destroy (surface=0x555555da74a0) >>> at /home/pq/git/weston/libweston/compositor.c:1904 >>> #2 0x00007fffee108196 in fade_out_done_idle_cb (data=0x555555da7d20) at >>> /home/pq/git/weston/desktop-shell/shell.c:2281 >>> #3 0x00007ffff798dcac in wl_event_loop_dispatch_idle >>> (loop=loop@entry=0x55555576c250) at src/event-loop.c:600 >>> #4 0x00007ffff798dd64 in wl_event_loop_dispatch (loop=0x55555576c250, >>> timeout=timeout@entry=-1) at src/event-loop.c:646 >>> #5 0x00007ffff798c4fa in wl_display_run (display=0x55555576c170) at >>> src/wayland-server.c:1260 >>> #6 0x000055555555dd86 in main (argc=1, argv=0x7fffffffdb58) at >>> /home/pq/git/weston/compositor/main.c:2477 >>> >>> >>> >>> parent: $ weston --output-count=2 --width=700 --shell=fullscreen-shell.so >>> >>> tests: >>> >>> weston --use-pixman >>> - close parent outputs one by one >>> >>> >>> RDP-backend testing: >>> >>> - using remmina as client, connected twice in a row >>> >>> >>> >>> fbdev-backend testing: >>> >>> $ weston -Bfbdev-backend.so >>> >>> >>> DRM-backend testing: >>> >>> Two outputs plugged in, third unplugged. >>> 1. start Weston, ensure both outputs work >>> 2. unplug one output, ensure remaining output works >>> 3. re-plug the output, ensure both outputs work >>> 4. quit >>> >>> One output plugged in, the rest unplugged. The plugged-in output is >>> configured to be off in weston.ini. >>> 1. start Weston, zero outputs, check via remote login weston-info works >>> 2. plug in an output, check it works >>> 3. unplug the output, check weston-info via remote >>> >>> >>> >>> Thanks, >>> pq >>> >>> _______________________________________________ >>> wayland-devel mailing list >>> wayland-devel@lists.freedesktop.org >>> https://lists.freedesktop.org/mailman/listinfo/wayland-devel >> > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel