[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/24] console: displaystate init revamp
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 11/24] console: displaystate init revamp |
Date: |
Thu, 4 Apr 2013 09:28:53 +0200 |
We have only one DisplayState, so there is no need for the "next"
linking, rip it. Also consolidate all displaystate initialization
into init_displaystate(). This function is called by vl.c after
creating the devices (and thus all QemuConsoles) and before
initializing DisplayChangeListensers (aka gtk/sdl/vnc/spice ui).
Signed-off-by: Gerd Hoffmann <address@hidden>
---
include/ui/console.h | 5 +---
ui/console.c | 73 +++++++++++++++++++++++---------------------------
vl.c | 6 +----
3 files changed, 36 insertions(+), 48 deletions(-)
diff --git a/include/ui/console.h b/include/ui/console.h
index a234c72..3725dae 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -189,12 +189,9 @@ struct DisplayState {
bool have_text;
QLIST_HEAD(, DisplayChangeListener) listeners;
-
- struct DisplayState *next;
};
-void register_displaystate(DisplayState *ds);
-DisplayState *get_displaystate(void);
+DisplayState *init_displaystate(void);
DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
int linesize, uint8_t *data,
bool byteswap);
diff --git a/ui/console.c b/ui/console.c
index a4c9151..29f1805 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -163,6 +163,8 @@ static QemuConsole *active_console;
static QemuConsole *consoles[MAX_CONSOLES];
static int nb_consoles = 0;
+static void text_console_do_init(CharDriverState *chr, DisplayState *ds);
+
void vga_hw_update(void)
{
if (active_console && active_console->hw_update)
@@ -1323,39 +1325,37 @@ bool dpy_cursor_define_supported(QemuConsole *con)
return false;
}
-static void dumb_display_init(void)
-{
- DisplayState *ds = g_malloc0(sizeof(DisplayState));
- int width = 640;
- int height = 480;
-
- if (is_fixedsize_console()) {
- width = active_console->g_width;
- height = active_console->g_height;
- }
- ds->surface = qemu_create_displaysurface(width, height);
-
- register_displaystate(ds);
-}
-
/***********************************************************/
/* register display */
-void register_displaystate(DisplayState *ds)
+/* console.c internal use only */
+static DisplayState *get_alloc_displaystate(void)
{
- DisplayState **s;
- s = &display_state;
- while (*s != NULL)
- s = &(*s)->next;
- ds->next = NULL;
- *s = ds;
+ if (!display_state) {
+ display_state = g_new0(DisplayState, 1);
+ }
+ return display_state;
}
-DisplayState *get_displaystate(void)
+/*
+ * Called by main(), after creating QemuConsoles
+ * and before initializing ui (sdl/vnc/...).
+ */
+DisplayState *init_displaystate(void)
{
+ int i;
+
if (!display_state) {
- dumb_display_init ();
+ display_state = g_new0(DisplayState, 1);
}
+
+ for (i = 0; i < nb_consoles; i++) {
+ if (consoles[i]->console_type != GRAPHIC_CONSOLE &&
+ consoles[i]->ds == NULL) {
+ text_console_do_init(consoles[i]->chr, display_state);
+ }
+ }
+
return display_state;
}
@@ -1365,10 +1365,12 @@ QemuConsole *graphic_console_init(vga_hw_update_ptr
update,
vga_hw_text_update_ptr text_update,
void *opaque)
{
+ int width = 640;
+ int height = 480;
QemuConsole *s;
DisplayState *ds;
- ds = (DisplayState *) g_malloc0(sizeof(DisplayState));
+ ds = get_alloc_displaystate();
trace_console_gfx_new();
s = new_console(ds, GRAPHIC_CONSOLE);
s->hw_update = update;
@@ -1377,9 +1379,9 @@ QemuConsole *graphic_console_init(vga_hw_update_ptr
update,
s->hw_text_update = text_update;
s->hw = opaque;
- ds->surface = qemu_create_displaysurface(640, 480);
-
- register_displaystate(ds);
+ if (!ds->surface) {
+ ds->surface = qemu_create_displaysurface(width, height);
+ }
return s;
}
@@ -1505,6 +1507,10 @@ static CharDriverState *text_console_init(ChardevVC *vc)
s->g_height = height;
chr->opaque = s;
chr->chr_set_echo = text_console_set_echo;
+
+ if (display_state) {
+ text_console_do_init(chr, display_state);
+ }
return chr;
}
@@ -1520,17 +1526,6 @@ void register_vc_handler(VcHandler *handler)
vc_handler = handler;
}
-void text_consoles_set_display(DisplayState *ds)
-{
- int i;
-
- for (i = 0; i < nb_consoles; i++) {
- if (consoles[i]->console_type != GRAPHIC_CONSOLE) {
- text_console_do_init(consoles[i]->chr, ds);
- }
- }
-}
-
void qemu_console_resize(QemuConsole *s, int width, int height)
{
s->g_width = width;
diff --git a/vl.c b/vl.c
index e2c9706..b05c289 100644
--- a/vl.c
+++ b/vl.c
@@ -4328,8 +4328,7 @@ int main(int argc, char **argv, char **envp)
net_check_clients();
- /* just use the first displaystate for the moment */
- ds = get_displaystate();
+ ds = init_displaystate();
/* init local displays */
switch (display_type) {
@@ -4385,9 +4384,6 @@ int main(int argc, char **argv, char **envp)
}
#endif
- /* display setup */
- text_consoles_set_display(ds);
-
if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
exit(1);
}
--
1.7.9.7
- [Qemu-devel] [PATCH v3 00/24] console: console overhaul continued, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 03/24] hw/vmware_vga.c: add tracepoints for mmio reads+writes, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 02/24] hw/vmware_vga.c: fix screen resize bug introduced after console revamp, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 06/24] pixman: render vgafont glyphs into pixman images, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 09/24] console: switch color_table_rgb to pixman_color_t, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 10/24] console: add trace events, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 04/24] hw/vmware_vga.c: various vmware vga fixes., Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 11/24] console: displaystate init revamp,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 13/24] console: give each QemuConsole its own DisplaySurface, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 08/24] console: use pixman for font rendering, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 07/24] console: use pixman for fill+blit, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 15/24] console: zap g_width + g_height, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 05/24] pixman: add qemu_pixman_color(), Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 17/24] console: make DisplayState private to console.c, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 19/24] console: gui timer fixes, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 01/24] exynos4210_fimd.c: fix display resize bug introduced after console revamp, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 21/24] console: add qemu_console_is_*, Gerd Hoffmann, 2013/04/04
- [Qemu-devel] [PATCH 12/24] console: rename vga_hw_*, add QemuConsole param, Gerd Hoffmann, 2013/04/04