1264fa531Smrg/***************************************************************************** 2264fa531SmrgCopyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts. 3264fa531Smrg 4264fa531Smrg All Rights Reserved 5264fa531Smrg 6dfac8f13SmrgPermission to use, copy, modify, and distribute this software and its 7dfac8f13Smrgdocumentation for any purpose and without fee is hereby granted, 8264fa531Smrgprovided that the above copyright notice appear in all copies and that 9dfac8f13Smrgboth 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 12dfac8f13Smrgsoftware 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)) 64dfac8f13Smrg#define VERSION1_7 ((Version)(1 << 5)) 65dfac8f13Smrg 66264fa531Smrg#define V1_2ONLY VERSION1_2 67dfac8f13Smrg 68dfac8f13Smrg/* Each V1_*FEATURE flag includes all later versions */ 69dfac8f13Smrg#define V1_7FEATURE (VERSION1_7) 70dfac8f13Smrg#define V1_6FEATURE (VERSION1_6 | V1_7FEATURE) 71dfac8f13Smrg#define V1_5FEATURE (VERSION1_5 | V1_6FEATURE) 72dfac8f13Smrg#define V1_4FEATURE (VERSION1_4 | V1_5FEATURE) 73dfac8f13Smrg#define V1_3FEATURE (VERSION1_3 | V1_4FEATURE) 74dfac8f13Smrg#define V1_2FEATURE (VERSION1_2 | V1_3FEATURE) 75264fa531Smrg 76264fa531Smrgtypedef struct _Parms { 77264fa531Smrg /* Required fields */ 78264fa531Smrg int objects; /* Number of objects to process in one X call */ 79264fa531Smrg 80264fa531Smrg /* Optional fields. (Wouldn't object-oriented programming be nice ?) */ 81264fa531Smrg int special; /* Usually size of objects to paint */ 82533545b5Smrg const char *font, *bfont; 83264fa531Smrg int fillStyle; /* Solid, transparent stipple, opaque stipple, tile */ 84264fa531Smrg} ParmRec, *Parms; 85264fa531Smrg 86264fa531Smrgtypedef struct _XParms { 87264fa531Smrg Display *d; 88264fa531Smrg Window w; 89264fa531Smrg Pixmap p; 90264fa531Smrg GC fggc; 91264fa531Smrg GC bggc; 92264fa531Smrg GC ddfggc; 93264fa531Smrg GC ddbggc; 94c37a63b8Smrg Picture w_picture; 95c37a63b8Smrg Picture p_picture; 96264fa531Smrg unsigned long foreground; 97264fa531Smrg unsigned long background; 98264fa531Smrg unsigned long ddbackground; 99264fa531Smrg XVisualInfo vinfo; 100264fa531Smrg Bool pack; 101264fa531Smrg Version version; 102264fa531Smrg Bool save_under; 103264fa531Smrg int backing_store; 104264fa531Smrg unsigned long planemask; 105c37a63b8Smrg int func; 106c37a63b8Smrg int format; 107264fa531Smrg Colormap cmap; 108264fa531Smrg} XParmRec, *XParms; 109264fa531Smrg 110533545b5Smrgtypedef int (*InitProc)(XParms xp, Parms p, int64_t reps); 111533545b5Smrgtypedef void (*Proc)(XParms xp, Parms p, int64_t reps); 112264fa531Smrgtypedef void (*CleanupProc)(XParms xp, Parms p); 113264fa531Smrg 114264fa531Smrgtypedef enum { 115264fa531Smrg WINDOW, /* Windowing test, rop, planemask have no affect */ 116264fa531Smrg ROP, /* Graphics test, rop, planemask has some affect */ 117264fa531Smrg PLANEMASK, /* Graphics test, rop no affect, planemask some affect */ 118c37a63b8Smrg NONROP, /* Graphics or overhead test, rop has no affect */ 119c37a63b8Smrg COMP /* Graphics test, render op */ 120264fa531Smrg} TestType; 121264fa531Smrg 122264fa531Smrgtypedef struct _Test { 123533545b5Smrg const char *option; /* Name to use in prompt line */ 124533545b5Smrg const char *label; /* Fuller description of test */ 125533545b5Smrg const char *label14; /* Labels that are different in Version 1.4 */ 126264fa531Smrg InitProc init; /* Initialization procedure */ 127264fa531Smrg Proc proc; /* Timed benchmark procedure */ 128264fa531Smrg CleanupProc passCleanup;/* Cleanup between repetitions of same test */ 129264fa531Smrg CleanupProc cleanup; /* Cleanup after test */ 130264fa531Smrg Version versions; /* Test in 1.2 only, 1.3 only, or both */ 131264fa531Smrg TestType testType; /* Windowing, graphics rop, graphics non-rop */ 132264fa531Smrg int clips; /* Number of obscuring windows to force clipping*/ 133264fa531Smrg ParmRec parms; /* Parameters passed to test procedures */ 134264fa531Smrg} Test; 135264fa531Smrg 136264fa531Smrgextern void NullProc(XParms xp, Parms p); 137533545b5Smrgextern int NullInitProc(XParms xp, Parms p, int64_t reps); 138264fa531Smrg 139264fa531Smrgextern Test test[]; 140264fa531Smrg 141264fa531Smrgextern int abortTest; 142264fa531Smrg 143533545b5Smrgextern void AbortTest (void) _X_NORETURN; 144264fa531Smrg 145264fa531Smrg#define CheckAbort() if (abortTest) AbortTest () 146264fa531Smrg#define ForEachTest(x) for (x = 0; test[x].option != NULL; x++) 147264fa531Smrg 148264fa531Smrg 149264fa531Smrg/* do_arcs.c */ 150533545b5Smrgextern int InitCircles ( XParms xp, Parms p, int64_t reps ); 151533545b5Smrgextern int InitPartCircles ( XParms xp, Parms p, int64_t reps ); 152533545b5Smrgextern int InitChordPartCircles ( XParms xp, Parms p, int64_t reps ); 153533545b5Smrgextern int InitSlicePartCircles ( XParms xp, Parms p, int64_t reps ); 154533545b5Smrgextern int InitWideCircles ( XParms xp, Parms p, int64_t reps ); 155533545b5Smrgextern int InitPartWideCircles ( XParms xp, Parms p, int64_t reps ); 156533545b5Smrgextern int InitDashedCircles ( XParms xp, Parms p, int64_t reps ); 157533545b5Smrgextern int InitWideDashedCircles ( XParms xp, Parms p, int64_t reps ); 158533545b5Smrgextern int InitDoubleDashedCircles ( XParms xp, Parms p, int64_t reps ); 159533545b5Smrgextern int InitWideDoubleDashedCircles ( XParms xp, Parms p, int64_t reps ); 160533545b5Smrgextern int InitEllipses ( XParms xp, Parms p, int64_t reps ); 161533545b5Smrgextern int InitPartEllipses ( XParms xp, Parms p, int64_t reps ); 162533545b5Smrgextern int InitChordPartEllipses ( XParms xp, Parms p, int64_t reps ); 163533545b5Smrgextern int InitSlicePartEllipses ( XParms xp, Parms p, int64_t reps ); 164533545b5Smrgextern int InitWideEllipses ( XParms xp, Parms p, int64_t reps ); 165533545b5Smrgextern int InitPartWideEllipses ( XParms xp, Parms p, int64_t reps ); 166533545b5Smrgextern int InitDashedEllipses ( XParms xp, Parms p, int64_t reps ); 167533545b5Smrgextern int InitWideDashedEllipses ( XParms xp, Parms p, int64_t reps ); 168533545b5Smrgextern int InitDoubleDashedEllipses ( XParms xp, Parms p, int64_t reps ); 169533545b5Smrgextern int InitWideDoubleDashedEllipses ( XParms xp, Parms p, int64_t reps ); 170533545b5Smrgextern void DoArcs ( XParms xp, Parms p, int64_t reps ); 171533545b5Smrgextern void DoFilledArcs ( XParms xp, Parms p, int64_t reps ); 172264fa531Smrgextern void EndArcs ( XParms xp, Parms p ); 173264fa531Smrg 174264fa531Smrg/* do_blt.c */ 175533545b5Smrgextern int InitScroll ( XParms xp, Parms p, int64_t reps ); 176533545b5Smrgextern void DoScroll ( XParms xp, Parms p, int64_t reps ); 177264fa531Smrgextern void MidScroll ( XParms xp, Parms p ); 178264fa531Smrgextern void EndScroll ( XParms xp, Parms p ); 179533545b5Smrgextern int InitCopyWin ( XParms xp, Parms p, int64_t reps ); 180533545b5Smrgextern int InitCopyPix ( XParms xp, Parms p, int64_t reps ); 181533545b5Smrgextern int InitGetImage ( XParms xp, Parms p, int64_t reps ); 182533545b5Smrgextern int InitPutImage ( XParms xp, Parms p, int64_t reps ); 183533545b5Smrgextern void DoCopyWinWin ( XParms xp, Parms p, int64_t reps ); 184533545b5Smrgextern void DoCopyPixWin ( XParms xp, Parms p, int64_t reps ); 185533545b5Smrgextern void DoCopyWinPix ( XParms xp, Parms p, int64_t reps ); 186533545b5Smrgextern void DoCopyPixPix ( XParms xp, Parms p, int64_t reps ); 187533545b5Smrgextern void DoGetImage ( XParms xp, Parms p, int64_t reps ); 188533545b5Smrgextern void DoPutImage ( XParms xp, Parms p, int64_t reps ); 189264fa531Smrg#ifdef MITSHM 190533545b5Smrgextern int InitShmPutImage ( XParms xp, Parms p, int64_t reps ); 191533545b5Smrgextern int InitShmGetImage ( XParms xp, Parms p, int64_t reps ); 192533545b5Smrgextern void DoShmPutImage ( XParms xp, Parms p, int64_t reps ); 193533545b5Smrgextern void DoShmGetImage ( XParms xp, Parms p, int64_t reps ); 194264fa531Smrgextern void EndShmPutImage ( XParms xp, Parms p ); 195e4ee1255Smrgextern void EndShmGetImage ( XParms xp, Parms p ); 196264fa531Smrg#endif 197264fa531Smrgextern void MidCopyPix ( XParms xp, Parms p ); 198264fa531Smrgextern void EndCopyWin ( XParms xp, Parms p ); 199264fa531Smrgextern void EndCopyPix ( XParms xp, Parms p ); 200264fa531Smrgextern void EndGetImage ( XParms xp, Parms p ); 201533545b5Smrgextern int InitCopyPlane ( XParms xp, Parms p, int64_t reps ); 202533545b5Smrgextern void DoCopyPlane ( XParms xp, Parms p, int64_t reps ); 203264fa531Smrg 204c37a63b8Smrgint 205533545b5SmrgInitCompositeWin(XParms xp, Parms p, int64_t reps); 206c37a63b8Smrg 207c37a63b8Smrgvoid 208c37a63b8SmrgEndCompositeWin (XParms xp, Parms p); 209c37a63b8Smrg 210c37a63b8Smrgvoid 211533545b5SmrgDoCompositeWinWin (XParms xp, Parms p, int64_t reps); 212c37a63b8Smrg 213c37a63b8Smrgint 214533545b5SmrgInitCompositePix(XParms xp, Parms p, int64_t reps); 215c37a63b8Smrg 216c37a63b8Smrgvoid 217c37a63b8SmrgEndCompositePix (XParms xp, Parms p); 218c37a63b8Smrg 219c37a63b8Smrgvoid 220533545b5SmrgDoCompositePixWin (XParms xp, Parms p, int64_t reps); 221c37a63b8Smrg 222264fa531Smrg/* do_complex.c */ 223533545b5Smrgextern int InitComplexPoly ( XParms xp, Parms p, int64_t reps ); 224533545b5Smrgextern void DoComplexPoly ( XParms xp, Parms p, int64_t reps ); 225264fa531Smrgextern void EndComplexPoly ( XParms xp, Parms p ); 226533545b5Smrgextern int InitGeneralPoly ( XParms xp, Parms p, int64_t reps ); 227533545b5Smrgextern void DoGeneralPoly ( XParms xp, Parms p, int64_t reps ); 228264fa531Smrg 229264fa531Smrg/* do_dots.c */ 230533545b5Smrgextern int InitDots ( XParms xp, Parms p, int64_t reps ); 231533545b5Smrgextern void DoDots ( XParms xp, Parms p, int64_t reps ); 232264fa531Smrgextern void EndDots ( XParms xp, Parms p ); 233264fa531Smrg 234264fa531Smrg/* do_lines.c */ 235533545b5Smrgextern int InitLines ( XParms xp, Parms p, int64_t reps ); 236533545b5Smrgextern int InitWideLines ( XParms xp, Parms p, int64_t reps ); 237533545b5Smrgextern int InitDashedLines ( XParms xp, Parms p, int64_t reps ); 238533545b5Smrgextern int InitWideDashedLines ( XParms xp, Parms p, int64_t reps ); 239533545b5Smrgextern int InitDoubleDashedLines ( XParms xp, Parms p, int64_t reps ); 240533545b5Smrgextern int InitWideDoubleDashedLines ( XParms xp, Parms p, int64_t reps ); 241533545b5Smrgextern void DoLines ( XParms xp, Parms p, int64_t reps ); 242264fa531Smrgextern void EndLines ( XParms xp, Parms p ); 243264fa531Smrg 244264fa531Smrg/* do_movewin.c */ 245533545b5Smrgextern int InitMoveWindows ( XParms xp, Parms p, int64_t reps ); 246533545b5Smrgextern void DoMoveWindows ( XParms xp, Parms p, int64_t reps ); 247264fa531Smrgextern void EndMoveWindows ( XParms xp, Parms p ); 248533545b5Smrgextern void DoResizeWindows ( XParms xp, Parms p, int64_t reps ); 249533545b5Smrgextern int InitCircWindows ( XParms xp, Parms p, int64_t reps ); 250533545b5Smrgextern void DoCircWindows ( XParms xp, Parms p, int64_t reps ); 251264fa531Smrgextern void EndCircWindows ( XParms xp, Parms p ); 252533545b5Smrgextern int InitMoveTree ( XParms xp, Parms p, int64_t reps ); 253533545b5Smrgextern void DoMoveTree ( XParms xp, Parms p, int64_t reps ); 254264fa531Smrgextern void EndMoveTree ( XParms xp, Parms p ); 255264fa531Smrg 256264fa531Smrg/* do_rects.c */ 257533545b5Smrgextern int InitRectangles ( XParms xp, Parms p, int64_t reps ); 258533545b5Smrgextern void DoRectangles ( XParms xp, Parms p, int64_t reps ); 259533545b5Smrgextern void DoOutlineRectangles ( XParms xp, Parms p, int64_t reps ); 260264fa531Smrgextern void EndRectangles ( XParms xp, Parms p ); 261264fa531Smrg 262264fa531Smrg/* do_segs.c */ 263533545b5Smrgextern int InitSegments ( XParms xp, Parms p, int64_t reps ); 264533545b5Smrgextern int InitDashedSegments ( XParms xp, Parms p, int64_t reps ); 265533545b5Smrgextern int InitDoubleDashedSegments ( XParms xp, Parms p, int64_t reps ); 266533545b5Smrgextern int InitHorizSegments ( XParms xp, Parms p, int64_t reps ); 267533545b5Smrgextern int InitWideHorizSegments ( XParms xp, Parms p, int64_t reps ); 268533545b5Smrgextern int InitVertSegments ( XParms xp, Parms p, int64_t reps ); 269533545b5Smrgextern int InitWideVertSegments ( XParms xp, Parms p, int64_t reps ); 270533545b5Smrgextern void DoSegments ( XParms xp, Parms p, int64_t reps ); 271264fa531Smrgextern void EndSegments ( XParms xp, Parms p ); 272264fa531Smrg 273264fa531Smrg/* do_simple.c */ 274533545b5Smrgextern void DoNoOp ( XParms xp, Parms p, int64_t reps ); 275533545b5Smrgextern void DoGetAtom ( XParms xp, Parms p, int64_t reps ); 276533545b5Smrgextern void DoQueryPointer ( XParms xp, Parms p, int64_t reps ); 277533545b5Smrgextern int InitGetProperty ( XParms xp, Parms p, int64_t reps ); 278533545b5Smrgextern void DoGetProperty ( XParms xp, Parms p, int64_t reps ); 279264fa531Smrg 280264fa531Smrg/* do_text.c */ 281533545b5Smrgextern int InitText ( XParms xp, Parms p, int64_t reps ); 282533545b5Smrgextern int InitText16 ( XParms xp, Parms p, int64_t reps ); 283533545b5Smrgextern void DoText ( XParms xp, Parms p, int64_t reps ); 284533545b5Smrgextern void DoText16 ( XParms xp, Parms p, int64_t reps ); 285533545b5Smrgextern void DoPolyText ( XParms xp, Parms p, int64_t reps ); 286533545b5Smrgextern void DoPolyText16 ( XParms xp, Parms p, int64_t reps ); 287533545b5Smrgextern void DoImageText ( XParms xp, Parms p, int64_t reps ); 288533545b5Smrgextern void DoImageText16 ( XParms xp, Parms p, int64_t reps ); 289264fa531Smrgextern void ClearTextWin ( XParms xp, Parms p ); 290264fa531Smrgextern void EndText ( XParms xp, Parms p ); 291264fa531Smrgextern void EndText16 ( XParms xp, Parms p ); 292264fa531Smrg#ifdef XFT 293533545b5Smrgextern int InitAAText (XParms xp, Parms p, int64_t reps ); 294533545b5Smrgextern void DoAAText (XParms xp, Parms p, int64_t reps ); 295264fa531Smrgextern void EndAAText ( XParms xp, Parms p ); 296264fa531Smrg#endif 297264fa531Smrg 298264fa531Smrg/* do_traps.c */ 299533545b5Smrgextern int InitTrapezoids ( XParms xp, Parms p, int64_t reps ); 300533545b5Smrgextern void DoTrapezoids ( XParms xp, Parms p, int64_t reps ); 301264fa531Smrgextern void EndTrapezoids ( XParms xp, Parms p ); 302736a7e2cSmrg#if defined(XRENDER) && defined(XFT) 303533545b5Smrgextern int InitFixedTraps ( XParms xp, Parms p, int64_t reps ); 304533545b5Smrgextern void DoFixedTraps ( XParms xp, Parms p, int64_t reps ); 305264fa531Smrgextern void EndFixedTraps ( XParms xp, Parms p ); 306533545b5Smrgextern int InitFixedTrapezoids ( XParms xp, Parms p, int64_t reps ); 307533545b5Smrgextern void DoFixedTrapezoids ( XParms xp, Parms p, int64_t reps ); 308264fa531Smrgextern void EndFixedTrapezoids ( XParms xp, Parms p ); 309264fa531Smrg#endif 310264fa531Smrg 311264fa531Smrg/* do_tris.c */ 312533545b5Smrgextern int InitTriangles ( XParms xp, Parms p, int64_t reps ); 313533545b5Smrgextern void DoTriangles ( XParms xp, Parms p, int64_t reps ); 314264fa531Smrgextern void EndTriangles ( XParms xp, Parms p ); 315264fa531Smrg 316264fa531Smrg/* do_valgc.c */ 317533545b5Smrgextern int InitGC ( XParms xp, Parms p, int64_t reps ); 318533545b5Smrgextern void DoChangeGC ( XParms xp, Parms p, int64_t reps ); 319264fa531Smrgextern void EndGC ( XParms xp, Parms p ); 320264fa531Smrg 321264fa531Smrg/* do_windows.c */ 322533545b5Smrgextern int CreateParents ( XParms xp, Parms p, int64_t reps ); 323533545b5Smrgextern void MapParents ( XParms xp, Parms p, int64_t reps ); 324264fa531Smrgextern void MapParentsCleanup ( XParms xp, Parms p ); 325533545b5Smrgextern int InitCreate ( XParms xp, Parms p, int64_t reps ); 326533545b5Smrgextern void CreateChildren ( XParms xp, Parms p, int64_t reps ); 327264fa531Smrgextern void DestroyChildren ( XParms xp, Parms p ); 328264fa531Smrgextern void EndCreate ( XParms xp, Parms p ); 329533545b5Smrgextern int InitMap ( XParms xp, Parms p, int64_t reps ); 330533545b5Smrgextern void UnmapParents ( XParms xp, Parms p, int64_t reps ); 331264fa531Smrgextern void UnmapParentsCleanup ( XParms xp, Parms p); 332533545b5Smrgextern int InitDestroy ( XParms xp, Parms p, int64_t reps ); 333533545b5Smrgextern void DestroyParents ( XParms xp, Parms p, int64_t reps ); 334264fa531Smrgextern void RenewParents ( XParms xp, Parms p ); 335533545b5Smrgextern int InitPopups ( XParms xp, Parms p, int64_t reps ); 336533545b5Smrgextern void DoPopUps ( XParms xp, Parms p, int64_t reps ); 337264fa531Smrgextern void EndPopups ( XParms xp, Parms p ); 338264fa531Smrg 339264fa531Smrg 340264fa531Smrg/***************************************************************************** 341264fa531Smrg 342264fa531SmrgAbout x11perf: 343264fa531Smrg 344264fa531SmrgMany graphics benchmarks assume that the graphics device is used to display the 345264fa531Smrgoutput of a single fancy graphics application, and that the user gets his work 346264fa531Smrgdone on some other device, like a terminal. Such benchmarks usually measure 347264fa531Smrgdrawing speed for lines, polygons, text, etc. 348264fa531Smrg 349264fa531SmrgSince workstations are not used as standalone graphics engines, but as 350264fa531Smrgsuper-terminals, x11perf measures window management performance as well as 351c9e4df9bSmrgtraditional graphics performance. x11perf includes benchmarks for the time it 352264fa531Smrgtakes to create and map windows (as when you start up an application); to map a 353264fa531Smrgpre-existing set of windows onto the screen (as when you deiconify an 354264fa531Smrgapplication or pop up a menu); and to rearrange windows (as when you slosh 355264fa531Smrgwindows to and fro trying to find the one you want). 356264fa531Smrg 357264fa531Smrgx11perf also measures graphics performance for operations not normally used in 358264fa531Smrgstandalone graphics displays, but are nonetheless used frequently by X 359264fa531Smrgapplications. Such operations include CopyPlane (used by the PostScript 360264fa531Smrgpreviewer), scrolling (used in text windows), and various stipples and tiles 361264fa531Smrg(used for CAD and half-toning, respectively). 362264fa531Smrg 363264fa531Smrgx11perf DOES NOT attempt to whittle down measurements to a single ``HeXStones'' 364264fa531Smrgnumber. We consider such numbers to be uninformative at best and misleading at 365264fa531Smrgworst. x11perf should be used to analyze particular strengths and weaknesses 366264fa531Smrgof servers, and is most useful when used by a server writer who wants to 367264fa531Smrganalyze and improve a server. 368264fa531Smrg 369264fa531SmrgFor repeatable results, x11perf should be run using a local connection on a 370264fa531Smrgfreshly-started server. The default configuration runs each test 5 times, in 371264fa531Smrgorder to see if each trial takes approximately the same amount of time. 372264fa531SmrgStrange glitches should be examined; if non-repeatable I chalk them up to 373264fa531Smrgdaemons and network traffic. Each trial is run for 5 seconds, in order to 374264fa531Smrgreduce random time differences. The number of objects processed per second is 375264fa531Smrgdisplayed to 3 significant digits, but you'll be lucky on most UNIX system if 376264fa531Smrgthe numbers are actually consistent to 2 digits. 377264fa531Smrg 378264fa531SmrgThe current program is mostly the responsibility of Joel McCormack. It is 379264fa531Smrgbased upon the x11perf developed by Phil Karlton, Susan Angebranndt, and Chris 380264fa531SmrgKent, who wanted to assess performance differences between various servers. 381264fa531SmrgMary Walker, Todd Newman, and I added several tests in order to write and tune 382264fa531Smrgthe pmax (DECStation 3100) servers. For a general release to the world, I've 383264fa531Smrgbasically rewritten x11perf to ease making comparisons between widely varying 384264fa531Smrgmachines, to cover most important X functionality (the notable exception being 385264fa531Smrgwide lines), and to exercise graphics operations in as many different 386264fa531Smrgorientations and alignments as possible. 387264fa531Smrg 388264fa531Smrg******************************************************************************/ 389