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
This commit is contained in:
parent
8fccda832a
commit
a0ecfb73b1
22
vnc.c
22
vnc.c
|
@ -506,6 +506,8 @@ static void vnc_update_client(void *opaque)
|
||||||
int saved_offset;
|
int saved_offset;
|
||||||
int has_dirty = 0;
|
int has_dirty = 0;
|
||||||
|
|
||||||
|
vga_hw_update();
|
||||||
|
|
||||||
vnc_set_bits(width_mask, (vs->width / 16), VNC_DIRTY_WORDS);
|
vnc_set_bits(width_mask, (vs->width / 16), VNC_DIRTY_WORDS);
|
||||||
|
|
||||||
/* Walk through the dirty map and eliminate tiles that
|
/* Walk through the dirty map and eliminate tiles that
|
||||||
|
@ -580,22 +582,11 @@ static void vnc_update_client(void *opaque)
|
||||||
vnc_flush(vs);
|
vnc_flush(vs);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vs->csock != -1) {
|
||||||
qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock) + VNC_REFRESH_INTERVAL);
|
qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock) + VNC_REFRESH_INTERVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vnc_timer_init(VncState *vs)
|
|
||||||
{
|
|
||||||
if (vs->timer == NULL) {
|
|
||||||
vs->timer = qemu_new_timer(rt_clock, vnc_update_client, vs);
|
|
||||||
qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vnc_dpy_refresh(DisplayState *ds)
|
|
||||||
{
|
|
||||||
VncState *vs = ds->opaque;
|
|
||||||
vnc_timer_init(vs);
|
|
||||||
vga_hw_update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vnc_listen_poll(void *opaque)
|
static int vnc_listen_poll(void *opaque)
|
||||||
|
@ -1926,6 +1917,7 @@ static void vnc_listen_read(void *opaque)
|
||||||
vs->has_resize = 0;
|
vs->has_resize = 0;
|
||||||
vs->has_hextile = 0;
|
vs->has_hextile = 0;
|
||||||
vs->ds->dpy_copy = NULL;
|
vs->ds->dpy_copy = NULL;
|
||||||
|
vnc_update_client(vs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1959,10 +1951,12 @@ void vnc_display_init(DisplayState *ds)
|
||||||
if (!vs->kbd_layout)
|
if (!vs->kbd_layout)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
|
vs->timer = qemu_new_timer(rt_clock, vnc_update_client, vs);
|
||||||
|
|
||||||
vs->ds->data = NULL;
|
vs->ds->data = NULL;
|
||||||
vs->ds->dpy_update = vnc_dpy_update;
|
vs->ds->dpy_update = vnc_dpy_update;
|
||||||
vs->ds->dpy_resize = vnc_dpy_resize;
|
vs->ds->dpy_resize = vnc_dpy_resize;
|
||||||
vs->ds->dpy_refresh = vnc_dpy_refresh;
|
vs->ds->dpy_refresh = NULL;
|
||||||
|
|
||||||
memset(vs->dirty_row, 0xFF, sizeof(vs->dirty_row));
|
memset(vs->dirty_row, 0xFF, sizeof(vs->dirty_row));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue