x11perf.h revision c37a63b8
1264fa531Smrg/* $Xorg: x11perf.h,v 1.3 2000/08/17 19:54:10 cpqbld Exp $ */
2264fa531Smrg/*****************************************************************************
3264fa531SmrgCopyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
4264fa531Smrg
5264fa531Smrg                        All Rights Reserved
6264fa531Smrg
7264fa531SmrgPermission to use, copy, modify, and distribute this software and its
8264fa531Smrgdocumentation for any purpose and without fee is hereby granted,
9264fa531Smrgprovided that the above copyright notice appear in all copies and that
10264fa531Smrgboth that copyright notice and this permission notice appear in
11264fa531Smrgsupporting documentation, and that the name of Digital not be
12264fa531Smrgused in advertising or publicity pertaining to distribution of the
13264fa531Smrgsoftware without specific, written prior permission.
14264fa531Smrg
15264fa531SmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
16264fa531SmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
17264fa531SmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
18264fa531SmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
19264fa531SmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
20264fa531SmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
21264fa531SmrgSOFTWARE.
22264fa531Smrg
23264fa531Smrg******************************************************************************/
24264fa531Smrg/* $XFree86: xc/programs/x11perf/x11perf.h,v 3.4 2001/07/25 15:05:16 dawes Exp $ */
25264fa531Smrg
26264fa531Smrg#if HAVE_CONFIG_H
27264fa531Smrg#include "config.h"
28264fa531Smrg#endif
29264fa531Smrg
30264fa531Smrg#ifndef VMS
31264fa531Smrg#include <X11/Xlib.h>
32264fa531Smrg#include <stdlib.h>
33264fa531Smrg#include <X11/Xutil.h>
34264fa531Smrg#else
35264fa531Smrg#include <decw$include/Xlib.h>
36264fa531Smrg#include <decw$include/Xutil.h>
37264fa531Smrg#endif
38264fa531Smrg#if defined(XlibSpecificationRelease) && XlibSpecificationRelease >= 5
39264fa531Smrg#include <X11/Xfuncs.h>
40264fa531Smrg#endif
41264fa531Smrg#include <stddef.h>
42c37a63b8Smrg#include <X11/extensions/Xrender.h>
43264fa531Smrg
44264fa531Smrg#define POLY	     1000       /* # (small) items in poly calls	*/
45264fa531Smrg#define MAXROWS	       40       /* Max rows of items in poly calls      */
46264fa531Smrg#define MAXCOLS	       25       /* Max columns of items			*/
47264fa531Smrg
48264fa531Smrg#define WIDTH         600	/* Size of large window to work within  */
49264fa531Smrg#define HEIGHT        600
50264fa531Smrg
51264fa531Smrg#define CHILDSIZE       8       /* Size of children on windowing tests  */
52264fa531Smrg#define CHILDSPACE      4       /* Space between children		*/
53264fa531Smrg
54264fa531Smrg#define BigTile	((char *)2)		/* Big tile/stipple */
55264fa531Smrg#define OddTile	((char *)1)		/* Odd sized tile/stipple */
56264fa531Smrg
57c37a63b8Smrg#define PictStandardNative    5
58264fa531Smrg
59264fa531Smrgtypedef unsigned char Version;
60264fa531Smrg
61264fa531Smrg#define VERSION1_2  ((Version)(1 << 0))
62264fa531Smrg#define VERSION1_3  ((Version)(1 << 1))
63264fa531Smrg#define VERSION1_4  ((Version)(1 << 2))
64264fa531Smrg#define VERSION1_5  ((Version)(1 << 3))
65c37a63b8Smrg#define VERSION1_6  ((Version)(1 << 4))
66264fa531Smrg#define V1_2ONLY VERSION1_2
67c37a63b8Smrg#define V1_2FEATURE	(VERSION1_2 | VERSION1_3 | VERSION1_4 | VERSION1_5 | VERSION1_6)
68c37a63b8Smrg#define V1_3FEATURE	(VERSION1_3 | VERSION1_4 | VERSION1_5 | VERSION1_6)
69c37a63b8Smrg#define V1_4FEATURE	(VERSION1_4 | VERSION1_5 | VERSION1_6)
70c37a63b8Smrg#define V1_5FEATURE     (VERSION1_5 | VERSION1_6)
71c37a63b8Smrg#define V1_6FEATURE     (VERSION1_6)
72264fa531Smrg
73264fa531Smrgtypedef struct _Parms {
74264fa531Smrg    /* Required fields */
75264fa531Smrg    int  objects;       /* Number of objects to process in one X call	    */
76264fa531Smrg
77264fa531Smrg    /* Optional fields.  (Wouldn't object-oriented programming be nice ?)   */
78264fa531Smrg    int  special;       /* Usually size of objects to paint		    */
79264fa531Smrg    char *font, *bfont;
80264fa531Smrg    int  fillStyle;     /* Solid, transparent stipple, opaque stipple, tile */
81264fa531Smrg} ParmRec, *Parms;
82264fa531Smrg
83264fa531Smrgtypedef struct _XParms {
84264fa531Smrg    Display	    *d;
85264fa531Smrg    Window	    w;
86264fa531Smrg    Pixmap          p;
87264fa531Smrg    GC		    fggc;
88264fa531Smrg    GC		    bggc;
89264fa531Smrg    GC		    ddfggc;
90264fa531Smrg    GC		    ddbggc;
91c37a63b8Smrg    Picture	    w_picture;
92c37a63b8Smrg    Picture	    p_picture;
93264fa531Smrg    unsigned long   foreground;
94264fa531Smrg    unsigned long   background;
95264fa531Smrg    unsigned long   ddbackground;
96264fa531Smrg    XVisualInfo     vinfo;
97264fa531Smrg    Bool	    pack;
98264fa531Smrg    Version	    version;
99264fa531Smrg    Bool	    save_under;
100264fa531Smrg    int		    backing_store;
101264fa531Smrg    unsigned long   planemask;
102c37a63b8Smrg    int		    func;
103c37a63b8Smrg    int		    format;
104264fa531Smrg    Colormap	    cmap;
105264fa531Smrg} XParmRec, *XParms;
106264fa531Smrg
107264fa531Smrgtypedef int (*InitProc)(XParms xp, Parms p, int reps);
108264fa531Smrgtypedef void (*Proc)(XParms xp, Parms p, int reps);
109264fa531Smrgtypedef void (*CleanupProc)(XParms xp, Parms p);
110264fa531Smrg
111264fa531Smrgtypedef enum {
112264fa531Smrg    WINDOW,     /* Windowing test, rop, planemask have no affect	*/
113264fa531Smrg    ROP,	/* Graphics test, rop, planemask has some affect	*/
114264fa531Smrg    PLANEMASK,  /* Graphics test, rop no affect, planemask some affect  */
115c37a63b8Smrg    NONROP,     /* Graphics or overhead test, rop has no affect		*/
116c37a63b8Smrg    COMP        /* Graphics test, render op                             */
117264fa531Smrg} TestType;
118264fa531Smrg
119264fa531Smrgtypedef struct _Test {
120264fa531Smrg    char	*option;    /* Name to use in prompt line		    */
121264fa531Smrg    char	*label;     /* Fuller description of test		    */
122264fa531Smrg    char	*label14;   /* Labels that are different in Version 1.4     */
123264fa531Smrg    InitProc    init;       /* Initialization procedure			    */
124264fa531Smrg    Proc	proc;       /* Timed benchmark procedure		    */
125264fa531Smrg    CleanupProc	passCleanup;/* Cleanup between repetitions of same test     */
126264fa531Smrg    CleanupProc	cleanup;    /* Cleanup after test			    */
127264fa531Smrg    Version     versions;   /* Test in 1.2 only, 1.3 only, or both	    */
128264fa531Smrg    TestType    testType;   /* Windowing, graphics rop, graphics non-rop    */
129264fa531Smrg    int		clips;      /* Number of obscuring windows to force clipping*/
130264fa531Smrg    ParmRec     parms;      /* Parameters passed to test procedures	    */
131264fa531Smrg} Test;
132264fa531Smrg
133264fa531Smrgextern void NullProc(XParms xp, Parms p);
134264fa531Smrgextern int NullInitProc(XParms xp, Parms p, int reps);
135264fa531Smrg
136264fa531Smrgextern Test test[];
137264fa531Smrg
138264fa531Smrgextern int abortTest;
139264fa531Smrg
140264fa531Smrgextern void AbortTest (void);
141264fa531Smrg
142264fa531Smrg#define CheckAbort()  if (abortTest) AbortTest ()
143264fa531Smrg#define ForEachTest(x) for (x = 0; test[x].option != NULL; x++)
144264fa531Smrg
145264fa531Smrg
146264fa531Smrg/* do_arcs.c */
147264fa531Smrgextern int InitCircles ( XParms xp, Parms p, int reps );
148264fa531Smrgextern int InitPartCircles ( XParms xp, Parms p, int reps );
149264fa531Smrgextern int InitChordPartCircles ( XParms xp, Parms p, int reps );
150264fa531Smrgextern int InitSlicePartCircles ( XParms xp, Parms p, int reps );
151264fa531Smrgextern int InitWideCircles ( XParms xp, Parms p, int reps );
152264fa531Smrgextern int InitPartWideCircles ( XParms xp, Parms p, int reps );
153264fa531Smrgextern int InitDashedCircles ( XParms xp, Parms p, int reps );
154264fa531Smrgextern int InitWideDashedCircles ( XParms xp, Parms p, int reps );
155264fa531Smrgextern int InitDoubleDashedCircles ( XParms xp, Parms p, int reps );
156264fa531Smrgextern int InitWideDoubleDashedCircles ( XParms xp, Parms p, int reps );
157264fa531Smrgextern int InitEllipses ( XParms xp, Parms p, int reps );
158264fa531Smrgextern int InitPartEllipses ( XParms xp, Parms p, int reps );
159264fa531Smrgextern int InitChordPartEllipses ( XParms xp, Parms p, int reps );
160264fa531Smrgextern int InitSlicePartEllipses ( XParms xp, Parms p, int reps );
161264fa531Smrgextern int InitWideEllipses ( XParms xp, Parms p, int reps );
162264fa531Smrgextern int InitPartWideEllipses ( XParms xp, Parms p, int reps );
163264fa531Smrgextern int InitDashedEllipses ( XParms xp, Parms p, int reps );
164264fa531Smrgextern int InitWideDashedEllipses ( XParms xp, Parms p, int reps );
165264fa531Smrgextern int InitDoubleDashedEllipses ( XParms xp, Parms p, int reps );
166264fa531Smrgextern int InitWideDoubleDashedEllipses ( XParms xp, Parms p, int reps );
167264fa531Smrgextern void DoArcs ( XParms xp, Parms p, int reps );
168264fa531Smrgextern void DoFilledArcs ( XParms xp, Parms p, int reps );
169264fa531Smrgextern void EndArcs ( XParms xp, Parms p );
170264fa531Smrg
171264fa531Smrg/* do_blt.c */
172264fa531Smrgextern int InitScroll ( XParms xp, Parms p, int reps );
173264fa531Smrgextern void DoScroll ( XParms xp, Parms p, int reps );
174264fa531Smrgextern void MidScroll ( XParms xp, Parms p );
175264fa531Smrgextern void EndScroll ( XParms xp, Parms p );
176264fa531Smrgextern int InitCopyWin ( XParms xp, Parms p, int reps );
177264fa531Smrgextern int InitCopyPix ( XParms xp, Parms p, int reps );
178264fa531Smrgextern int InitGetImage ( XParms xp, Parms p, int reps );
179264fa531Smrgextern int InitPutImage ( XParms xp, Parms p, int reps );
180264fa531Smrgextern void DoCopyWinWin ( XParms xp, Parms p, int reps );
181264fa531Smrgextern void DoCopyPixWin ( XParms xp, Parms p, int reps );
182264fa531Smrgextern void DoCopyWinPix ( XParms xp, Parms p, int reps );
183264fa531Smrgextern void DoCopyPixPix ( XParms xp, Parms p, int reps );
184264fa531Smrgextern void DoGetImage ( XParms xp, Parms p, int reps );
185264fa531Smrgextern void DoPutImage ( XParms xp, Parms p, int reps );
186264fa531Smrg#ifdef MITSHM
187264fa531Smrgextern int InitShmPutImage ( XParms xp, Parms p, int reps );
188264fa531Smrgextern void DoShmPutImage ( XParms xp, Parms p, int reps );
189264fa531Smrgextern void EndShmPutImage ( XParms xp, Parms p );
190264fa531Smrg#endif
191264fa531Smrgextern void MidCopyPix ( XParms xp, Parms p );
192264fa531Smrgextern void EndCopyWin ( XParms xp, Parms p );
193264fa531Smrgextern void EndCopyPix ( XParms xp, Parms p );
194264fa531Smrgextern void EndGetImage ( XParms xp, Parms p );
195264fa531Smrgextern int InitCopyPlane ( XParms xp, Parms p, int reps );
196264fa531Smrgextern void DoCopyPlane ( XParms xp, Parms p, int reps );
197264fa531Smrg
198c37a63b8Smrgint
199c37a63b8SmrgInitCompositeWin(XParms xp, Parms p, int reps);
200c37a63b8Smrg
201c37a63b8Smrgvoid
202c37a63b8SmrgEndCompositeWin (XParms xp, Parms p);
203c37a63b8Smrg
204c37a63b8Smrgvoid
205c37a63b8SmrgDoCompositeWinWin (XParms xp, Parms p, int reps);
206c37a63b8Smrg
207c37a63b8Smrgint
208c37a63b8SmrgInitCompositePix(XParms xp, Parms p, int reps);
209c37a63b8Smrg
210c37a63b8Smrgvoid
211c37a63b8SmrgEndCompositePix (XParms xp, Parms p);
212c37a63b8Smrg
213c37a63b8Smrgvoid
214c37a63b8SmrgDoCompositePixWin (XParms xp, Parms p, int reps);
215c37a63b8Smrg
216264fa531Smrg/* do_complex.c */
217264fa531Smrgextern int InitComplexPoly ( XParms xp, Parms p, int reps );
218264fa531Smrgextern void DoComplexPoly ( XParms xp, Parms p, int reps );
219264fa531Smrgextern void EndComplexPoly ( XParms xp, Parms p );
220264fa531Smrgextern int InitGeneralPoly ( XParms xp, Parms p, int reps );
221264fa531Smrgextern void DoGeneralPoly ( XParms xp, Parms p, int reps );
222264fa531Smrg
223264fa531Smrg/* do_dots.c */
224264fa531Smrgextern int InitDots ( XParms xp, Parms p, int reps );
225264fa531Smrgextern void DoDots ( XParms xp, Parms p, int reps );
226264fa531Smrgextern void EndDots ( XParms xp, Parms p );
227264fa531Smrg
228264fa531Smrg/* do_lines.c */
229264fa531Smrgextern int InitLines ( XParms xp, Parms p, int reps );
230264fa531Smrgextern int InitWideLines ( XParms xp, Parms p, int reps );
231264fa531Smrgextern int InitDashedLines ( XParms xp, Parms p, int reps );
232264fa531Smrgextern int InitWideDashedLines ( XParms xp, Parms p, int reps );
233264fa531Smrgextern int InitDoubleDashedLines ( XParms xp, Parms p, int reps );
234264fa531Smrgextern int InitWideDoubleDashedLines ( XParms xp, Parms p, int reps );
235264fa531Smrgextern void DoLines ( XParms xp, Parms p, int reps );
236264fa531Smrgextern void EndLines ( XParms xp, Parms p );
237264fa531Smrg
238264fa531Smrg/* do_movewin.c */
239264fa531Smrgextern int InitMoveWindows ( XParms xp, Parms p, int reps );
240264fa531Smrgextern void DoMoveWindows ( XParms xp, Parms p, int reps );
241264fa531Smrgextern void EndMoveWindows ( XParms xp, Parms p );
242264fa531Smrgextern void DoResizeWindows ( XParms xp, Parms p, int reps );
243264fa531Smrgextern int InitCircWindows ( XParms xp, Parms p, int reps );
244264fa531Smrgextern void DoCircWindows ( XParms xp, Parms p, int reps );
245264fa531Smrgextern void EndCircWindows ( XParms xp, Parms p );
246264fa531Smrgextern int InitMoveTree ( XParms xp, Parms p, int reps );
247264fa531Smrgextern void DoMoveTree ( XParms xp, Parms p, int reps );
248264fa531Smrgextern void EndMoveTree ( XParms xp, Parms p );
249264fa531Smrg
250264fa531Smrg/* do_rects.c */
251264fa531Smrgextern int InitRectangles ( XParms xp, Parms p, int reps );
252264fa531Smrgextern void DoRectangles ( XParms xp, Parms p, int reps );
253264fa531Smrgextern void DoOutlineRectangles ( XParms xp, Parms p, int reps );
254264fa531Smrgextern void EndRectangles ( XParms xp, Parms p );
255264fa531Smrg
256264fa531Smrg/* do_segs.c */
257264fa531Smrgextern int InitSegments ( XParms xp, Parms p, int reps );
258264fa531Smrgextern int InitDashedSegments ( XParms xp, Parms p, int reps );
259264fa531Smrgextern int InitDoubleDashedSegments ( XParms xp, Parms p, int reps );
260264fa531Smrgextern int InitHorizSegments ( XParms xp, Parms p, int reps );
261264fa531Smrgextern int InitWideHorizSegments ( XParms xp, Parms p, int reps );
262264fa531Smrgextern int InitVertSegments ( XParms xp, Parms p, int reps );
263264fa531Smrgextern int InitWideVertSegments ( XParms xp, Parms p, int reps );
264264fa531Smrgextern void DoSegments ( XParms xp, Parms p, int reps );
265264fa531Smrgextern void EndSegments ( XParms xp, Parms p );
266264fa531Smrg
267264fa531Smrg/* do_simple.c */
268264fa531Smrgextern void DoNoOp ( XParms xp, Parms p, int reps );
269264fa531Smrgextern void DoGetAtom ( XParms xp, Parms p, int reps );
270264fa531Smrgextern void DoQueryPointer ( XParms xp, Parms p, int reps );
271264fa531Smrgextern int InitGetProperty ( XParms xp, Parms p, int reps );
272264fa531Smrgextern void DoGetProperty ( XParms xp, Parms p, int reps );
273264fa531Smrg
274264fa531Smrg/* do_text.c */
275264fa531Smrgextern int InitText ( XParms xp, Parms p, int reps );
276264fa531Smrgextern int InitText16 ( XParms xp, Parms p, int reps );
277264fa531Smrgextern void DoText ( XParms xp, Parms p, int reps );
278264fa531Smrgextern void DoText16 ( XParms xp, Parms p, int reps );
279264fa531Smrgextern void DoPolyText ( XParms xp, Parms p, int reps );
280264fa531Smrgextern void DoPolyText16 ( XParms xp, Parms p, int reps );
281264fa531Smrgextern void DoImageText ( XParms xp, Parms p, int reps );
282264fa531Smrgextern void DoImageText16 ( XParms xp, Parms p, int reps );
283264fa531Smrgextern void ClearTextWin ( XParms xp, Parms p );
284264fa531Smrgextern void EndText ( XParms xp, Parms p );
285264fa531Smrgextern void EndText16 ( XParms xp, Parms p );
286264fa531Smrg#ifdef XFT
287264fa531Smrgextern int InitAAText (XParms xp, Parms p, int reps );
288264fa531Smrgextern void DoAAText (XParms xp, Parms p, int reps );
289264fa531Smrgextern void EndAAText ( XParms xp, Parms p );
290264fa531Smrg#endif
291264fa531Smrg
292264fa531Smrg/* do_traps.c */
293264fa531Smrgextern int InitTrapezoids ( XParms xp, Parms p, int reps );
294264fa531Smrgextern void DoTrapezoids ( XParms xp, Parms p, int reps );
295264fa531Smrgextern void EndTrapezoids ( XParms xp, Parms p );
296264fa531Smrg#ifdef XRENDER
297264fa531Smrgextern int InitFixedTraps ( XParms xp, Parms p, int reps );
298264fa531Smrgextern void DoFixedTraps ( XParms xp, Parms p, int reps );
299264fa531Smrgextern void EndFixedTraps ( XParms xp, Parms p );
300264fa531Smrgextern int InitFixedTrapezoids ( XParms xp, Parms p, int reps );
301264fa531Smrgextern void DoFixedTrapezoids ( XParms xp, Parms p, int reps );
302264fa531Smrgextern void EndFixedTrapezoids ( XParms xp, Parms p );
303264fa531Smrg#endif
304264fa531Smrg
305264fa531Smrg/* do_tris.c */
306264fa531Smrgextern int InitTriangles ( XParms xp, Parms p, int reps );
307264fa531Smrgextern void DoTriangles ( XParms xp, Parms p, int reps );
308264fa531Smrgextern void EndTriangles ( XParms xp, Parms p );
309264fa531Smrg
310264fa531Smrg/* do_valgc.c */
311264fa531Smrgextern int InitGC ( XParms xp, Parms p, int reps );
312264fa531Smrgextern void DoChangeGC ( XParms xp, Parms p, int reps );
313264fa531Smrgextern void EndGC ( XParms xp, Parms p );
314264fa531Smrg
315264fa531Smrg/* do_windows.c */
316264fa531Smrgextern int CreateParents ( XParms xp, Parms p, int reps );
317264fa531Smrgextern void MapParents ( XParms xp, Parms p, int reps );
318264fa531Smrgextern void MapParentsCleanup ( XParms xp, Parms p );
319264fa531Smrgextern int InitCreate ( XParms xp, Parms p, int reps );
320264fa531Smrgextern void CreateChildren ( XParms xp, Parms p, int reps );
321264fa531Smrgextern void DestroyChildren ( XParms xp, Parms p );
322264fa531Smrgextern void EndCreate ( XParms xp, Parms p );
323264fa531Smrgextern int InitMap ( XParms xp, Parms p, int reps );
324264fa531Smrgextern void UnmapParents ( XParms xp, Parms p, int reps );
325264fa531Smrgextern void UnmapParentsCleanup ( XParms xp, Parms p);
326264fa531Smrgextern int InitDestroy ( XParms xp, Parms p, int reps );
327264fa531Smrgextern void DestroyParents ( XParms xp, Parms p, int reps );
328264fa531Smrgextern void RenewParents ( XParms xp, Parms p );
329264fa531Smrgextern int InitPopups ( XParms xp, Parms p, int reps );
330264fa531Smrgextern void DoPopUps ( XParms xp, Parms p, int reps );
331264fa531Smrgextern void EndPopups ( XParms xp, Parms p );
332264fa531Smrg
333264fa531Smrg
334264fa531Smrg/*****************************************************************************
335264fa531Smrg
336264fa531SmrgAbout x11perf:
337264fa531Smrg
338264fa531SmrgMany graphics benchmarks assume that the graphics device is used to display the
339264fa531Smrgoutput of a single fancy graphics application, and that the user gets his work
340264fa531Smrgdone on some other device, like a terminal.  Such benchmarks usually measure
341264fa531Smrgdrawing speed for lines, polygons, text, etc.
342264fa531Smrg
343264fa531SmrgSince workstations are not used as standalone graphics engines, but as
344264fa531Smrgsuper-terminals, x11perf measures window management performance as well as
345264fa531Smrgtraditional graphics performace.  x11perf includes benchmarks for the time it
346264fa531Smrgtakes to create and map windows (as when you start up an application); to map a
347264fa531Smrgpre-existing set of windows onto the screen (as when you deiconify an
348264fa531Smrgapplication or pop up a menu); and to rearrange windows (as when you slosh
349264fa531Smrgwindows to and fro trying to find the one you want).
350264fa531Smrg
351264fa531Smrgx11perf also measures graphics performance for operations not normally used in
352264fa531Smrgstandalone graphics displays, but are nonetheless used frequently by X
353264fa531Smrgapplications.  Such operations include CopyPlane (used by the PostScript
354264fa531Smrgpreviewer), scrolling (used in text windows), and various stipples and tiles
355264fa531Smrg(used for CAD and half-toning, respectively).
356264fa531Smrg
357264fa531Smrgx11perf DOES NOT attempt to whittle down measurements to a single ``HeXStones''
358264fa531Smrgnumber.  We consider such numbers to be uninformative at best and misleading at
359264fa531Smrgworst.  x11perf should be used to analyze particular strengths and weaknesses
360264fa531Smrgof servers, and is most useful when used by a server writer who wants to
361264fa531Smrganalyze and improve a server.
362264fa531Smrg
363264fa531SmrgFor repeatable results, x11perf should be run using a local connection on a
364264fa531Smrgfreshly-started server.  The default configuration runs each test 5 times, in
365264fa531Smrgorder to see if each trial takes approximately the same amount of time.
366264fa531SmrgStrange glitches should be examined; if non-repeatable I chalk them up to
367264fa531Smrgdaemons and network traffic.  Each trial is run for 5 seconds, in order to
368264fa531Smrgreduce random time differences.  The number of objects processed per second is
369264fa531Smrgdisplayed to 3 significant digits, but you'll be lucky on most UNIX system if
370264fa531Smrgthe numbers are actually consistent to 2 digits.
371264fa531Smrg
372264fa531SmrgThe current program is mostly the responsibility of Joel McCormack.  It is
373264fa531Smrgbased upon the x11perf developed by Phil Karlton, Susan Angebranndt, and Chris
374264fa531SmrgKent, who wanted to assess performance differences between various servers.
375264fa531SmrgMary Walker, Todd Newman, and I added several tests in order to write and tune
376264fa531Smrgthe pmax (DECStation 3100) servers.  For a general release to the world, I've
377264fa531Smrgbasically rewritten x11perf to ease making comparisons between widely varying
378264fa531Smrgmachines, to cover most important X functionality (the notable exception being
379264fa531Smrgwide lines), and to exercise graphics operations in as many different
380264fa531Smrgorientations and alignments as possible.
381264fa531Smrg
382264fa531Smrg******************************************************************************/
383