This lets us boot strap the client side state cache. This commit also adds the first user
of this feature, an output object that represents the current output. Very simple
at this point, but will grow to something more like RandR 1.2.
The wayland-system-compositor is the top-level compositor. X sessions
or nested Wayland sessions will run as clients of the system compositor.
The system compositor is licensed under the GPL.
The kernel currently automatically redirects
output to the kernel framebuffer when switching
VTs away from wayland. It doesn't restore
output back to wayland's fb when coming back
to the VT. This patch works around that issue.
This lets the compositor directly provide the implementation of the RMI
objects for the surface object and a new compositor object. We avoid the
manual forwarding of requests into the compositor and the clumsy compositor
interface struct.
Instead of having the input driver push the events into the core server,
only to have the server call back out to the compositor hooks, the driver now
just calls the compositor directly. The input drivers are always dependent on
the type of compositor anyway so there was no point in passing the events
through the server. Now the server is only involved when it's time to actually
send the events to the clients.
This implements the commit/ack/frame protocol that let clients batch up
a series of requests and then commit them atomically using the commit request.
The commit requests generats two following events: the acknowledge event,
which lets the client know that the server has received the request and
which frame the rendering has been scheduled for. At this point the client
can start rendering the next frame or free up temporary buffers. Then when
the compositor finally makes the newly composited frame visible on screen
the server sends a frame event, which contains the number of the frame that
was presented and the time when it happened.
The window and flower clients have been updated to use these two events in
their main loops and everything now updates per frame. The EGL compositor
repaint loop has been tweaked to delay the compositing of the screen to
10ms after last swapbuffer completed so as to allow processing as many
requests as possible before blocking on the next vertical retrace.