XGE protocol spec
Jim Gettys
jg at laptop.org
Fri Dec 5 13:22:40 PST 2008
A couple comments below.
On Mon, 2008-12-01 at 16:15 +1000, Peter Hutterer wrote:
> Below is the protocol spec for the X Generic Event Extension (XGE). It'll be
> shipped with 1.6 even though there won't be any consumers for it yet.
> (This is the current proto/xextproto/geproto.txt file as valid in my tree. Will
> be pushed pending no objections.)
>
> Cheers,
> Peter
>
> X Generic Event Extension
> Peter Hutterer
> peter.hutterer at who-t.net
>
>
> 1. Introduction
> 2. Extension Initialization
> 3. Extension Events
> 4. Notes
>
> _____________________________________________________________________________
> 1. Introduction
>
> X was designed to provide 64 event opcodes for all extensions. These events
> are limited to 32 bytes.
>
> The Generic Event Extension is a template for extensions to re-use a single
> event opcode. GE only provide headers and the most basic functionality,
> leaving the extensions to interpret the events in their specific context.
>
> GenericEvents may be longer than 32 bytes. If so, the number of 4 byte units
> following the initial 32 bytes must be specified in the length field of the
> event.
1.1 History and Rationale
The original rationale for X11's fixed event size was that certain
platforms (notably VAX/VMS) had very poor malloc and free C library
implementations with terrible performance (both CPU and memory usage).
Malloc's memory usage with the then common Berkeley 4.2 allocator tended
to be profligate in space. By using a single event size both memory
fragmentation and performance problems were avoided. Retaining this
restriction on modern systems would continue to complicate X's evolution
and implementation unnecessarily.
> _____________________________________________________________________________
> 2. Extension Initialization
>
> The name of this extension is "Generic Event Extension"
>
> ┌───
> GEQueryVersion
> client-major-version: CARD16
> client-minor-version: CARD16
> ▶
> major-version: CARD16
> minor-version: CARD16
> └───
>
> The client sends the highest supported version to the server
> and the server sends the highest version it supports, but no
> higher than the requested version. Major versions changes can
> introduce incompatibilities in existing functionality, minor
> version changes introduce only backward compatible changes.
> It is the clients responsibility to ensure that the server
> supports a version which is compatible with its expectations.
>
>
> As of version 1.0, no other requests are provided by this extension.
> _____________________________________________________________________________
> 3. Extension Events
>
> GE defines a single event, to be used by all extensions. The event's structure
> is similar to a request.
>
> ┌───
> RRScreenChangeNotify
> type: BYTE; always GenericEvent
> extension: CARD8; extension offset
> sequenceNumber: CARD16 low 16 bits of request seq. number
> length: CARD32 time screen was changed
> evtype: CARD16 event type
> └───
>
Do you really want to leave this only 16 bit aligned? Would two bytes
of padding be wise here? I suspect we do....
> The field 'extension' is to be set to the major opcode of the
> extension. The 'evtype' field is the actual opcode of the event.
> The length field specifies the number of 4-byte blocks after the
> initial 32 bytes.
>
> _____________________________________________________________________________
> 4. Notes
>
> Although the wire event is of arbitrary length, the actual size of an XEvent
> is restricted to sizeof(XEvent) [96 bytes, see Xlib.h]. If an extension
> converts a wire event to an XEvent > 96 bytes, it will overwrite the space
> acllocated for the event. See struct _XSQEvent in Xlibint.h for details.
>
> Extensions need to malloc additional data and fill the XEvent structure with
> pointers to the malloc'd data. The client then needs to free the data, only
> the XEvent structure will be released by Xlib.
>
> The server must not send GenericEvents longer than 32 bytes until it has
> verified that the client is able to interpret these events. If a long event is
> sent to a client unable to process GenericEvents, future interpretation of
> replies and events by this client will fail.
>
> _______________________________________________
> xorg mailing list
> xorg at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xorg
--
Jim Gettys <jg at laptop.org>
One Laptop Per Child
More information about the xorg
mailing list