xpra icon
Bug tracker and wiki

Opened 6 years ago

Last modified 7 weeks ago

#56 new enhancement

add new resolutions to Xdummy on the fly - dummy driver needs randr support added?

Reported by: Antoine Martin Owned by: Antoine Martin
Priority: critical Milestone: 3.0
Component: platforms Version:
Keywords: dummy x11 Cc: thomas@…

Description

Instead of finding the nearest match, we should just add the modeline, assign it to the output then select it.
This would allow us to match the client's screen size exactly.

(somewhat blocked by #10)

Attachments (9)

add-screen-size.patch (9.5 KB) - added by Antoine Martin 6 years ago.
this patch would add a new mode to Xdummy so we can use it... but does not work
_add-screen-size.patch (9.5 KB) - added by onlyjob 5 years ago.
refreshed patch to apply over 0.6.1
1001-remove-pointless-functions.patch (2.9 KB) - added by Antoine Martin 2 years ago.
dummy randr 1.2: patch 1 Remove pointless empty functions
1002-delete-xv-stuff.patch (1.9 KB) - added by Antoine Martin 2 years ago.
dummy randr 1.2: patch 2 Delete XV stuff
1003-delete-screensaver.patch (1.0 KB) - added by Antoine Martin 2 years ago.
dummy randr 1.2: patch 3 Delete dPtr->screenSaver
1004-remove-dga.patch (7.4 KB) - added by Antoine Martin 2 years ago.
dummy randr 1.2: patch 4 Remove DGA support
1005-remove-fbbase.patch (2.5 KB) - added by Antoine Martin 2 years ago.
dummy randr 1.2: patch 5 Get rid of dPtr->FBBase
1006-randr12.patch (7.8 KB) - added by Antoine Martin 2 years ago.
dummy randr 1.2: patch 6 Support RandR 1.2
dummy-remove-functions.patch (3.5 KB) - added by Antoine Martin 14 months ago.
for testing the latest upstream patches for dummy

Download all attachments as: .zip

Change History (39)

Changed 6 years ago by Antoine Martin

Attachment: add-screen-size.patch added

this patch would add a new mode to Xdummy so we can use it... but does not work

comment:1 Changed 6 years ago by Antoine Martin

Owner: changed from Antoine Martin to Antoine Martin
Status: newaccepted
Summary: add new resolutions to Xdummy on the flyadd new resolutions to Xdummy on the fly - dummy driver needs randr support added?

After asking xorg-devel, it would seem that the dummy driver does not support randr - or at least not fully.

The patch above attempts to replicate xrandr's command line functionality and even includes its own modeline calculator, so from xpra's side it is pretty much ready.

comment:2 Changed 6 years ago by Antoine Martin

Component: androidplatforms
Milestone: 0.0.7.x0.2

comment:3 Changed 6 years ago by Antoine Martin

Milestone: 0.2future

Not heard back, and less critical now that the default config contains many of the typical resolutions found on desktops and even android devices.

Changed 5 years ago by onlyjob

Attachment: _add-screen-size.patch added

refreshed patch to apply over 0.6.1

comment:4 Changed 5 years ago by Antoine Martin

Closed #186 (duplicate - some info there)

comment:5 Changed 4 years ago by Thomas Koch

Cc: thomas@… added

comment:7 Changed 4 years ago by Antoine Martin

Forgot to update this ticket:

comment:8 Changed 3 years ago by Antoine Martin

Milestone: future0.15

Nicolas Boichat has just posted X11 patches to do exactly this!: PATCH dummy: Add support for custom resolutions (RandR 1.2)

Maybe this will fix #728
We'll just have to ensure this works with DPI (#163) - that we deal with #732 if possible, see also #349

Last edited 3 years ago by Antoine Martin (previous) (diff)

comment:9 Changed 3 years ago by Antoine Martin

Milestone: 0.150.16

Looks like the discussion of what to do for randr 1.2 support is ongoing: Cleanups and RandR 1.2 support, with different implementations suggested.

And so this will have to wait until this gets merged in one form or another, and maybe we only have to package it then which would be great (assuming that the new code can be built against older servers that is...)

comment:10 Changed 3 years ago by Antoine Martin

comment:11 Changed 2 years ago by Antoine Martin

Re-post: xvfb: add randr support (v2)

I think we should update the dummy driver with the same changes.

comment:12 Changed 2 years ago by Antoine Martin

In one of the responses to the patch above: http://lists.x.org/archives/xorg-devel/2015-June/046666.html links to: PATCH xf86-video-dummy 0/6: Cleanups and RandR 1.2 support - which is a better approach IMO.

Last edited 2 years ago by Antoine Martin (previous) (diff)

comment:13 Changed 2 years ago by Antoine Martin

See also #969, in particular the ramdac fix in ticket:969#comment:3

Changed 2 years ago by Antoine Martin

dummy randr 1.2: patch 1 Remove pointless empty functions

Changed 2 years ago by Antoine Martin

Attachment: 1002-delete-xv-stuff.patch added

dummy randr 1.2: patch 2 Delete XV stuff

Changed 2 years ago by Antoine Martin

dummy randr 1.2: patch 3 Delete dPtr->screenSaver

Changed 2 years ago by Antoine Martin

Attachment: 1004-remove-dga.patch added

dummy randr 1.2: patch 4 Remove DGA support

Changed 2 years ago by Antoine Martin

Attachment: 1005-remove-fbbase.patch added

dummy randr 1.2: patch 5 Get rid of dPtr->FBBase

Changed 2 years ago by Antoine Martin

Attachment: 1006-randr12.patch added

dummy randr 1.2: patch 6 Support RandR 1.2

comment:14 Changed 2 years ago by Antoine Martin

just tried the patch series above and hit a snag: my xorg-devel reply

comment:15 Changed 2 years ago by Antoine Martin

See also: MST monitors and the proposal for RandR 1.5 which would have the concept of "monitors" (without requiring us to have virtual CRTCs attached to them apparently)

comment:16 Changed 2 years ago by Antoine Martin

Keywords: dummy x11 added
Milestone: 0.161.0
Priority: majorcritical

No movement on this upstream, re-scheduling.

comment:17 Changed 2 years ago by Antoine Martin

Milestone: 1.00.17

The randr v2 patch has been merged: http://lists.x.org/archives/xorg-devel/2015-December/048228.html.
Commit: 3d68d1f26709ecb5ce22a9baa0d3d8162574ed6a.
So either we figure out how to use the same code in Xdummy, or we switch back to Xvfb with newer versions?
Will have to test this new stuff: re-scheduling.

comment:18 Changed 20 months ago by Antoine Martin

Milestone: 0.170.18

re-scheduling

comment:19 Changed 17 months ago by Antoine Martin

We're not alone in needing this: xf86-video-dummy: resize to exact resolution from Chrome Remote Desktop developer Erik Jensen.

comment:20 Changed 17 months ago by Antoine Martin

Milestone: 0.181.0

Milestone renamed

comment:21 Changed 16 months ago by Antoine Martin

Milestone: 1.0future

I don't have time for this, new links:

Changed 14 months ago by Antoine Martin

for testing the latest upstream patches for dummy

comment:22 Changed 14 months ago by Antoine Martin

Recent discussion: remove dead code in dummy driver: In 2014 I had also modified the dummy driver while working with Teradici Corporation to support not only arbitrary pixel dimensions, but also multiple monitors. The latter feature might not make sense to some folks, but if you have a server-side Xserver mapped to a hardware thin client sitting across a network, which has multiple physical monitors attached, you want the Xserver to be configured in the exact same manner as the tin client. Even though there is just a virtual framebuffer in main memory, X applications need to know the number/size/location of monitors so that toolbars are placed properly, windows are fullscreen'ed properly, etc. And when the user moves from one hardware thin client to another, which may have a different monitor configuration, the Xserver session needs to change to that configuration.

comment:23 Changed 10 months ago by Antoine Martin

This will also make #1008 redundant.

comment:24 Changed 4 months ago by Antoine Martin

Milestone: future3.0

Raising again.

This is the commit that added randr to Xvfb: vfb: add randr support (v2)

Last edited 2 months ago by Antoine Martin (previous) (diff)

comment:25 Changed 8 weeks ago by Antoine Martin

Done for Xvfb in r16994.
To use it, switch to Xvfb in browser/xpra/trunk/src/etc/xpra/conf.d/55_server_x11.conf.in.
The server should then create new resolutions for every client, the "-d screen,randr" debug output looks like this (shown here for 1080p, but this works for any reasonable resolution):

dpi=120, dpi.x=120, dpi.y=120, double_click_time=400, double_click_distance=(-1, -1), \
    antialias={'hinting': True, 'enabled': True, 'orientation': 'NONE', 'contrast': 1000, 'hintstyle': 'hintslight'}, \
    cursor_size=24
Python/Gtk2 Linux Fedora 26 TwentySix x11 client version 2.2-r16976 64-bit
 connected from 'desktop' as 'antoine' - 'Antoine Martin'
 mmap is enabled using 256MB area in /run/user/1000/xpra/xpra.7Ap0oy.mmap
 client root window size is 3840x2160 with 1 display:
  :1.0 (1016x572 mm - DPI: 96x95) workarea: 3840x2126 at 0x34
    monitor 1 (708x398 mm - DPI: 137x137)
maximum client resolution is 3840x2160 (current server resolution is 5760x2560)
set_screen_size(3840, 2160)
set_screen_size(3840, 2160) xdpi=120, ydpi=120
set_dpi(120, 120)
add_screen_size(3840, 2160)
Modeline 3840x2160 230 3840 4108 4492 5068 2160 2161 2164 2293
XRRCreateMode returned 0x275
screen_resources: crtcs=1, outputs=1, modes=2
adding mode 0x275 to output 0x3d
randr_added_sizes=[(3840, 2160)]
using XRRSetScreenConfigAndRate with 3840x2160
XRRSetScreenSize(0x555a8dbc8240, 0x25c, 3840, 2160, 813, 457)

Still TODO:

  • ideally, replace the synchronous sleep with an asynchronous handler: we have to wait for the X11 server to reconfigure its outputs, this makes the connection setup slower than it used to be...
  • maybe start removing old resolutions after we have added a few hundred, which can happen quite quickly
  • update the HTML5 client to remove the black borders
Last edited 8 weeks ago by Antoine Martin (previous) (diff)

comment:26 Changed 8 weeks ago by Antoine Martin

Status: acceptednew

r16996: improvements, client fixes (inc html5)

comment:27 Changed 8 weeks ago by Antoine Martin

Owner: changed from Antoine Martin to J. Max Mena

@maxmylyn: ready for some testing as it is.

comment:28 Changed 7 weeks ago by J. Max Mena

Owner: changed from J. Max Mena to Antoine Martin

With a Trunk r17074 Fedora 25 server and client, I played around with this for a few minutes:

I edited my conf file to uncomment the default Xvfb command for Ubuntu, so it read:

Xvfb +extension Composite -nolisten tcp -noreset \
        -auth $XAUTHORITY \
        -screen 0 5760x2560x24+32

And played around with it for a bit. I made sure to turn on -d screen,randr and saw I got the relevant prints. Nothing seems to have been broken, and resizing the HTML5 client seems to work fine. But, I didn't do much other than some xterms and glxgears. Is there anything in particular we should be looking at?

Of note:

I booted my local test bot up, but I need to reconfigure its display settings to work headless. Once I do that, I can do a run-through of the automated tests with Xvfb, maybe that'll catch something I wouldn't.

(Thanks for mentioning that, Smo)

comment:29 Changed 7 weeks ago by J. Max Mena

NOTE:

test bot up and running. The tests are failing after the first run because the server does not get shut down properly. This will require editing the test_measure_perf.py file.

comment:30 Changed 7 weeks ago by Antoine Martin

  • r17075 adds GLX to Xvfb command line, not sure if that makes any difference. There are other switches that may impact performance: +iglx / -iglx, etc.
  • r17080 removes old modes so we don't end up with thousands of modes (which could cause problems with some applications - known to cause crashes with some gnome applications for example), currently set to keep a maximum of 32 resolutions, for testing this can be changed using the env var XPRA_RANDR_MAX_NEW_MODES=VALUE
  • when comparing the performance of Xvfb vs Xdummy, make sure that you don't use virtualgl unless you also intend to use virtualgl in production
  • x11perf may not show much difference between the two (see attachment/wiki/Xdummy/Xvfb-vs-Xorg-x11perf.txt), but other tests might

Note: rather than editing the xvfb= option, you can just build with --without-Xdummy (easier)

Last edited 7 weeks ago by Antoine Martin (previous) (diff)
Note: See TracTickets for help on using tickets.