• P
    ui/vnc: optimize dirty bitmap tracking · 12b316d4
    Peter Lieven 提交于
    vnc_update_client currently scans the dirty bitmap of each client
    bitwise which is a very costly operation if only few bits are dirty.
    vnc_refresh_server_surface does almost the same.
    this patch optimizes both by utilizing the heavily optimized
    function find_next_bit to find the offset of the next dirty
    bit in the dirty bitmaps.
    
    The following artifical test (just the bitmap operation part) running
    vnc_update_client 65536 times on a 2560x2048 surface illustrates the
    performance difference:
    
    All bits clean - vnc_update_client_new: 0.07 secs
     vnc_update_client_old: 10.98 secs
    
    All bits dirty - vnc_update_client_new: 11.26 secs
     vnc_update_client_old: 20.19 secs
    
    Few bits dirty - vnc_update_client_new: 0.08 secs
     vnc_update_client_old: 10.98 secs
    
    The case for all bits dirty is still rather slow, this
    is due to the implementation of find_and_clear_dirty_height.
    This will be addresses in a separate patch.
    Signed-off-by: NPeter Lieven <pl@kamp.de>
    Reviewed-by: NWenchao Xia <xiawenc@linux.vnet.ibm.com>
    Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
    12b316d4
vnc.h 17.8 KB