As Keith says, we (in this case, not Keith, but my co-authors and myself) designed XSync with the network in mind, and to avoid both network and process scheduling latencies.
The model is that you can have a whole set of requests queued (and transmitted to the server), blocked on a counter (the basic abstraction). Basically, a request says: block this connection until the counter gets to a specified value. Docs are in the tree.... So when the counter (in this case, a vblank counter) increments, the X server gets woken up, the X schedular sees that there was a client blocked on that counter, and it can immediately execute (one or more) request(s), already present in the input buffer of the X server. You can also get informed the counter incremented by an event, but that is slow: the event mechanism is mostly to (as in TCP) serve as a clocking mechanism, so your application can know to get the next (set) of requests to the X server for the next counter increment. In this way, we can avoid network round trip times (and multi-process scheduling latencies) and achieve very fine synchronization, either between X clients or with external events (real time, or vertical sync). All this was fully tested/debugged in the early '90's, when the UNIX desktop died; it has been the lack of driver support that has held this back. - Jim -- Jim Gettys Cambridge Research Laboratory HP Labs, Hewlett-Packard Company [EMAIL PROTECTED] _______________________________________________ Xpert mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/xpert