[RFC] [PATCH v2 1/12] [resourceproto] Added protocol description and records for XRes v1.2

Daniel Stone daniel at fooishbar.org
Fri Dec 31 08:19:27 PST 2010


Hi,
Mainly nitpicks, I'm afraid ...

On Fri, Dec 31, 2010 at 03:32:39PM +0200, Erkki Seppälä wrote:
> +#define X_XResClientXidMask      0x01
> +#define X_XResLocalClientPidMask 0x02

Maybe make these XID and PID?

> +typedef struct _XResClientIdSpec {
> +   CARD32  client B32;
> +   CARD32  mask B32;
> +} xXResClientIdSpec;
> +#define sz_xXResClientIdSpec 8
> +
> +typedef struct _XResClientIdValue {
> +   xXResClientIdSpec spec;
> +   CARD32  length B32;
> +   // followed by length CARD32s
> +} xXResClientIdValue;
> +#define sz_xResClientIdValue (sz_xXResClientIdSpec + 4)

Please don't use C++ comments (// instead of /* */).

> +typedef struct _XResQueryClientIds {
> +   CARD8   reqType;
> +   CARD8   XResReqType;
> +   CARD16  length B16;
> +   CARD32  numSpecs B32;
> +   // followed by numSpecs times XResClientIdSpec
> +} xXResQueryClientIdsReq;
> +#define sz_xXResQueryClientIdsReq 8
> 
> +typedef struct {
> +   CARD8   type;
> +   CARD8   pad1;
> +   CARD16  sequenceNumber B16;
> +   CARD32  length B32;
> +   CARD32  numIds B32;
> +   CARD32  pad2 B32;
> +   CARD32  pad3 B32;
> +   CARD32  pad4 B32;
> +   CARD32  pad5 B32;
> +   CARD32  pad6 B32;
> +   // followed by numIds times XResClientIdValue
> +} xXResQueryClientIdsReply;
> +#define sz_xXResQueryClientIdsReply  32

I think the nested approach (reply contains n * XResClientIdValue, which
contains m * CARD32) makes it more difficult to write an XCB binding for
this, though maybe that's not the case these days.

> +typedef struct _XResResourceSizeSpec {
> +   xXResResourceIdSpec spec;
> +   CARD32  bytes B32;
> +   CARD32  refCount B32;
> +   CARD32  useCount B32;
> +} xXResResourceSizeSpec;
> +#define sz_xXResResourceSizeSpec (sz_xXResResourceIdSpec + 12)
> +
> +typedef struct _XResResourceSizeValue {
> +   xXResResourceSizeSpec size;
> +   CARD32  numCrossReferences B32;
> +   // followed by numCrossReferences times XResResourceSizeSpec
> +} xXResResourceSizeValue;
> +#define sz_xXResResourceSizeValue (sz_xXResResourceSizeSpec + 4)
> +
> +typedef struct {
> +   CARD8   type;
> +   CARD8   pad1;
> +   CARD16  sequenceNumber B16;
> +   CARD32  length B32;
> +   CARD32  numSizes B32;
> +   CARD32  pad2 B32;
> +   CARD32  pad3 B32;
> +   CARD32  pad4 B32;
> +   CARD32  pad5 B32;
> +   CARD32  pad6 B32;
> +   // followed by numSizes times XResResourceSizeValue
> +} xXResQueryResourceBytesReply;
> +#define sz_xXResQueryResourceBytesReply  32

And same here.

> +ref_count
> +    Number of total users of the resource. Typically the reference
> +    count is 1 but for pixmaps the count may be larger.

Only for pixmaps?

> +This request is used to get the pixmap usage of some client. The
> +returned number is a sum of memory usage of each pixmap that can be
> +attributed to the given client. Ideally the server goes through all
> +pixmaps and divides each pixmap size by the pixmap reference count to
> +get a pixmap reference size. The reference size is then added to the
> +returned sum if the client happens to be referencing that pixmap. In
> +practice some pixmap references may be missed, because it would be too
> +difficult to keep track of all pixmap references. However, the server
> +will check the most important client resources that are using pixmaps
> +and tries to estimate the pixmap usage as well as is possible.

Most of the last half could just be written as 'The server need only
make a best-effort attempt to calculate resource source, so actual
resource size may differ from that reported in practice.'

> +The CLIENTIDSPEC of request and CLIENTIDSPEC of CLIENTIDVALUE in reply
> +match each other. [...]
> +
> +However, the CLIENTIDSPEC of returned CLIENTIDVALUE never contains any
> +wildcards. If the request used a wildcard to specify all clients in a
> +single CLIENTIDSPEC, then the reply has expanded the wildcard and
> +returns separate CLIENTIDVALUE records for each client. [...]

These sentences are somewhat contradictory; maybe add an 'In general',
or 'Usually', or such to the first paragraph, so it's clear that there
is an exception.

> +client
> +    An ID of a client can be given to limit the query to resources of
> +    that client. Just like in CLIENTIDSPEC, any resource ID can be
> +    given to identify a client and None can be used if the query
> +    shouldn't be limited to a specific client. Note that in some cases
> +    this field is redundant because resource_specs already fully
> +    determines which resources are selected.

What happens if a CLIENTIDSPEC specifies a client different to the owner
of a fully-specified resource in resource_specs? Is that resource just
ignored and not reported, or does an error result?

Cheers,
Daniel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.x.org/archives/xorg-devel/attachments/20101231/6ab7571b/attachment-0001.pgp>


More information about the xorg-devel mailing list