#2884 closed defect (fixed)
auto-refresh failure: cancelled
Reported by: | Antoine Martin | Owned by: | Antoine Martin |
---|---|---|---|
Priority: | critical | Milestone: | 4.1 |
Component: | server | Version: | 3.0.x |
Keywords: | Cc: |
Description
Running a simple xterm with --quality=10
, maximize and unmaximize until the lossy picture sticks.
Problem is that the server schedules an auto-refresh but a new damage event comes in and cancels it, without re-scheduling a new auto-refresh for some reason. (without even sending a draw packet?)
Change History (4)
comment:1 Changed 5 months ago by
Status: | new → assigned |
---|
comment:2 Changed 5 months ago by
This is caused by r17480.
The easy fix would be to take it out, or make it more clever by comparing with the refresh list:
=================================================================== --- xpra/server/window/window_source.py (revision 27525) +++ xpra/server/window/window_source.py (working copy) @@ -1335,9 +1335,15 @@ def do_damage(self, ww, wh, x, y, w, h, options): now = monotonic_time() - if self.refresh_timer and (w*h>=ww*wh//4 or w*h>=512*1024): - #large enough screen update: cancel refresh timer - self.cancel_refresh_timer() + if self.refresh_timer and not (options.get("auto_refresh", False) or options.get("quality", 0)>=100): + rr = tuple(self.refresh_regions) + if rr: + #does this screen update intersect the refresh areas? + overlap = sum(rect.width*rect.height for rect in rr) + if overlap>0: + pct = int(min(100, 100*overlap//(ww*wh)) * (1+self.global_statistics.congestion_value)) + sched_delay = max(self.min_auto_refresh_delay, int(self.base_auto_refresh_delay * pct // 100)) + self.refresh_target_time = max(self.refresh_target_time, now + sched_delay/1000.0) delayed = self._damage_delayed if delayed:
But we already handle intersections with the video region in window_video_source
- so is this needed at all?
comment:3 Changed 5 months ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:4 Changed 5 weeks ago by
this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/2884
Note: See
TracTickets for help on using
tickets.
What happens is that the refresh is scheduled, but cancelled by
size_notify_clients
as the window is resized:And this damage event never sends a screen update either!