From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KWD0p-0001sX-99 for qemu-devel@nongnu.org; Thu, 21 Aug 2008 12:27:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KWD0o-0001qp-DL for qemu-devel@nongnu.org; Thu, 21 Aug 2008 12:27:50 -0400 Received: from [199.232.76.173] (port=37089 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KWD0o-0001qQ-4x for qemu-devel@nongnu.org; Thu, 21 Aug 2008 12:27:50 -0400 Received: from mx1.redhat.com ([66.187.233.31]:46335) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KWD0n-0005yH-R1 for qemu-devel@nongnu.org; Thu, 21 Aug 2008 12:27:49 -0400 From: Gerd Hoffmann Date: Thu, 21 Aug 2008 18:27:23 +0200 Message-Id: <1219336054-15919-3-git-send-email-kraxel@redhat.com> In-Reply-To: <1219336054-15919-1-git-send-email-kraxel@redhat.com> References: <1219336054-15919-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 02/13] add DisplayState->idle Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, xen-devel@lists.xensource.com Cc: Gerd Hoffmann , Samuel Thibault From: Samuel Thibault From: 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 --- console.h | 1 + sdl.c | 2 ++ vl.c | 2 ++ vnc.c | 3 +++ 4 files changed, 8 insertions(+), 0 deletions(-) diff --git a/console.h b/console.h index 561ef51..233e7ef 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 84a9d6d..15427c5 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 071ee0c..ee89107 100644 --- a/vl.c +++ b/vl.c @@ -5974,6 +5974,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 2d17044..0d55a78 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; -- 1.5.5.1