Xpra: Ticket #596: better auto refresh: handle video regions, don't refresh unnecessarily

Split from #592.

The problems:



Wed, 18 Jun 2014 10:51:29 GMT - Antoine Martin:

Much improved in:

Still TODO:


Thu, 19 Jun 2014 13:32:25 GMT - Antoine Martin: owner changed

A good way to see this in action, which also helps to understand what it does is to start with min-quality at 0 and quality very very low. From the command line or:

xpra control :10 min-quality 0
xpra control :10 quality 1

Then later you can go back to normal with:

xpra control :10 quality 0
xpra control :10 min-quality 30

Fri, 20 Jun 2014 22:20:59 GMT - J. Max Mena:

Retested with 14.0 r6853 Windows 7 64-bit client against a 14.0 r6853 Fedora 20 server:

As I mentioned in #410, with the video running, the whole webpage becomes blurry as well and stays that way. It appears that the auto-refresh for the rest of the webpage is not kicking in, and staying in a low-quality state, which could go into an even worse state with the min-quality lowered.

I'll attach some screenshots.


Fri, 20 Jun 2014 22:21:26 GMT - J. Max Mena: attachment set


Fri, 20 Jun 2014 22:22:06 GMT - J. Max Mena: attachment set


Fri, 20 Jun 2014 23:51:30 GMT - alas:

2014-06-20 16:46:27,823 auto refresh: rgb24 screen update (quality=100), nothing to do (region=rectangle[50, 479, 443, 20], refresh regions=[])
2014-06-20 16:46:27,868 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:27,880 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:27,919 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:27,963 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,002 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,028 auto refresh: rgb24 screen update (quality=100), nothing to do (region=rectangle[50, 479, 444, 39], refresh regions=[])
2014-06-20 16:46:28,050 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,085 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,130 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,163 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,199 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,229 auto refresh: rgb24 screen update (quality=100), nothing to do (region=rectangle[50, 479, 444, 20], refresh regions=[])
2014-06-20 16:46:28,250 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,285 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,326 auto refresh: h264 screen update (quality= 70), list of refresh regions unchanged (region=rectangle[50, 131, 640, 390], refresh regions=[])
2014-06-20 16:46:28,331 auto refresh: rgb24 screen update (quality=100), nothing to do (region=rectangle[688, 484, 2, 4], refresh regions=[])
2014-06-20 16:17:37,311 schedule_auto_refresh: elapsed time 379 with target=297, refreshing now
2014-06-20 16:17:37,311 timer_full_refresh() after 0ms, regions=[R[0, 0, 1450, 894]]
2014-06-20 16:17:37,459 auto-refresh png packet sent
2014-06-20 16:17:39,523 auto refresh: jpeg screen update (quality= 34), scheduling refresh (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:39,622 auto refresh: jpeg screen update (quality= 34), list of refresh regions unchanged (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:39,726 auto refresh: jpeg screen update (quality= 35), list of refresh regions unchanged (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:39,816 auto refresh: h264 screen update (quality= 37), keeping existing timer (region=rectangle[0, 0, 1450, 894], refresh regions=[R[0, 0, 1450, 894]])
2014-06-20 16:17:39,818 auto refresh: rgb24 screen update (quality=100), removed rectangle from regions (region=rectangle[1450, 0, 1, 895], refresh regions=[R[0, 0, 1450, 894]])
2014-06-20 16:17:39,818 auto refresh: rgb24 screen update (quality=100), removed rectangle from regions (region=rectangle[0, 894, 1451, 1], refresh regions=[R[0, 0, 1450, 894]])
2014-06-20 16:17:39,875 schedule_auto_refresh: elapsed time 352 with target=297, refreshing now
2014-06-20 16:17:39,876 timer_full_refresh() after 0ms, regions=[R[0, 0, 1450, 894]]
2014-06-20 16:17:40,025 auto-refresh png packet sent
2014-06-20 16:17:40,025 auto refresh: jpeg screen update (quality= 35), scheduling refresh (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:40,056 auto refresh: jpeg screen update (quality= 35), list of refresh regions unchanged (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:40,222 auto refresh: jpeg screen update (quality= 35), list of refresh regions unchanged (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:40,289 schedule_auto_refresh: elapsed time 263 with target=50, refreshing now
2014-06-20 16:17:40,289 timer_full_refresh() after 0ms, regions=[R[0, 0, 213, 26]]
2014-06-20 16:17:40,292 auto-refresh png packet sent
2014-06-20 16:17:40,310 auto refresh: jpeg screen update (quality= 35), scheduling refresh (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:40,410 auto refresh: jpeg screen update (quality= 35), list of refresh regions unchanged (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:40,510 auto refresh: jpeg screen update (quality= 35), list of refresh regions unchanged (region=rectangle[0, 0, 213, 26], refresh regions=[R[0, 0, 213, 26]])
2014-06-20 16:17:40,572 schedule_auto_refresh: elapsed time 262 with target=50, refreshing now
2014-06-20 16:17:40,573 timer_full_refresh() after 0ms, regions=[R[0, 0, 213, 26]]
2014-06-20 16:17:40,575 auto-refresh png packet sent
2014-06-20 16:17:48,633 auto refresh: h264 screen update (quality= 37), scheduling refresh (region=rectangle[0, 0, 1450, 894], refresh regions=[R[0, 0, 1450, 894]])

Sat, 21 Jun 2014 03:32:28 GMT - Antoine Martin: owner changed


This ticket is about the quality setting when refreshing the non-video regions. It is only relevant when video regions are detected. Also, note that setting the quality very low is useful for inspecting visually what is happening, to see when things get a lossless refresh if we do end up sending a low quality update, but unless it also happens with the correct settings, it is not necessarily a bug.


Tue, 24 Jun 2014 17:56:52 GMT - alas: status changed; resolution set

With the issues seeming to be related to #410 rather than this ticket, everything else seems to be working as expected. Adjusting quality &/or min-quality primarily affects the video regions when there is video playing, and the pages overall if there's no region requiring especial attention.

Closing.


Sat, 23 Jan 2021 05:00:25 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/596