Commit a0ecfb73b196147215a621236bc7ad8f500b95ea
1 parent
8fccda83
Reduce redundant timer ticks in VNC, by Anders Melchiorsen.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3904 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
8 additions
and
14 deletions
vnc.c
| @@ -506,6 +506,8 @@ static void vnc_update_client(void *opaque) | @@ -506,6 +506,8 @@ static void vnc_update_client(void *opaque) | ||
| 506 | int saved_offset; | 506 | int saved_offset; |
| 507 | int has_dirty = 0; | 507 | int has_dirty = 0; |
| 508 | 508 | ||
| 509 | + vga_hw_update(); | ||
| 510 | + | ||
| 509 | vnc_set_bits(width_mask, (vs->width / 16), VNC_DIRTY_WORDS); | 511 | vnc_set_bits(width_mask, (vs->width / 16), VNC_DIRTY_WORDS); |
| 510 | 512 | ||
| 511 | /* Walk through the dirty map and eliminate tiles that | 513 | /* Walk through the dirty map and eliminate tiles that |
| @@ -580,22 +582,11 @@ static void vnc_update_client(void *opaque) | @@ -580,22 +582,11 @@ static void vnc_update_client(void *opaque) | ||
| 580 | vnc_flush(vs); | 582 | vnc_flush(vs); |
| 581 | 583 | ||
| 582 | } | 584 | } |
| 583 | - qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock) + VNC_REFRESH_INTERVAL); | ||
| 584 | -} | ||
| 585 | 585 | ||
| 586 | -static void vnc_timer_init(VncState *vs) | ||
| 587 | -{ | ||
| 588 | - if (vs->timer == NULL) { | ||
| 589 | - vs->timer = qemu_new_timer(rt_clock, vnc_update_client, vs); | ||
| 590 | - qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock)); | 586 | + if (vs->csock != -1) { |
| 587 | + qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock) + VNC_REFRESH_INTERVAL); | ||
| 591 | } | 588 | } |
| 592 | -} | ||
| 593 | 589 | ||
| 594 | -static void vnc_dpy_refresh(DisplayState *ds) | ||
| 595 | -{ | ||
| 596 | - VncState *vs = ds->opaque; | ||
| 597 | - vnc_timer_init(vs); | ||
| 598 | - vga_hw_update(); | ||
| 599 | } | 590 | } |
| 600 | 591 | ||
| 601 | static int vnc_listen_poll(void *opaque) | 592 | static int vnc_listen_poll(void *opaque) |
| @@ -1926,6 +1917,7 @@ static void vnc_listen_read(void *opaque) | @@ -1926,6 +1917,7 @@ static void vnc_listen_read(void *opaque) | ||
| 1926 | vs->has_resize = 0; | 1917 | vs->has_resize = 0; |
| 1927 | vs->has_hextile = 0; | 1918 | vs->has_hextile = 0; |
| 1928 | vs->ds->dpy_copy = NULL; | 1919 | vs->ds->dpy_copy = NULL; |
| 1920 | + vnc_update_client(vs); | ||
| 1929 | } | 1921 | } |
| 1930 | } | 1922 | } |
| 1931 | 1923 | ||
| @@ -1959,10 +1951,12 @@ void vnc_display_init(DisplayState *ds) | @@ -1959,10 +1951,12 @@ void vnc_display_init(DisplayState *ds) | ||
| 1959 | if (!vs->kbd_layout) | 1951 | if (!vs->kbd_layout) |
| 1960 | exit(1); | 1952 | exit(1); |
| 1961 | 1953 | ||
| 1954 | + vs->timer = qemu_new_timer(rt_clock, vnc_update_client, vs); | ||
| 1955 | + | ||
| 1962 | vs->ds->data = NULL; | 1956 | vs->ds->data = NULL; |
| 1963 | vs->ds->dpy_update = vnc_dpy_update; | 1957 | vs->ds->dpy_update = vnc_dpy_update; |
| 1964 | vs->ds->dpy_resize = vnc_dpy_resize; | 1958 | vs->ds->dpy_resize = vnc_dpy_resize; |
| 1965 | - vs->ds->dpy_refresh = vnc_dpy_refresh; | 1959 | + vs->ds->dpy_refresh = NULL; |
| 1966 | 1960 | ||
| 1967 | memset(vs->dirty_row, 0xFF, sizeof(vs->dirty_row)); | 1961 | memset(vs->dirty_row, 0xFF, sizeof(vs->dirty_row)); |
| 1968 | 1962 |