From bcfad70fb0189ba4aca8661e46de95e7149009c6 Mon Sep 17 00:00:00 2001 From: aliguori Date: Thu, 21 Aug 2008 20:08:55 +0000 Subject: add DisplayState->idle (Samuel Thibault) Add idle field to DisplayState struct, so drivers can figure the display is idle and take advantage of that. The xen framebuffer driver will use this to communicate the idle state to the guest, so it knows it can stop doing updates to a virtual display which is invisible anyway. Signed-off-by: Gerd Hoffmann Signed-off-by: Samuel Thibault Signed-off-by: Anthony Liguori git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5056 c046a42c-6fe2-441c-8c8c-71466251a162 --- console.h | 1 + sdl.c | 2 ++ vl.c | 2 ++ vnc.c | 3 +++ 4 files changed, 8 insertions(+) diff --git a/console.h b/console.h index 561ef51bca..233e7ef4d4 100644 --- a/console.h +++ b/console.h @@ -80,6 +80,7 @@ struct DisplayState { void *opaque; struct QEMUTimer *gui_timer; uint64_t gui_timer_interval; + int idle; void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h); void (*dpy_resize)(struct DisplayState *s, int w, int h); diff --git a/sdl.c b/sdl.c index 84a9d6dcdf..15427c5271 100644 --- a/sdl.c +++ b/sdl.c @@ -524,9 +524,11 @@ static void sdl_refresh(DisplayState *ds) if (ev->active.gain) { /* Back to default interval */ ds->gui_timer_interval = 0; + ds->idle = 0; } else { /* Sleeping interval */ ds->gui_timer_interval = 500; + ds->idle = 1; } } break; diff --git a/vl.c b/vl.c index df7b7a6916..ba4af26a75 100644 --- a/vl.c +++ b/vl.c @@ -5976,6 +5976,8 @@ static void dumb_display_init(DisplayState *ds) ds->dpy_update = dumb_update; ds->dpy_resize = dumb_resize; ds->dpy_refresh = dumb_refresh; + ds->gui_timer_interval = 500; + ds->idle = 1; } /***********************************************************/ diff --git a/vnc.c b/vnc.c index 2d17044d61..0d55a78e2e 100644 --- a/vnc.c +++ b/vnc.c @@ -660,6 +660,7 @@ static int vnc_client_io_error(VncState *vs, int ret, int last_errno) qemu_set_fd_handler2(vs->csock, NULL, NULL, NULL, NULL); closesocket(vs->csock); vs->csock = -1; + vs->ds->idle = 1; buffer_reset(&vs->input); buffer_reset(&vs->output); vs->need_update = 0; @@ -1920,6 +1921,7 @@ static int protocol_version(VncState *vs, uint8_t *version, size_t len) static void vnc_connect(VncState *vs) { VNC_DEBUG("New client on socket %d\n", vs->csock); + vs->ds->idle = 0; socket_set_nonblock(vs->csock); qemu_set_fd_handler2(vs->csock, NULL, vnc_client_read, NULL, vs); vnc_write(vs, "RFB 003.008\n", 12); @@ -1959,6 +1961,7 @@ void vnc_display_init(DisplayState *ds) exit(1); ds->opaque = vs; + ds->idle = 1; vnc_state = vs; vs->display = NULL; vs->password = NULL; -- cgit v1.2.1