ui: refactor code for determining if an update should be sent to the client
The logic for determining if it is possible to send an update to the client will become more complicated shortly, so pull it out into a separate method for easier extension later. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Reviewed-by: Darren Kenny <darren.kenny@oracle.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-id: 20171218191228.31018-9-berrange@redhat.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									728a7ac954
								
							
						
					
					
						commit
						0bad834228
					
				
							
								
								
									
										27
									
								
								ui/vnc.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								ui/vnc.c
									
									
									
									
									
								
							@ -961,6 +961,25 @@ static int find_and_clear_dirty_height(VncState *vs,
 | 
			
		||||
    return h;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool vnc_should_update(VncState *vs)
 | 
			
		||||
{
 | 
			
		||||
    switch (vs->update) {
 | 
			
		||||
    case VNC_STATE_UPDATE_NONE:
 | 
			
		||||
        break;
 | 
			
		||||
    case VNC_STATE_UPDATE_INCREMENTAL:
 | 
			
		||||
        /* Only allow incremental updates if the output buffer
 | 
			
		||||
         * is empty, or if audio capture is enabled.
 | 
			
		||||
         */
 | 
			
		||||
        if (!vs->output.offset || vs->audio_cap) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case VNC_STATE_UPDATE_FORCE:
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int vnc_update_client(VncState *vs, int has_dirty)
 | 
			
		||||
{
 | 
			
		||||
    VncDisplay *vd = vs->vd;
 | 
			
		||||
@ -975,13 +994,7 @@ static int vnc_update_client(VncState *vs, int has_dirty)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    vs->has_dirty += has_dirty;
 | 
			
		||||
    if (vs->update == VNC_STATE_UPDATE_NONE) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (vs->output.offset && !vs->audio_cap &&
 | 
			
		||||
        vs->update != VNC_STATE_UPDATE_FORCE) {
 | 
			
		||||
        /* kernel send buffers are full -> drop frames to throttle */
 | 
			
		||||
    if (!vnc_should_update(vs)) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user