Add a bit of scheduling to updates; update every 30 ms instead of waiting
for more events. Smooths out window moving. Interval needs to be configurable probably.
This commit is contained in:
parent
37280d7888
commit
9e767b89cf
|
@ -1,3 +1,10 @@
|
|||
2003-11-09 Keith Packard <keithp@keithp.com>
|
||||
|
||||
* xcompmgr.c: (time_in_millis), (main):
|
||||
Add a bit of scheduling to updates; update every 30 ms
|
||||
instead of waiting for more events. Smooths out window moving.
|
||||
Interval needs to be configurable probably.
|
||||
|
||||
2003-11-09 Keith Packard <keithp@keithp.com>
|
||||
|
||||
* xcompmgr.c: (root_tile):
|
||||
|
|
31
xcompmgr.c
31
xcompmgr.c
|
@ -732,6 +732,17 @@ expose_root (Display *dpy, Window root, XRectangle *rects, int nrects)
|
|||
add_damage (dpy, region);
|
||||
}
|
||||
|
||||
int
|
||||
time_in_millis ()
|
||||
{
|
||||
struct timeval tp;
|
||||
|
||||
gettimeofday (&tp, 0);
|
||||
return(tp.tv_sec * 1000) + (tp.tv_usec / 1000);
|
||||
}
|
||||
|
||||
#define INTERVAL 30
|
||||
|
||||
main ()
|
||||
{
|
||||
XEvent ev;
|
||||
|
@ -751,6 +762,9 @@ main ()
|
|||
int n_expose = 0;
|
||||
struct pollfd ufd;
|
||||
int n;
|
||||
int last_update;
|
||||
int now;
|
||||
int timeout;
|
||||
|
||||
dpy = XOpenDisplay (0);
|
||||
if (!dpy)
|
||||
|
@ -808,6 +822,7 @@ main ()
|
|||
add_win (dpy, children[i], i ? children[i-1] : None);
|
||||
XFree (children);
|
||||
XUngrabServer (dpy);
|
||||
last_update = time_in_millis ();
|
||||
for (;;)
|
||||
{
|
||||
/* dump_wins (); */
|
||||
|
@ -873,11 +888,17 @@ main ()
|
|||
break;
|
||||
}
|
||||
} while (XEventsQueued (dpy, QueuedAfterReading));
|
||||
ufd.fd = ConnectionNumber (dpy);
|
||||
ufd.events = POLLIN;
|
||||
n = poll (&ufd, 1, 30);
|
||||
if (n > 0 && (ufd.revents & POLLIN) && XEventsQueued (dpy, QueuedAfterReading))
|
||||
continue;
|
||||
now = time_in_millis ();
|
||||
timeout = INTERVAL - (now - last_update);
|
||||
if (timeout > 0)
|
||||
{
|
||||
ufd.fd = ConnectionNumber (dpy);
|
||||
ufd.events = POLLIN;
|
||||
n = poll (&ufd, 1, timeout);
|
||||
if (n > 0 && (ufd.revents & POLLIN) && XEventsQueued (dpy, QueuedAfterReading))
|
||||
continue;
|
||||
}
|
||||
last_update = time_in_millis();
|
||||
if (allDamage)
|
||||
{
|
||||
paint_all (dpy, allDamage);
|
||||
|
|
Loading…
Reference in New Issue