doc: Add a section on interface and protocol object versioning
There have been a lot of questions asked lately about versioning of interfaces and protocol objects. This addition to the documentation should clear up some of those questions. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
52de023482
commit
6b8eef962f
|
@ -164,6 +164,67 @@
|
|||
</para>
|
||||
</section>
|
||||
<xi:include href="ProtocolInterfaces.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||
<section id="sect-Protocol-Versioning">
|
||||
<title>Versioning</title>
|
||||
<para>
|
||||
Every interface is versioned and every protocol object implements a
|
||||
particular version of its interface. For global objects, the maximum
|
||||
version supported by the server is advertised with the global and the
|
||||
actual verion of the created protocol object is determined by the
|
||||
version argument passed to wl_registry.bind(). For objects that are
|
||||
not globals, their version is inferred from the object that created
|
||||
them.
|
||||
</para>
|
||||
<para>
|
||||
In order to keep things sane, this has a few implications for
|
||||
interface versions:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
The object creation hierarchy must be a tree. Otherwise,
|
||||
infering object versions from the parent object becomes a much
|
||||
more difficult to properly track.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
When the version of an interface increases, so does the version
|
||||
of its parent (recursively until you get to a global interface)
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
A global interface's version number acts like a counter for all
|
||||
of its child interfaces. Whenever a child interface gets
|
||||
modified, the global parent's interface version number also
|
||||
increases (see above). The child interface then takes on the
|
||||
same version number as the new version of its parent global
|
||||
interface.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>
|
||||
To illustrate the above, consider the wl_compositor interface. It
|
||||
has two children, wl_surface and wl_region. As of wayland version
|
||||
1.2, wl_surface and wl_compositor are both at version 3. If
|
||||
something is added to the wl_region interface, both wl_region and
|
||||
wl_compositor will get bumpped to version 4. If, afterwards,
|
||||
wl_surface is changed, both wl_compositor and wl_surface will be at
|
||||
version 5. In this way the global interface version is used as a
|
||||
sort of "counter" for all of its child interfaces. This makes it
|
||||
very simple to know the version of the child given the version of its
|
||||
parent. The child is at the highest possible interface version that
|
||||
is less than or equal to its parent's version.
|
||||
</para>
|
||||
<para>
|
||||
It is worth noting a particular exception to the above versioning
|
||||
scheme. The wl_display (and, by extension, wl_registry) interface
|
||||
cannot change because it is the core protocol object and its version
|
||||
is never advertised nor is there a mechanism to request a different
|
||||
version.
|
||||
</para>
|
||||
</section>
|
||||
<section id="sect-Protocol-Connect-Time">
|
||||
<title>Connect Time</title>
|
||||
<para>
|
||||
|
|
Loading…
Reference in New Issue
Block a user