source: trunk/packages/xen-common/xen-common/tools/ioemu/patches/vnc-cleanup @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

File size: 3.0 KB
Line 
1Index: ioemu/vnc.c
2===================================================================
3--- ioemu.orig/vnc.c    2007-05-03 09:56:31.000000000 +0100
4+++ ioemu/vnc.c 2007-05-03 10:07:55.000000000 +0100
5@@ -143,13 +143,16 @@
6 static void vnc_dpy_update(DisplayState *ds, int x, int y, int w, int h)
7 {
8     VncState *vs = ds->opaque;
9-    int i;
10+    uint64_t mask;
11 
12     h += y;
13+    if (w != 1024)
14+       mask = ((1ULL << (w / 16)) - 1) << (x / 16);
15+    else
16+       mask = ~(0ULL);
17 
18     for (; y < h; y++)
19-       for (i = 0; i < w; i += 16)
20-           vnc_set_bit(vs->dirty_row[y], (x + i) / 16);
21+       vs->dirty_row[y] |= mask;
22 }
23 
24 static void vnc_framebuffer_update(VncState *vs, int x, int y, int w, int h,
25@@ -373,6 +376,7 @@
26 static void vnc_update_client(void *opaque)
27 {
28     VncState *vs = opaque;
29+    int64_t now = qemu_get_clock(rt_clock);
30 
31     if (vs->need_update && vs->csock != -1) {
32        int y;
33@@ -383,6 +387,8 @@
34        int saved_offset;
35        int has_dirty = 0;
36 
37+       qemu_mod_timer(vs->timer, now + VNC_REFRESH_INTERVAL);
38+
39         vnc_set_bits(width_mask, (vs->width / 16), VNC_DIRTY_WORDS);
40 
41        /* Walk through the dirty map and eliminate tiles that
42@@ -390,7 +396,7 @@
43        row = vs->ds->data;
44        old_row = vs->old_data;
45 
46-       for (y = 0; y < vs->height; y++) {
47+       for (y = 0; y < vs->ds->height; y++) {
48            if (vnc_and_bits(vs->dirty_row[y], width_mask, VNC_DIRTY_WORDS)) {
49                int x;
50                char *ptr, *old_ptr;
51@@ -415,10 +421,8 @@
52            old_row += vs->ds->linesize;
53        }
54 
55-       if (!has_dirty) {
56-           qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock) + VNC_REFRESH_INTERVAL);
57+       if (!has_dirty)
58            return;
59-       }
60 
61        /* Count rectangles */
62        n_rectangles = 0;
63@@ -454,17 +458,13 @@
64        vs->output.buffer[saved_offset] = (n_rectangles >> 8) & 0xFF;
65        vs->output.buffer[saved_offset + 1] = n_rectangles & 0xFF;
66        vnc_flush(vs);
67-
68     }
69-    qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock) + VNC_REFRESH_INTERVAL);
70 }
71 
72 static void vnc_timer_init(VncState *vs)
73 {
74-    if (vs->timer == NULL) {
75+    if (vs->timer == NULL)
76        vs->timer = qemu_new_timer(rt_clock, vnc_update_client, vs);
77-       qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock));
78-    }
79 }
80 
81 static void vnc_dpy_refresh(DisplayState *ds)
82@@ -736,6 +736,8 @@
83            old_row += vs->ds->linesize;
84        }
85     }
86+
87+    qemu_mod_timer(vs->timer, qemu_get_clock(rt_clock));
88 }
89 
90 static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
91Index: ioemu/vl.c
92===================================================================
93--- ioemu.orig/vl.c     2007-05-03 10:07:54.000000000 +0100
94+++ ioemu/vl.c  2007-05-03 10:07:55.000000000 +0100
95@@ -5195,10 +5195,10 @@
96         /* XXX: better handling of removal */
97         for(ioh = first_io_handler; ioh != NULL; ioh = ioh_next) {
98             ioh_next = ioh->next;
99-            if (FD_ISSET(ioh->fd, &rfds)) {
100+            if (ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
101                 ioh->fd_read(ioh->opaque);
102             }
103-            if (FD_ISSET(ioh->fd, &wfds)) {
104+            if (ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
105                 ioh->fd_write(ioh->opaque);
106             }
107         }
Note: See TracBrowser for help on using the repository browser.