Commit 740733bb939963e77dacda0367eb807dea1c4faf

Authored by ths
1 parent 4fdcd8d4

Don't refresh a graphical screen when it isn't displayed, by Herve Poussineau.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2961 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 11 additions and 35 deletions
... ... @@ -153,7 +153,6 @@ int ram_size;
153 153 int pit_min_timer_count = 0;
154 154 int nb_nics;
155 155 NICInfo nd_table[MAX_NICS];
156   -QEMUTimer *gui_timer;
157 156 int vm_running;
158 157 int rtc_utc = 1;
159 158 int cirrus_vga_enabled = 1;
... ... @@ -4481,32 +4480,6 @@ void pcmcia_info(void)
4481 4480 }
4482 4481  
4483 4482 /***********************************************************/
4484   -/* dumb display */
4485   -
4486   -static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
4487   -{
4488   -}
4489   -
4490   -static void dumb_resize(DisplayState *ds, int w, int h)
4491   -{
4492   -}
4493   -
4494   -static void dumb_refresh(DisplayState *ds)
4495   -{
4496   - vga_hw_update();
4497   -}
4498   -
4499   -void dumb_display_init(DisplayState *ds)
4500   -{
4501   - ds->data = NULL;
4502   - ds->linesize = 0;
4503   - ds->depth = 0;
4504   - ds->dpy_update = dumb_update;
4505   - ds->dpy_resize = dumb_resize;
4506   - ds->dpy_refresh = dumb_refresh;
4507   -}
4508   -
4509   -/***********************************************************/
4510 4483 /* I/O handling */
4511 4484  
4512 4485 #define MAX_IO_HANDLERS 64
... ... @@ -6198,8 +6171,9 @@ QEMUMachine *find_machine(const char *name)
6198 6171  
6199 6172 void gui_update(void *opaque)
6200 6173 {
6201   - display_state.dpy_refresh(&display_state);
6202   - qemu_mod_timer(gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock));
  6174 + DisplayState *ds = opaque;
  6175 + ds->dpy_refresh(ds);
  6176 + qemu_mod_timer(ds->gui_timer, GUI_REFRESH_INTERVAL + qemu_get_clock(rt_clock));
6203 6177 }
6204 6178  
6205 6179 struct vm_change_state_entry {
... ... @@ -7899,17 +7873,16 @@ int main(int argc, char **argv)
7899 7873 init_ioports();
7900 7874  
7901 7875 /* terminal init */
  7876 + memset(&display_state, 0, sizeof(display_state));
7902 7877 if (nographic) {
7903   - dumb_display_init(ds);
  7878 + /* nothing to do */
7904 7879 } else if (vnc_display != NULL) {
7905   - vnc_display_init(ds, vnc_display);
  7880 + vnc_display_init(ds, vnc_display);
7906 7881 } else {
7907 7882 #if defined(CONFIG_SDL)
7908 7883 sdl_display_init(ds, full_screen, no_frame);
7909 7884 #elif defined(CONFIG_COCOA)
7910 7885 cocoa_display_init(ds, full_screen);
7911   -#else
7912   - dumb_display_init(ds);
7913 7886 #endif
7914 7887 }
7915 7888  
... ... @@ -7977,8 +7950,10 @@ int main(int argc, char **argv)
7977 7950 }
7978 7951 }
7979 7952  
7980   - gui_timer = qemu_new_timer(rt_clock, gui_update, NULL);
7981   - qemu_mod_timer(gui_timer, qemu_get_clock(rt_clock));
  7953 + if (display_state.dpy_refresh) {
  7954 + display_state.gui_timer = qemu_new_timer(rt_clock, gui_update, &display_state);
  7955 + qemu_mod_timer(display_state.gui_timer, qemu_get_clock(rt_clock));
  7956 + }
7982 7957  
7983 7958 #ifdef CONFIG_GDBSTUB
7984 7959 if (use_gdbstub) {
... ...
... ... @@ -914,6 +914,7 @@ struct DisplayState {
914 914 int width;
915 915 int height;
916 916 void *opaque;
  917 + QEMUTimer *gui_timer;
917 918  
918 919 void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
919 920 void (*dpy_resize)(struct DisplayState *s, int w, int h);
... ...