All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL 0/2] Ui 20200114 patches
@ 2020-01-14 10:01 Gerd Hoffmann
  2020-01-14 10:01 ` [PULL 1/2] ui: Print available display backends with '-display help' Gerd Hoffmann
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2020-01-14 10:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Gerd Hoffmann

The following changes since commit 3c8a6575985b1652b45bfa670b5e1907d642cfa0:

  Merge remote-tracking branch 'remotes/kraxel/tags/usb-20200113-pull-request' into staging (2020-01-13 14:19:57 +0000)

are available in the Git repository at:

  git://git.kraxel.org/qemu tags/ui-20200114-pull-request

for you to fetch changes up to c4c00922cc948bb5e879bfae60764eba1f8745f3:

  display/gtk: get proper refreshrate (2020-01-14 07:26:36 +0100)

----------------------------------------------------------------
ui: add "-display help", gtk refresh rate.

----------------------------------------------------------------

Nikola Pavlica (1):
  display/gtk: get proper refreshrate

Thomas Huth (1):
  ui: Print available display backends with '-display help'

 include/ui/console.h |  1 +
 include/ui/gtk.h     |  2 ++
 ui/console.c         | 15 +++++++++++++++
 ui/gtk.c             | 11 +++++++++++
 vl.c                 |  5 +++++
 qemu-options.hx      |  3 ++-
 6 files changed, 36 insertions(+), 1 deletion(-)

-- 
2.18.1



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PULL 1/2] ui: Print available display backends with '-display help'
  2020-01-14 10:01 [PULL 0/2] Ui 20200114 patches Gerd Hoffmann
@ 2020-01-14 10:01 ` Gerd Hoffmann
  2020-01-14 10:01 ` [PULL 2/2] display/gtk: get proper refreshrate Gerd Hoffmann
  2020-01-14 16:42 ` [PULL 0/2] Ui 20200114 patches Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2020-01-14 10:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Thomas Huth, Gerd Hoffmann

From: Thomas Huth <thuth@redhat.com>

We already print availabled devices with "-device help", or available
backends with "-netdev help" or "-chardev help". Let's provide a way
for the users to query the available display backends, too.

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-id: 20200108144702.29969-1-thuth@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h |  1 +
 ui/console.c         | 15 +++++++++++++++
 vl.c                 |  5 +++++
 qemu-options.hx      |  3 ++-
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 281f9c145b58..f35b4fc082b4 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -442,6 +442,7 @@ void qemu_display_register(QemuDisplay *ui);
 bool qemu_display_find_default(DisplayOptions *opts);
 void qemu_display_early_init(DisplayOptions *opts);
 void qemu_display_init(DisplayState *ds, DisplayOptions *opts);
+void qemu_display_help(void);
 
 /* vnc.c */
 void vnc_display_init(const char *id, Error **errp);
diff --git a/ui/console.c b/ui/console.c
index ac79d679f576..69339b028bb2 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -2333,6 +2333,21 @@ void qemu_display_init(DisplayState *ds, DisplayOptions *opts)
     dpys[opts->type]->init(ds, opts);
 }
 
+void qemu_display_help(void)
+{
+    int idx;
+
+    printf("Available display backend types:\n");
+    for (idx = DISPLAY_TYPE_NONE; idx < DISPLAY_TYPE__MAX; idx++) {
+        if (!dpys[idx]) {
+            ui_module_load_one(DisplayType_str(idx));
+        }
+        if (dpys[idx]) {
+            printf("%s\n",  DisplayType_str(dpys[idx]->type));
+        }
+    }
+}
+
 void qemu_chr_parse_vc(QemuOpts *opts, ChardevBackend *backend, Error **errp)
 {
     int val;
diff --git a/vl.c b/vl.c
index 158a05ed321c..751401214c80 100644
--- a/vl.c
+++ b/vl.c
@@ -1869,6 +1869,11 @@ static void parse_display(const char *p)
 {
     const char *opts;
 
+    if (is_help_option(p)) {
+        qemu_display_help();
+        exit(0);
+    }
+
     if (strstart(p, "sdl", &opts)) {
         /*
          * sdl DisplayType needs hand-crafted parser instead of
diff --git a/qemu-options.hx b/qemu-options.hx
index d4b73ef60c1d..709162c159ad 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1669,7 +1669,8 @@ STEXI
 @item -display @var{type}
 @findex -display
 Select type of display to use. This option is a replacement for the
-old style -sdl/-curses/... options. Valid values for @var{type} are
+old style -sdl/-curses/... options. Use @code{-display help} to list
+the available display types. Valid values for @var{type} are
 @table @option
 @item sdl
 Display video output via SDL (usually in a separate graphics
-- 
2.18.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PULL 2/2] display/gtk: get proper refreshrate
  2020-01-14 10:01 [PULL 0/2] Ui 20200114 patches Gerd Hoffmann
  2020-01-14 10:01 ` [PULL 1/2] ui: Print available display backends with '-display help' Gerd Hoffmann
@ 2020-01-14 10:01 ` Gerd Hoffmann
  2020-01-14 16:42 ` [PULL 0/2] Ui 20200114 patches Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2020-01-14 10:01 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Gerd Hoffmann, Nikola Pavlica

From: Nikola Pavlica <pavlica.nikola@gmail.com>

Because some VMs in QEMU can get GPU virtualization (using technologies
such as iGVT-g, as mentioned previously), they could produce a video
output that had a higher display refresh rate than of what the GTK
display was displaying. (fxp. Playing a video game inside of a Windows
VM at 60 Hz, while the output stood locked at 33 Hz because of defaults
set in include/ui/console.h)

Since QEMU does indeed have internal systems for determining frame
times as defined in ui/console.c.
The code checks for a variable called update_interval that it later
uses for time calculation. This variable, however, isn't defined
anywhere in ui/gtk.c and instead ui/console.c just sets it to
GUI_REFRESH_INTERVAL_DEFAULT which is 30

update_interval represents the number of milliseconds per display
refresh, and by doing some math we get that 1000/30 = 33.33... Hz

This creates the mentioned problem and what this patch does is that it
checks for the display refresh rate reported by GTK itself (we can take
this as a safe value) and just converts it back to a number of
milliseconds per display refresh.

Signed-off-by: Nikola Pavlica <pavlica.nikola@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20200108121342.29597-1-pavlica.nikola@gmail.com

[ kraxel: style tweak: add blank line between vars and code ]

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/gtk.h |  2 ++
 ui/gtk.c         | 11 +++++++++++
 2 files changed, 13 insertions(+)

diff --git a/include/ui/gtk.h b/include/ui/gtk.h
index d9eedad976ef..d1b230848a7b 100644
--- a/include/ui/gtk.h
+++ b/include/ui/gtk.h
@@ -28,6 +28,8 @@
 #include "ui/egl-context.h"
 #endif
 
+#define MILLISEC_PER_SEC 1000000
+
 typedef struct GtkDisplayState GtkDisplayState;
 
 typedef struct VirtualGfxConsole {
diff --git a/ui/gtk.c b/ui/gtk.c
index 692ccc7bbb90..7355d34fcffd 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1966,6 +1966,11 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
                               GSList *group, GtkWidget *view_menu)
 {
     bool zoom_to_fit = false;
+    int refresh_rate_millihz;
+
+    GdkDisplay *dpy = gtk_widget_get_display(s->window);
+    GdkWindow *win = gtk_widget_get_window(s->window);
+    GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
 
     vc->label = qemu_console_get_label(con);
     vc->s = s;
@@ -2026,6 +2031,12 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
 
     vc->gfx.kbd = qkbd_state_init(con);
     vc->gfx.dcl.con = con;
+
+    refresh_rate_millihz = gdk_monitor_get_refresh_rate(monitor);
+    if (refresh_rate_millihz) {
+        vc->gfx.dcl.update_interval = MILLISEC_PER_SEC / refresh_rate_millihz;
+    }
+
     register_displaychangelistener(&vc->gfx.dcl);
 
     gd_connect_vc_gfx_signals(vc);
-- 
2.18.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PULL 0/2] Ui 20200114 patches
  2020-01-14 10:01 [PULL 0/2] Ui 20200114 patches Gerd Hoffmann
  2020-01-14 10:01 ` [PULL 1/2] ui: Print available display backends with '-display help' Gerd Hoffmann
  2020-01-14 10:01 ` [PULL 2/2] display/gtk: get proper refreshrate Gerd Hoffmann
@ 2020-01-14 16:42 ` Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2020-01-14 16:42 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: Paolo Bonzini, QEMU Developers

On Tue, 14 Jan 2020 at 10:05, Gerd Hoffmann <kraxel@redhat.com> wrote:
>
> The following changes since commit 3c8a6575985b1652b45bfa670b5e1907d642cfa0:
>
>   Merge remote-tracking branch 'remotes/kraxel/tags/usb-20200113-pull-request' into staging (2020-01-13 14:19:57 +0000)
>
> are available in the Git repository at:
>
>   git://git.kraxel.org/qemu tags/ui-20200114-pull-request
>
> for you to fetch changes up to c4c00922cc948bb5e879bfae60764eba1f8745f3:
>
>   display/gtk: get proper refreshrate (2020-01-14 07:26:36 +0100)
>
> ----------------------------------------------------------------
> ui: add "-display help", gtk refresh rate.
>
> ----------------------------------------------------------------
>
> Nikola Pavlica (1):
>   display/gtk: get proper refreshrate
>
> Thomas Huth (1):
>   ui: Print available display backends with '-display help'


Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/5.0
for any user-visible changes.

-- PMM


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-01-14 16:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-14 10:01 [PULL 0/2] Ui 20200114 patches Gerd Hoffmann
2020-01-14 10:01 ` [PULL 1/2] ui: Print available display backends with '-display help' Gerd Hoffmann
2020-01-14 10:01 ` [PULL 2/2] display/gtk: get proper refreshrate Gerd Hoffmann
2020-01-14 16:42 ` [PULL 0/2] Ui 20200114 patches Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.