qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Anthony Liguori <aliguori@us.ibm.com>, Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 20/24] xen: re-enable refresh interval reporting for xenfb
Date: Tue, 16 Apr 2013 11:39:34 +0200	[thread overview]
Message-ID: <1366105178-26744-21-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1366105178-26744-1-git-send-email-kraxel@redhat.com>

xenfb informs the guest about the gui refresh interval so it can avoid
pointless work.  That logic was temporarely disabled for the
DisplayState reorganization.  Restore it now, with a proper interface
for it.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/display/xenfb.c   |   56 +++++++++++++++-----------------------------------
 include/ui/console.h |    1 +
 ui/console.c         |    6 ++++++
 3 files changed, 24 insertions(+), 39 deletions(-)

diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c
index 8d327f1..f2eb89f 100644
--- a/hw/display/xenfb.c
+++ b/hw/display/xenfb.c
@@ -78,7 +78,6 @@ struct XenFB {
     void              *pixels;
     int               fbpages;
     int               feature_update;
-    int               refresh_period;
     int               bug_trigger;
     int               have_console;
     int               do_resize;
@@ -646,7 +645,7 @@ static void xenfb_guest_copy(struct XenFB *xenfb, int x, int y, int w, int h)
     dpy_gfx_update(xenfb->c.con, x, y, w, h);
 }
 
-#if 0 /* def XENFB_TYPE_REFRESH_PERIOD */
+#ifdef XENFB_TYPE_REFRESH_PERIOD
 static int xenfb_queue_full(struct XenFB *xenfb)
 {
     struct xenfb_page *page = xenfb->c.page;
@@ -704,39 +703,7 @@ static void xenfb_update(void *opaque)
     if (xenfb->c.xendev.be_state != XenbusStateConnected)
         return;
 
-    if (xenfb->feature_update) {
-#if 0 /* XENFB_TYPE_REFRESH_PERIOD */
-        struct DisplayChangeListener *l;
-        int period = 99999999;
-        int idle = 1;
-
-	if (xenfb_queue_full(xenfb))
-	    return;
-
-        QLIST_FOREACH(l, &xenfb->c.ds->listeners, next) {
-            if (l->idle)
-                continue;
-            idle = 0;
-            if (!l->gui_timer_interval) {
-                if (period > GUI_REFRESH_INTERVAL)
-                    period = GUI_REFRESH_INTERVAL;
-            } else {
-                if (period > l->gui_timer_interval)
-                    period = l->gui_timer_interval;
-            }
-        }
-        if (idle)
-	    period = XENFB_NO_REFRESH;
-
-	if (xenfb->refresh_period != period) {
-	    xenfb_send_refresh_period(xenfb, period);
-	    xenfb->refresh_period = period;
-            xen_be_printf(&xenfb->c.xendev, 1, "refresh period: %d\n", period);
-	}
-#else
-	; /* nothing */
-#endif
-    } else {
+    if (!xenfb->feature_update) {
 	/* we don't get update notifications, thus use the
 	 * sledge hammer approach ... */
 	xenfb->up_fullscreen = 1;
@@ -785,6 +752,20 @@ static void xenfb_update(void *opaque)
     xenfb->up_fullscreen = 0;
 }
 
+static void xenfb_update_interval(void *opaque, uint64_t interval)
+{
+    struct XenFB *xenfb = opaque;
+
+    if (xenfb->feature_update) {
+#ifdef XENFB_TYPE_REFRESH_PERIOD
+        if (xenfb_queue_full(xenfb)) {
+            return;
+        }
+        xenfb_send_refresh_period(xenfb, interval);
+#endif
+    }
+}
+
 /* QEMU display state changed, so refresh the framebuffer copy */
 static void xenfb_invalidate(void *opaque)
 {
@@ -858,10 +839,6 @@ static void xenfb_handle_events(struct XenFB *xenfb)
 
 static int fb_init(struct XenDevice *xendev)
 {
-    struct XenFB *fb = container_of(xendev, struct XenFB, c.xendev);
-
-    fb->refresh_period = -1;
-
 #ifdef XENFB_TYPE_RESIZE
     xenstore_write_be_int(xendev, "feature-resize", 1);
 #endif
@@ -980,6 +957,7 @@ struct XenDevOps xen_framebuffer_ops = {
 static const GraphicHwOps xenfb_ops = {
     .invalidate  = xenfb_invalidate,
     .gfx_update  = xenfb_update,
+    .update_interval = xenfb_update_interval,
 };
 
 /*
diff --git a/include/ui/console.h b/include/ui/console.h
index 3cb0018..800f458 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -272,6 +272,7 @@ typedef struct GraphicHwOps {
     void (*invalidate)(void *opaque);
     void (*gfx_update)(void *opaque);
     void (*text_update)(void *opaque, console_ch_t *text);
+    void (*update_interval)(void *opaque, uint64_t interval);
 } GraphicHwOps;
 
 QemuConsole *graphic_console_init(const GraphicHwOps *ops,
diff --git a/ui/console.c b/ui/console.c
index 5bbc891..43ff80b 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -182,6 +182,7 @@ static void gui_update(void *opaque)
     uint64_t dcl_interval;
     DisplayState *ds = opaque;
     DisplayChangeListener *dcl;
+    int i;
 
     ds->refreshing = true;
     dpy_refresh(ds);
@@ -196,6 +197,11 @@ static void gui_update(void *opaque)
     }
     if (ds->update_interval != interval) {
         ds->update_interval = interval;
+        for (i = 0; i < nb_consoles; i++) {
+            if (consoles[i]->hw_ops->update_interval) {
+                consoles[i]->hw_ops->update_interval(consoles[i]->hw, interval);
+            }
+        }
         trace_console_refresh(interval);
     }
     ds->last_update = qemu_get_clock_ms(rt_clock);
-- 
1.7.9.7

  parent reply	other threads:[~2013-04-16  9:40 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-16  9:39 [Qemu-devel] [PULL v4 00/24] console: console overhaul continued Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 01/24] exynos4210_fimd.c: fix display resize bug introduced after console revamp Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 02/24] hw/vmware_vga.c: fix screen " Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 03/24] hw/vmware_vga.c: add tracepoints for mmio reads+writes Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 04/24] hw/vmware_vga.c: various vmware vga fixes Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 05/24] pixman: add qemu_pixman_color() Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 06/24] pixman: render vgafont glyphs into pixman images Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 07/24] console: use pixman for fill+blit Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 08/24] console: use pixman for font rendering Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 09/24] console: switch color_table_rgb to pixman_color_t Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 10/24] console: add trace events Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 11/24] console: displaystate init revamp Gerd Hoffmann
2013-04-24 16:18   ` Markus Armbruster
2013-04-24 16:38     ` Anthony Liguori
2013-04-16  9:39 ` [Qemu-devel] [PATCH 12/24] console: rename vga_hw_*, add QemuConsole param Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 13/24] console: give each QemuConsole its own DisplaySurface Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 14/24] console: simplify screendump Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 15/24] console: zap g_width + g_height Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 16/24] console: move gui_update+gui_setup_refresh from vl.c into console.c Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 17/24] console: make DisplayState private to console.c Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 18/24] console: add GraphicHwOps Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 19/24] console: gui timer fixes Gerd Hoffmann
2013-04-16  9:39 ` Gerd Hoffmann [this message]
2013-04-16  9:39 ` [Qemu-devel] [PATCH 21/24] console: add qemu_console_is_* Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 22/24] console: allow pinning displaychangelisteners to consoles Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 23/24] gtk: custom cursor support Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 24/24] qxl: register QemuConsole for secondary cards Gerd Hoffmann
2013-04-17  9:38 ` [Qemu-devel] [PULL v4 00/24] console: console overhaul continued Paolo Bonzini
2013-04-17 11:42   ` Peter Maydell
2013-04-18  6:21     ` Gerd Hoffmann
  -- strict thread matches above, loose matches on Subject: below --
2013-04-04  7:28 [Qemu-devel] [PATCH v3 " Gerd Hoffmann
2013-04-04  7:29 ` [Qemu-devel] [PATCH 20/24] xen: re-enable refresh interval reporting for xenfb Gerd Hoffmann
2013-04-04 17:06   ` Stefano Stabellini
2013-04-05  7:28     ` Gerd Hoffmann
2013-04-05 10:07       ` Stefano Stabellini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1366105178-26744-21-git-send-email-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).