[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] sdl: shorten the GUI refresh interval when mous
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH] sdl: shorten the GUI refresh interval when mouse or keyboard is active |
Date: |
Mon, 11 Jan 2016 13:32:33 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Copying maintainer. You can find people to copy by feeding your patch
to scripts/get_maintainer.pl.
Jindřich Makovička <address@hidden> writes:
> Hi,
>
> some years ago, I submitted a patch improving the mouse response in SDL
> ui, but it got lost under the sands of time. Here is an updated version
> for both SDL and SDL2 frontends.
>
> With the change applied, when the gui receives a keyboard or mouse
> event, it shortens the gui refresh interval to 10ms instead of 30ms for
> next ~60ms. This results in a much better experience when using a mouse
> - similar to the "real" desktop.
>
> Please Cc:, I am not a subscriber.
>
> Regards,
> --
> Jindrich Makovicka
>
> From c747a56164a9d4289eae71c653431d8f6fd688e0 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Jind=C5=99ich=20Makovi=C4=8Dka?= <address@hidden>
> Date: Sat, 5 Dec 2015 13:28:22 +0100
> Subject: [PATCH] sdl: shorten the GUI refresh interval when mouse or keyboard
> is active
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Signed-off-by: Jindřich Makovička <address@hidden>
> ---
> ui/sdl.c | 22 ++++++++++++++++++++++
> ui/sdl2.c | 24 ++++++++++++++++++++++++
> 2 files changed, 46 insertions(+)
>
> diff --git a/ui/sdl.c b/ui/sdl.c
> index 570cb99..aef237a 100644
> --- a/ui/sdl.c
> +++ b/ui/sdl.c
> @@ -60,6 +60,11 @@ static SDL_Cursor *guest_sprite = NULL;
> static SDL_PixelFormat host_format;
> static int scaling_active = 0;
> static Notifier mouse_mode_notifier;
> +static int idle_counter;
> +
> +#define SDL_REFRESH_INTERVAL_BUSY 10
> +#define SDL_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \
> + / SDL_REFRESH_INTERVAL_BUSY + 1)
>
> #if 0
> #define DEBUG_SDL
> @@ -802,6 +807,7 @@ static void handle_activation(SDL_Event *ev)
> static void sdl_refresh(DisplayChangeListener *dcl)
> {
> SDL_Event ev1, *ev = &ev1;
> + int idle = 1;
>
> if (last_vm_running != runstate_is_running()) {
> last_vm_running = runstate_is_running();
> @@ -817,9 +823,11 @@ static void sdl_refresh(DisplayChangeListener *dcl)
> sdl_update(dcl, 0, 0, real_screen->w, real_screen->h);
> break;
> case SDL_KEYDOWN:
> + idle = 0;
> handle_keydown(ev);
> break;
> case SDL_KEYUP:
> + idle = 0;
> handle_keyup(ev);
> break;
> case SDL_QUIT:
> @@ -829,10 +837,12 @@ static void sdl_refresh(DisplayChangeListener *dcl)
> }
> break;
> case SDL_MOUSEMOTION:
> + idle = 0;
> handle_mousemotion(ev);
> break;
> case SDL_MOUSEBUTTONDOWN:
> case SDL_MOUSEBUTTONUP:
> + idle = 0;
> handle_mousebutton(ev);
> break;
> case SDL_ACTIVEEVENT:
> @@ -847,6 +857,18 @@ static void sdl_refresh(DisplayChangeListener *dcl)
> break;
> }
> }
> +
> + if (idle) {
> + if (idle_counter < SDL_MAX_IDLE_COUNT) {
> + idle_counter++;
> + if (idle_counter >= SDL_MAX_IDLE_COUNT) {
> + dcl->update_interval = GUI_REFRESH_INTERVAL_DEFAULT;
> + }
> + }
> + } else {
> + idle_counter = 0;
> + dcl->update_interval = SDL_REFRESH_INTERVAL_BUSY;
> + }
> }
>
> static void sdl_mouse_warp(DisplayChangeListener *dcl,
> diff --git a/ui/sdl2.c b/ui/sdl2.c
> index 5cb75aa..8f0fceb 100644
> --- a/ui/sdl2.c
> +++ b/ui/sdl2.c
> @@ -48,6 +48,11 @@ static int guest_cursor;
> static int guest_x, guest_y;
> static SDL_Cursor *guest_sprite;
> static Notifier mouse_mode_notifier;
> +static int idle_counter;
> +
> +#define SDL2_REFRESH_INTERVAL_BUSY 10
> +#define SDL2_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \
> + / SDL2_REFRESH_INTERVAL_BUSY + 1)
>
> static void sdl_update_caption(struct sdl2_console *scon);
>
> @@ -578,6 +583,7 @@ static void handle_windowevent(SDL_Event *ev)
> void sdl2_poll_events(struct sdl2_console *scon)
> {
> SDL_Event ev1, *ev = &ev1;
> + int idle = 1;
>
> if (scon->last_vm_running != runstate_is_running()) {
> scon->last_vm_running = runstate_is_running();
> @@ -587,12 +593,15 @@ void sdl2_poll_events(struct sdl2_console *scon)
> while (SDL_PollEvent(ev)) {
> switch (ev->type) {
> case SDL_KEYDOWN:
> + idle = 0;
> handle_keydown(ev);
> break;
> case SDL_KEYUP:
> + idle = 0;
> handle_keyup(ev);
> break;
> case SDL_TEXTINPUT:
> + idle = 0;
> handle_textinput(ev);
> break;
> case SDL_QUIT:
> @@ -602,13 +611,16 @@ void sdl2_poll_events(struct sdl2_console *scon)
> }
> break;
> case SDL_MOUSEMOTION:
> + idle = 0;
> handle_mousemotion(ev);
> break;
> case SDL_MOUSEBUTTONDOWN:
> case SDL_MOUSEBUTTONUP:
> + idle = 0;
> handle_mousebutton(ev);
> break;
> case SDL_MOUSEWHEEL:
> + idle = 0;
> handle_mousewheel(ev);
> break;
> case SDL_WINDOWEVENT:
> @@ -618,6 +630,18 @@ void sdl2_poll_events(struct sdl2_console *scon)
> break;
> }
> }
> +
> + if (idle) {
> + if (idle_counter < SDL2_MAX_IDLE_COUNT) {
> + idle_counter++;
> + if (idle_counter >= SDL2_MAX_IDLE_COUNT) {
> + scon->dcl.update_interval = GUI_REFRESH_INTERVAL_DEFAULT;
> + }
> + }
> + } else {
> + idle_counter = 0;
> + scon->dcl.update_interval = SDL2_REFRESH_INTERVAL_BUSY;
> + }
> }
>
> static void sdl_mouse_warp(DisplayChangeListener *dcl,
- Re: [Qemu-devel] [PATCH] sdl: shorten the GUI refresh interval when mouse or keyboard is active,
Markus Armbruster <=