Home
last modified time | relevance | path

Searched hist:"12 b316d4" (Results 1 – 2 of 2) sorted by relevance

/openbmc/qemu/ui/
H A Dvnc.h12b316d4 Wed Jan 08 03:08:35 CST 2014 Peter Lieven <pl@kamp.de> ui/vnc: optimize dirty bitmap tracking

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: Peter Lieven <pl@kamp.de>
Reviewed-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
H A Dvnc.c12b316d4 Wed Jan 08 03:08:35 CST 2014 Peter Lieven <pl@kamp.de> ui/vnc: optimize dirty bitmap tracking

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: Peter Lieven <pl@kamp.de>
Reviewed-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>