Version 2 (modified by 9 years ago) (diff) | ,
---|
Window Refresh
The key feature of xpra is the forwarding of individual window contents to the client.
The speed at which the server compresses and sends screen updates to the client depends on a number of factors. There are only a few things the system can tune at runtime:
- the "batch delay": this is the time that the server will wait for screen updates to accumulate before grabbing the next frame
- the video quality (for the x264 video encoder only)
- the video speed (for the x264 video encoder only)
Code Pointers
Since this is an area that receives constant tuning and improvements, the most reliable source of current information is the code itself:
- server_source.py: this class is instantiated for each client connection. In particular:
GlobalPerformanceStatistics
: collects various statistics about this client's connection speed, the various work queues, etc. Theget_factors
method returns a guesstimate of how the batch delay should be adjusted for the given parameters ("target latency" and "pixel count")calculate_delay_thread
which runs at most 4 times a second to tune the batch delay, both the global default one (default_batch_config
which is aDamageBatchConfig
) and the one specific to each window (see below for details)
- window_source.py: this class is instantiated for each window and for each client, it deals with sending the window's pixels to the client. In particular:
DamageBatchConfig
: the structure which encapsulates all the configuration and historical values related to a batch delay.WindowPerformanceStatistics
: per-window statistics: performance of the encoding/decoding, amount of frames and pixels in flight, etc. Again, theget_factors
method rreturns a guesstimate of how the batch delay should ne agjusted for the given parameters ("pixel_count" and current "batch delay")
Note also that many of these classes have a add_stats
method which is used by xpra info
to provide detailed statistics from the command line and is a good first step for debugging.