x11perf.h revision 533545b5
1264fa531Smrg/*****************************************************************************
2264fa531SmrgCopyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
3264fa531Smrg
4264fa531Smrg                        All Rights Reserved
5264fa531Smrg
6264fa531SmrgPermission to use, copy, modify, and distribute this software and its
7264fa531Smrgdocumentation for any purpose and without fee is hereby granted,
8264fa531Smrgprovided that the above copyright notice appear in all copies and that
9264fa531Smrgboth that copyright notice and this permission notice appear in
10264fa531Smrgsupporting documentation, and that the name of Digital not be
11264fa531Smrgused in advertising or publicity pertaining to distribution of the
12264fa531Smrgsoftware without specific, written prior permission.
13264fa531Smrg
14264fa531SmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
15264fa531SmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
16264fa531SmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
17264fa531SmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
18264fa531SmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
19264fa531SmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
20264fa531SmrgSOFTWARE.
21264fa531Smrg
22264fa531Smrg******************************************************************************/
23264fa531Smrg
24264fa531Smrg#if HAVE_CONFIG_H
25264fa531Smrg#include "config.h"
26264fa531Smrg#endif
27264fa531Smrg
28264fa531Smrg#ifndef VMS
29264fa531Smrg#include <X11/Xlib.h>
30264fa531Smrg#include <stdlib.h>
31264fa531Smrg#include <X11/Xutil.h>
32264fa531Smrg#else
33264fa531Smrg#include <decw$include/Xlib.h>
34264fa531Smrg#include <decw$include/Xutil.h>
35264fa531Smrg#endif
36264fa531Smrg#if defined(XlibSpecificationRelease) && XlibSpecificationRelease >= 5
37264fa531Smrg#include <X11/Xfuncs.h>
38264fa531Smrg#endif
39264fa531Smrg#include <stddef.h>
40c37a63b8Smrg#include <X11/extensions/Xrender.h>
41264fa531Smrg
42264fa531Smrg#define POLY	     1000       /* # (small) items in poly calls	*/
43264fa531Smrg#define MAXROWS	       40       /* Max rows of items in poly calls      */
44264fa531Smrg#define MAXCOLS	       25       /* Max columns of items			*/
45264fa531Smrg
46264fa531Smrg#define WIDTH         600	/* Size of large window to work within  */
47264fa531Smrg#define HEIGHT        600
48264fa531Smrg
49264fa531Smrg#define CHILDSIZE       8       /* Size of children on windowing tests  */
50264fa531Smrg#define CHILDSPACE      4       /* Space between children		*/
51264fa531Smrg
52264fa531Smrg#define BigTile	((char *)2)		/* Big tile/stipple */
53264fa531Smrg#define OddTile	((char *)1)		/* Odd sized tile/stipple */
54264fa531Smrg
55c37a63b8Smrg#define PictStandardNative    5
56264fa531Smrg
57264fa531Smrgtypedef unsigned char Version;
58264fa531Smrg
59264fa531Smrg#define VERSION1_2  ((Version)(1 << 0))
60264fa531Smrg#define VERSION1_3  ((Version)(1 << 1))
61264fa531Smrg#define VERSION1_4  ((Version)(1 << 2))
62264fa531Smrg#define VERSION1_5  ((Version)(1 << 3))
63c37a63b8Smrg#define VERSION1_6  ((Version)(1 << 4))
64264fa531Smrg#define V1_2ONLY VERSION1_2
65c37a63b8Smrg#define V1_2FEATURE	(VERSION1_2 | VERSION1_3 | VERSION1_4 | VERSION1_5 | VERSION1_6)
66c37a63b8Smrg#define V1_3FEATURE	(VERSION1_3 | VERSION1_4 | VERSION1_5 | VERSION1_6)
67c37a63b8Smrg#define V1_4FEATURE	(VERSION1_4 | VERSION1_5 | VERSION1_6)
68c37a63b8Smrg#define V1_5FEATURE     (VERSION1_5 | VERSION1_6)
69c37a63b8Smrg#define V1_6FEATURE     (VERSION1_6)
70264fa531Smrg
71264fa531Smrgtypedef struct _Parms {
72264fa531Smrg    /* Required fields */
73264fa531Smrg    int  objects;       /* Number of objects to process in one X call	    */
74264fa531Smrg
75264fa531Smrg    /* Optional fields.  (Wouldn't object-oriented programming be nice ?)   */
76264fa531Smrg    int  special;       /* Usually size of objects to paint		    */
77533545b5Smrg    const char *font, *bfont;
78264fa531Smrg    int  fillStyle;     /* Solid, transparent stipple, opaque stipple, tile */
79264fa531Smrg} ParmRec, *Parms;
80264fa531Smrg
81264fa531Smrgtypedef struct _XParms {
82264fa531Smrg    Display	    *d;
83264fa531Smrg    Window	    w;
84264fa531Smrg    Pixmap          p;
85264fa531Smrg    GC		    fggc;
86264fa531Smrg    GC		    bggc;
87264fa531Smrg    GC		    ddfggc;
88264fa531Smrg    GC		    ddbggc;
89c37a63b8Smrg    Picture	    w_picture;
90c37a63b8Smrg    Picture	    p_picture;
91264fa531Smrg    unsigned long   foreground;
92264fa531Smrg    unsigned long   background;
93264fa531Smrg    unsigned long   ddbackground;
94264fa531Smrg    XVisualInfo     vinfo;
95264fa531Smrg    Bool	    pack;
96264fa531Smrg    Version	    version;
97264fa531Smrg    Bool	    save_under;
98264fa531Smrg    int		    backing_store;
99264fa531Smrg    unsigned long   planemask;
100c37a63b8Smrg    int		    func;
101c37a63b8Smrg    int		    format;
102264fa531Smrg    Colormap	    cmap;
103264fa531Smrg} XParmRec, *XParms;
104264fa531Smrg
105533545b5Smrgtypedef int (*InitProc)(XParms xp, Parms p, int64_t reps);
106533545b5Smrgtypedef void (*Proc)(XParms xp, Parms p, int64_t reps);
107264fa531Smrgtypedef void (*CleanupProc)(XParms xp, Parms p);
108264fa531Smrg
109264fa531Smrgtypedef enum {
110264fa531Smrg    WINDOW,     /* Windowing test, rop, planemask have no affect	*/
111264fa531Smrg    ROP,	/* Graphics test, rop, planemask has some affect	*/
112264fa531Smrg    PLANEMASK,  /* Graphics test, rop no affect, planemask some affect  */
113c37a63b8Smrg    NONROP,     /* Graphics or overhead test, rop has no affect		*/
114c37a63b8Smrg    COMP        /* Graphics test, render op                             */
115264fa531Smrg} TestType;
116264fa531Smrg
117264fa531Smrgtypedef struct _Test {
118533545b5Smrg    const char	*option;    /* Name to use in prompt line		    */
119533545b5Smrg    const char	*label;     /* Fuller description of test		    */
120533545b5Smrg    const char	*label14;   /* Labels that are different in Version 1.4     */
121264fa531Smrg    InitProc    init;       /* Initialization procedure			    */
122264fa531Smrg    Proc	proc;       /* Timed benchmark procedure		    */
123264fa531Smrg    CleanupProc	passCleanup;/* Cleanup between repetitions of same test     */
124264fa531Smrg    CleanupProc	cleanup;    /* Cleanup after test			    */
125264fa531Smrg    Version     versions;   /* Test in 1.2 only, 1.3 only, or both	    */
126264fa531Smrg    TestType    testType;   /* Windowing, graphics rop, graphics non-rop    */
127264fa531Smrg    int		clips;      /* Number of obscuring windows to force clipping*/
128264fa531Smrg    ParmRec     parms;      /* Parameters passed to test procedures	    */
129264fa531Smrg} Test;
130264fa531Smrg
131264fa531Smrgextern void NullProc(XParms xp, Parms p);
132533545b5Smrgextern int NullInitProc(XParms xp, Parms p, int64_t reps);
133264fa531Smrg
134264fa531Smrgextern Test test[];
135264fa531Smrg
136264fa531Smrgextern int abortTest;
137264fa531Smrg
138533545b5Smrgextern void AbortTest (void) _X_NORETURN;
139264fa531Smrg
140264fa531Smrg#define CheckAbort()  if (abortTest) AbortTest ()
141264fa531Smrg#define ForEachTest(x) for (x = 0; test[x].option != NULL; x++)
142264fa531Smrg
143264fa531Smrg
144264fa531Smrg/* do_arcs.c */
145533545b5Smrgextern int InitCircles ( XParms xp, Parms p, int64_t reps );
146533545b5Smrgextern int InitPartCircles ( XParms xp, Parms p, int64_t reps );
147533545b5Smrgextern int InitChordPartCircles ( XParms xp, Parms p, int64_t reps );
148533545b5Smrgextern int InitSlicePartCircles ( XParms xp, Parms p, int64_t reps );
149533545b5Smrgextern int InitWideCircles ( XParms xp, Parms p, int64_t reps );
150533545b5Smrgextern int InitPartWideCircles ( XParms xp, Parms p, int64_t reps );
151533545b5Smrgextern int InitDashedCircles ( XParms xp, Parms p, int64_t reps );
152533545b5Smrgextern int InitWideDashedCircles ( XParms xp, Parms p, int64_t reps );
153533545b5Smrgextern int InitDoubleDashedCircles ( XParms xp, Parms p, int64_t reps );
154533545b5Smrgextern int InitWideDoubleDashedCircles ( XParms xp, Parms p, int64_t reps );
155533545b5Smrgextern int InitEllipses ( XParms xp, Parms p, int64_t reps );
156533545b5Smrgextern int InitPartEllipses ( XParms xp, Parms p, int64_t reps );
157533545b5Smrgextern int InitChordPartEllipses ( XParms xp, Parms p, int64_t reps );
158533545b5Smrgextern int InitSlicePartEllipses ( XParms xp, Parms p, int64_t reps );
159533545b5Smrgextern int InitWideEllipses ( XParms xp, Parms p, int64_t reps );
160533545b5Smrgextern int InitPartWideEllipses ( XParms xp, Parms p, int64_t reps );
161533545b5Smrgextern int InitDashedEllipses ( XParms xp, Parms p, int64_t reps );
162533545b5Smrgextern int InitWideDashedEllipses ( XParms xp, Parms p, int64_t reps );
163533545b5Smrgextern int InitDoubleDashedEllipses ( XParms xp, Parms p, int64_t reps );
164533545b5Smrgextern int InitWideDoubleDashedEllipses ( XParms xp, Parms p, int64_t reps );
165533545b5Smrgextern void DoArcs ( XParms xp, Parms p, int64_t reps );
166533545b5Smrgextern void DoFilledArcs ( XParms xp, Parms p, int64_t reps );
167264fa531Smrgextern void EndArcs ( XParms xp, Parms p );
168264fa531Smrg
169264fa531Smrg/* do_blt.c */
170533545b5Smrgextern int InitScroll ( XParms xp, Parms p, int64_t reps );
171533545b5Smrgextern void DoScroll ( XParms xp, Parms p, int64_t reps );
172264fa531Smrgextern void MidScroll ( XParms xp, Parms p );
173264fa531Smrgextern void EndScroll ( XParms xp, Parms p );
174533545b5Smrgextern int InitCopyWin ( XParms xp, Parms p, int64_t reps );
175533545b5Smrgextern int InitCopyPix ( XParms xp, Parms p, int64_t reps );
176533545b5Smrgextern int InitGetImage ( XParms xp, Parms p, int64_t reps );
177533545b5Smrgextern int InitPutImage ( XParms xp, Parms p, int64_t reps );
178533545b5Smrgextern void DoCopyWinWin ( XParms xp, Parms p, int64_t reps );
179533545b5Smrgextern void DoCopyPixWin ( XParms xp, Parms p, int64_t reps );
180533545b5Smrgextern void DoCopyWinPix ( XParms xp, Parms p, int64_t reps );
181533545b5Smrgextern void DoCopyPixPix ( XParms xp, Parms p, int64_t reps );
182533545b5Smrgextern void DoGetImage ( XParms xp, Parms p, int64_t reps );
183533545b5Smrgextern void DoPutImage ( XParms xp, Parms p, int64_t reps );
184264fa531Smrg#ifdef MITSHM
185533545b5Smrgextern int InitShmPutImage ( XParms xp, Parms p, int64_t reps );
186533545b5Smrgextern int InitShmGetImage ( XParms xp, Parms p, int64_t reps );
187533545b5Smrgextern void DoShmPutImage ( XParms xp, Parms p, int64_t reps );
188533545b5Smrgextern void DoShmGetImage ( XParms xp, Parms p, int64_t reps );
189264fa531Smrgextern void EndShmPutImage ( XParms xp, Parms p );
190e4ee1255Smrgextern void EndShmGetImage ( XParms xp, Parms p );
191264fa531Smrg#endif
192264fa531Smrgextern void MidCopyPix ( XParms xp, Parms p );
193264fa531Smrgextern void EndCopyWin ( XParms xp, Parms p );
194264fa531Smrgextern void EndCopyPix ( XParms xp, Parms p );
195264fa531Smrgextern void EndGetImage ( XParms xp, Parms p );
196533545b5Smrgextern int InitCopyPlane ( XParms xp, Parms p, int64_t reps );
197533545b5Smrgextern void DoCopyPlane ( XParms xp, Parms p, int64_t reps );
198264fa531Smrg
199c37a63b8Smrgint
200533545b5SmrgInitCompositeWin(XParms xp, Parms p, int64_t reps);
201c37a63b8Smrg
202c37a63b8Smrgvoid
203c37a63b8SmrgEndCompositeWin (XParms xp, Parms p);
204c37a63b8Smrg
205c37a63b8Smrgvoid
206533545b5SmrgDoCompositeWinWin (XParms xp, Parms p, int64_t reps);
207c37a63b8Smrg
208c37a63b8Smrgint
209533545b5SmrgInitCompositePix(XParms xp, Parms p, int64_t reps);
210c37a63b8Smrg
211c37a63b8Smrgvoid
212c37a63b8SmrgEndCompositePix (XParms xp, Parms p);
213c37a63b8Smrg
214c37a63b8Smrgvoid
215533545b5SmrgDoCompositePixWin (XParms xp, Parms p, int64_t reps);
216c37a63b8Smrg
217264fa531Smrg/* do_complex.c */
218533545b5Smrgextern int InitComplexPoly ( XParms xp, Parms p, int64_t reps );
219533545b5Smrgextern void DoComplexPoly ( XParms xp, Parms p, int64_t reps );
220264fa531Smrgextern void EndComplexPoly ( XParms xp, Parms p );
221533545b5Smrgextern int InitGeneralPoly ( XParms xp, Parms p, int64_t reps );
222533545b5Smrgextern void DoGeneralPoly ( XParms xp, Parms p, int64_t reps );
223264fa531Smrg
224264fa531Smrg/* do_dots.c */
225533545b5Smrgextern int InitDots ( XParms xp, Parms p, int64_t reps );
226533545b5Smrgextern void DoDots ( XParms xp, Parms p, int64_t reps );
227264fa531Smrgextern void EndDots ( XParms xp, Parms p );
228264fa531Smrg
229264fa531Smrg/* do_lines.c */
230533545b5Smrgextern int InitLines ( XParms xp, Parms p, int64_t reps );
231533545b5Smrgextern int InitWideLines ( XParms xp, Parms p, int64_t reps );
232533545b5Smrgextern int InitDashedLines ( XParms xp, Parms p, int64_t reps );
233533545b5Smrgextern int InitWideDashedLines ( XParms xp, Parms p, int64_t reps );
234533545b5Smrgextern int InitDoubleDashedLines ( XParms xp, Parms p, int64_t reps );
235533545b5Smrgextern int InitWideDoubleDashedLines ( XParms xp, Parms p, int64_t reps );
236533545b5Smrgextern void DoLines ( XParms xp, Parms p, int64_t reps );
237264fa531Smrgextern void EndLines ( XParms xp, Parms p );
238264fa531Smrg
239264fa531Smrg/* do_movewin.c */
240533545b5Smrgextern int InitMoveWindows ( XParms xp, Parms p, int64_t reps );
241533545b5Smrgextern void DoMoveWindows ( XParms xp, Parms p, int64_t reps );
242264fa531Smrgextern void EndMoveWindows ( XParms xp, Parms p );
243533545b5Smrgextern void DoResizeWindows ( XParms xp, Parms p, int64_t reps );
244533545b5Smrgextern int InitCircWindows ( XParms xp, Parms p, int64_t reps );
245533545b5Smrgextern void DoCircWindows ( XParms xp, Parms p, int64_t reps );
246264fa531Smrgextern void EndCircWindows ( XParms xp, Parms p );
247533545b5Smrgextern int InitMoveTree ( XParms xp, Parms p, int64_t reps );
248533545b5Smrgextern void DoMoveTree ( XParms xp, Parms p, int64_t reps );
249264fa531Smrgextern void EndMoveTree ( XParms xp, Parms p );
250264fa531Smrg
251264fa531Smrg/* do_rects.c */
252533545b5Smrgextern int InitRectangles ( XParms xp, Parms p, int64_t reps );
253533545b5Smrgextern void DoRectangles ( XParms xp, Parms p, int64_t reps );
254533545b5Smrgextern void DoOutlineRectangles ( XParms xp, Parms p, int64_t reps );
255264fa531Smrgextern void EndRectangles ( XParms xp, Parms p );
256264fa531Smrg
257264fa531Smrg/* do_segs.c */
258533545b5Smrgextern int InitSegments ( XParms xp, Parms p, int64_t reps );
259533545b5Smrgextern int InitDashedSegments ( XParms xp, Parms p, int64_t reps );
260533545b5Smrgextern int InitDoubleDashedSegments ( XParms xp, Parms p, int64_t reps );
261533545b5Smrgextern int InitHorizSegments ( XParms xp, Parms p, int64_t reps );
262533545b5Smrgextern int InitWideHorizSegments ( XParms xp, Parms p, int64_t reps );
263533545b5Smrgextern int InitVertSegments ( XParms xp, Parms p, int64_t reps );
264533545b5Smrgextern int InitWideVertSegments ( XParms xp, Parms p, int64_t reps );
265533545b5Smrgextern void DoSegments ( XParms xp, Parms p, int64_t reps );
266264fa531Smrgextern void EndSegments ( XParms xp, Parms p );
267264fa531Smrg
268264fa531Smrg/* do_simple.c */
269533545b5Smrgextern void DoNoOp ( XParms xp, Parms p, int64_t reps );
270533545b5Smrgextern void DoGetAtom ( XParms xp, Parms p, int64_t reps );
271533545b5Smrgextern void DoQueryPointer ( XParms xp, Parms p, int64_t reps );
272533545b5Smrgextern int InitGetProperty ( XParms xp, Parms p, int64_t reps );
273533545b5Smrgextern void DoGetProperty ( XParms xp, Parms p, int64_t reps );
274264fa531Smrg
275264fa531Smrg/* do_text.c */
276533545b5Smrgextern int InitText ( XParms xp, Parms p, int64_t reps );
277533545b5Smrgextern int InitText16 ( XParms xp, Parms p, int64_t reps );
278533545b5Smrgextern void DoText ( XParms xp, Parms p, int64_t reps );
279533545b5Smrgextern void DoText16 ( XParms xp, Parms p, int64_t reps );
280533545b5Smrgextern void DoPolyText ( XParms xp, Parms p, int64_t reps );
281533545b5Smrgextern void DoPolyText16 ( XParms xp, Parms p, int64_t reps );
282533545b5Smrgextern void DoImageText ( XParms xp, Parms p, int64_t reps );
283533545b5Smrgextern void DoImageText16 ( XParms xp, Parms p, int64_t reps );
284264fa531Smrgextern void ClearTextWin ( XParms xp, Parms p );
285264fa531Smrgextern void EndText ( XParms xp, Parms p );
286264fa531Smrgextern void EndText16 ( XParms xp, Parms p );
287264fa531Smrg#ifdef XFT
288533545b5Smrgextern int InitAAText (XParms xp, Parms p, int64_t reps );
289533545b5Smrgextern void DoAAText (XParms xp, Parms p, int64_t reps );
290264fa531Smrgextern void EndAAText ( XParms xp, Parms p );
291264fa531Smrg#endif
292264fa531Smrg
293264fa531Smrg/* do_traps.c */
294533545b5Smrgextern int InitTrapezoids ( XParms xp, Parms p, int64_t reps );
295533545b5Smrgextern void DoTrapezoids ( XParms xp, Parms p, int64_t reps );
296264fa531Smrgextern void EndTrapezoids ( XParms xp, Parms p );
297736a7e2cSmrg#if defined(XRENDER) && defined(XFT)
298533545b5Smrgextern int InitFixedTraps ( XParms xp, Parms p, int64_t reps );
299533545b5Smrgextern void DoFixedTraps ( XParms xp, Parms p, int64_t reps );
300264fa531Smrgextern void EndFixedTraps ( XParms xp, Parms p );
301533545b5Smrgextern int InitFixedTrapezoids ( XParms xp, Parms p, int64_t reps );
302533545b5Smrgextern void DoFixedTrapezoids ( XParms xp, Parms p, int64_t reps );
303264fa531Smrgextern void EndFixedTrapezoids ( XParms xp, Parms p );
304264fa531Smrg#endif
305264fa531Smrg
306264fa531Smrg/* do_tris.c */
307533545b5Smrgextern int InitTriangles ( XParms xp, Parms p, int64_t reps );
308533545b5Smrgextern void DoTriangles ( XParms xp, Parms p, int64_t reps );
309264fa531Smrgextern void EndTriangles ( XParms xp, Parms p );
310264fa531Smrg
311264fa531Smrg/* do_valgc.c */
312533545b5Smrgextern int InitGC ( XParms xp, Parms p, int64_t reps );
313533545b5Smrgextern void DoChangeGC ( XParms xp, Parms p, int64_t reps );
314264fa531Smrgextern void EndGC ( XParms xp, Parms p );
315264fa531Smrg
316264fa531Smrg/* do_windows.c */
317533545b5Smrgextern int CreateParents ( XParms xp, Parms p, int64_t reps );
318533545b5Smrgextern void MapParents ( XParms xp, Parms p, int64_t reps );
319264fa531Smrgextern void MapParentsCleanup ( XParms xp, Parms p );
320533545b5Smrgextern int InitCreate ( XParms xp, Parms p, int64_t reps );
321533545b5Smrgextern void CreateChildren ( XParms xp, Parms p, int64_t reps );
322264fa531Smrgextern void DestroyChildren ( XParms xp, Parms p );
323264fa531Smrgextern void EndCreate ( XParms xp, Parms p );
324533545b5Smrgextern int InitMap ( XParms xp, Parms p, int64_t reps );
325533545b5Smrgextern void UnmapParents ( XParms xp, Parms p, int64_t reps );
326264fa531Smrgextern void UnmapParentsCleanup ( XParms xp, Parms p);
327533545b5Smrgextern int InitDestroy ( XParms xp, Parms p, int64_t reps );
328533545b5Smrgextern void DestroyParents ( XParms xp, Parms p, int64_t reps );
329264fa531Smrgextern void RenewParents ( XParms xp, Parms p );
330533545b5Smrgextern int InitPopups ( XParms xp, Parms p, int64_t reps );
331533545b5Smrgextern void DoPopUps ( XParms xp, Parms p, int64_t reps );
332264fa531Smrgextern void EndPopups ( XParms xp, Parms p );
333264fa531Smrg
334264fa531Smrg
335264fa531Smrg/*****************************************************************************
336264fa531Smrg
337264fa531SmrgAbout x11perf:
338264fa531Smrg
339264fa531SmrgMany graphics benchmarks assume that the graphics device is used to display the
340264fa531Smrgoutput of a single fancy graphics application, and that the user gets his work
341264fa531Smrgdone on some other device, like a terminal.  Such benchmarks usually measure
342264fa531Smrgdrawing speed for lines, polygons, text, etc.
343264fa531Smrg
344264fa531SmrgSince workstations are not used as standalone graphics engines, but as
345264fa531Smrgsuper-terminals, x11perf measures window management performance as well as
346264fa531Smrgtraditional graphics performace.  x11perf includes benchmarks for the time it
347264fa531Smrgtakes to create and map windows (as when you start up an application); to map a
348264fa531Smrgpre-existing set of windows onto the screen (as when you deiconify an
349264fa531Smrgapplication or pop up a menu); and to rearrange windows (as when you slosh
350264fa531Smrgwindows to and fro trying to find the one you want).
351264fa531Smrg
352264fa531Smrgx11perf also measures graphics performance for operations not normally used in
353264fa531Smrgstandalone graphics displays, but are nonetheless used frequently by X
354264fa531Smrgapplications.  Such operations include CopyPlane (used by the PostScript
355264fa531Smrgpreviewer), scrolling (used in text windows), and various stipples and tiles
356264fa531Smrg(used for CAD and half-toning, respectively).
357264fa531Smrg
358264fa531Smrgx11perf DOES NOT attempt to whittle down measurements to a single ``HeXStones''
359264fa531Smrgnumber.  We consider such numbers to be uninformative at best and misleading at
360264fa531Smrgworst.  x11perf should be used to analyze particular strengths and weaknesses
361264fa531Smrgof servers, and is most useful when used by a server writer who wants to
362264fa531Smrganalyze and improve a server.
363264fa531Smrg
364264fa531SmrgFor repeatable results, x11perf should be run using a local connection on a
365264fa531Smrgfreshly-started server.  The default configuration runs each test 5 times, in
366264fa531Smrgorder to see if each trial takes approximately the same amount of time.
367264fa531SmrgStrange glitches should be examined; if non-repeatable I chalk them up to
368264fa531Smrgdaemons and network traffic.  Each trial is run for 5 seconds, in order to
369264fa531Smrgreduce random time differences.  The number of objects processed per second is
370264fa531Smrgdisplayed to 3 significant digits, but you'll be lucky on most UNIX system if
371264fa531Smrgthe numbers are actually consistent to 2 digits.
372264fa531Smrg
373264fa531SmrgThe current program is mostly the responsibility of Joel McCormack.  It is
374264fa531Smrgbased upon the x11perf developed by Phil Karlton, Susan Angebranndt, and Chris
375264fa531SmrgKent, who wanted to assess performance differences between various servers.
376264fa531SmrgMary Walker, Todd Newman, and I added several tests in order to write and tune
377264fa531Smrgthe pmax (DECStation 3100) servers.  For a general release to the world, I've
378264fa531Smrgbasically rewritten x11perf to ease making comparisons between widely varying
379264fa531Smrgmachines, to cover most important X functionality (the notable exception being
380264fa531Smrgwide lines), and to exercise graphics operations in as many different
381264fa531Smrgorientations and alignments as possible.
382264fa531Smrg
383264fa531Smrg******************************************************************************/
384