Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

# dmxstat.c File Reference

`#include "dmx.h"`
`#include "dmxstat.h"`
`#include "dmxlog.h"`
`#include "Xos.h"`

## Data Structures

struct | _DMXStatAvg
struct | _DMXStatInfo

## Typedefs

typedef _DMXStatAvg | DMXStatAvg

## Functions

void | dmxStatActivate (const char *interval, const char *displays)
DMXStatInfo * | dmxStatAlloc (void)
void | dmxStatFree (DMXStatInfo *pt)
void | dmxStatSync (DMXScreenInfo *dmxScreen, struct timeval *stop, struct timeval *start, unsigned long pending)
void | dmxStatInit (void)

## Variables

int | dmxStatInterval

## Detailed Description

The DMX server code is written to call dmxSync() whenever an XSync() might be necessary. However, since XSync() requires a two way communication with the other X server, eliminating unnecessary XSync() calls is a key performance optimization. Support for this optimization is provided in #dmxsync.c. This file provides routines that evaluate this optimization by counting the number of XSync() calls and monitoring their latency. This functionality can be turned on using the -stat command-line parameter.

## Typedef Documentation

typedef struct _DMXStatAvg DMXStatAvg

| Used to compute a running average of value.

## Function Documentation

void dmxStatActivate | ( | const char * | interval,
|  | const char * | displays
| ) |

| Turn on XSync statistic gathering and printing. Print every interval seconds, with lines for the first displays. If interval is NULL, 1 will be used. If displays is NULL, 0 will be used (meaning a line for every display will be printed). Note that this function takes string arguments because it will usually be called from ddxProcessArgument in #dmxinit.c.

DMXStatInfo* dmxStatAlloc | ( | void |  | ) |

| Allocate a DMXStatInfo structure.

void dmxStatFree | ( | DMXStatInfo * | pt | ) |

| Free the memory used by a DMXStatInfo structure.

void dmxStatInit | ( | void |  | ) |

| Try to initialize the statistic gathering and printing routines. Initialization only takes place if dmxStatActivate has already been called. We don't need the same generation protection that we used in dmxSyncInit because our timer is always on a queue -- hence, server generation will always free it.

void dmxStatSync | ( | DMXScreenInfo * | dmxScreen,
|  | struct timeval * | stop,
|  | struct timeval * | start,
|  | unsigned long | pending
| ) |

| Note that a XSync() was just done on dmxScreen with the start and stop times (from gettimeofday()) and the number of pending-but-not-yet-processed XSync requests. This routine is called from #dmxDoSync in #dmxsync.c

## Variable Documentation

int dmxStatInterval

| Only for dmxstat.c and dmxsync.c