home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / X11R6 / bin / Xmark < prev    next >
Text File  |  1999-09-03  |  27KB  |  639 lines

  1. #! /bin/sh
  2. #$XConsortium: Xmark.sh,v 1.6 94/12/09 22:52:57 gildea Exp $
  3. #XPC Header: Xmark,v 1.15 93/04/12 10:10:07 hmgr Exp
  4. #
  5. ############################################################
  6. # Xmark version XPC Revision: 1.15
  7. #
  8. # Usage: Xmark datafile
  9. #
  10. ############################################################
  11. # $XFree86: xc/programs/x11perf/Xmark.sh,v 1.2 1997/01/04 12:20:20 dawes Exp $
  12. #
  13. #
  14. # CHANGE HISTORY:
  15. #
  16. # X11perfcompDR  --  Creates a Digital Review compatible breakdown of 
  17. # x11perf v1.2 results as described in "Take Your Pick Of Graphics"
  18. # by John Montgomery, Digital Review, May 7th, 1990, Page 44. 
  19. # 8/30/90  v1.0 program created by Lonnie Mandigo 
  20. # 1/18/91  Modification by  Lonnie Mandigo
  21. #       Fixed a bug to include UCIRC in data.
  22. # 2/5/91   Modification by  Lonnie Mandigo
  23. #          Now removes sum.tmp file when finished.
  24. # 3/18/91  v1.01 Increased resolution to handle zero ratios.
  25. #          Minor aesethic cleanups and better error handling.
  26. #          Lonnie Mandigo and Jason Levitt (jason@cs.utexas.edu)
  27. # 3/4/93   Converted to Xmark by Bob Kuseski
  28. #          to produce a single number representing the ratio between 
  29. #       the xpc weighted averages of the output from x11perf Rev 1.3
  30. #       for the server under test and a SparcStation 1
  31. # 3/10/93  Changed to produce THREE output numbers and added bounds
  32. #       checking of input data.
  33. # 3/15/93  Removed usage of '-F' in grep for compatibility reasons
  34. # 3/16/93  Corrected usage of substr() and used two greps versus fgrep
  35. # 4/12/93  Eliminated use of functions and \n in echo
  36. #
  37. ############################################################
  38. # Copyright (c) 1993 by Hewlett-Packard Company
  39. #
  40. # Permission to use, copy, modify, and  distribute  this  software and its
  41. # documentation  for  any  purpose  and  without  fee is  hereby  granted,
  42. # provided that the above  copyright  notice appear in all copies and that
  43. # both  the  copyright  notice  and  this  permission   notice  appear  in
  44. # supporting  documentation, and that the name of  Hewlett-Packard  not be
  45. # used in  advertising  or publicity  pertaining  to  distribution  of the
  46. # software without specific, written prior permission.
  47. #
  48. ############################################################
  49. # Instructions:
  50. # Usage: Xmark datafile
  51. #
  52. # where: 'datafile' is created by running x11perf Rev 1.3
  53. # with the flags below:
  54. #
  55. #      x11perf -display mysystem:0.0 -v1.3 -rop GXcopy GXxor -all > datafile
  56. #   or
  57. #      x11perf -display mysystem:0.0 -v1.3 -rop GXcopy -all > datafile
  58. #      x11perf -display mysystem:0.0 -v1.3 -rop GXxor -all >> datafile
  59. #   or
  60. #      x11perf -display mysystem:0.0 -v1.3 -rop GXxor -all > datafile
  61. #      x11perf -display mysystem:0.0 -v1.3 -rop GXcopy -all >> datafile
  62. #
  63. # Xmark summarizes the results relative to the data contained in
  64. # the datafile.  Xmark writes to standard out, so if you want to
  65. # capture the output in a file, use:
  66. #   Xmark datafile > output.comp
  67. #
  68. # The 'output.comp' contains THREE numbers:
  69. #        - Weighted x11perf number of the server under test
  70. #        - Weighted x11perf number of the SparcStation 1
  71. #        - Xmark = the ratio of the above two numbers
  72. #
  73. # Note the SparcStation 1 number comes from a:
  74. #   X11R5 Xsun
  75. #   Standard with SunOS 4.1.2
  76. #   SunOs 4.1.2
  77. #   CG3 dumb Color Frame Buffer
  78. #
  79. ############################################################
  80. ############################################################
  81.  
  82. # Cleanup on interrupt
  83. trap \
  84. "echo Interrupt: removing temporary files. >& 2 ;rm -f temp.$$ rates.$$ awkfile.$$; exit 1" 1 2 3 9 15
  85.  
  86. # Must have only one file specified
  87. if [ "$#" -ne 1 ]
  88. then
  89.     echo "Usage: $0 datafile" >& 2
  90.     exit 1
  91. fi
  92.  
  93. # Must be an ordinary file
  94. if [ ! -f "$1" ]
  95. then
  96.     echo "Error: data file does not exist or is not ordinary." >& 2
  97.     exit 1
  98. fi
  99.  
  100. # See if the date file has the correct number of results.
  101. LC1=`grep trep "$1" | wc -l`
  102. LC2=441        # Number of test without Shared Memory Transport
  103. LC3=447        # Number of test with Shared Memory Transport
  104.  
  105. if [ "$LC1" -ne "$LC2" ] && [ "$LC1" -ne "$LC3" ]
  106. then
  107.     echo "WARNING: datafile contains $LC1, not "$LC2" or "$LC3" 'trep' results;" >& 2
  108.     if [ "$LC1" -gt "$LC2" ]
  109.     then
  110.     echo "extra results are probably OK." >& 2
  111.     echo ""
  112.     fi
  113. fi
  114.  
  115. DATA=$1
  116.  
  117. grep trep $DATA        > temp.$$
  118. grep server $DATA    >> temp.$$
  119.  
  120. # convert the averages to standard form.
  121.  
  122. cat > awkfile.$$ <<'EOS'
  123.     BEGIN {
  124.     weight["10x10 rectangle"] = 37;
  125.     weight["Scroll 500x500 pixels"] = 33;
  126.     weight["100x100 rectangle"] = 32;
  127.     weight["10-pixel line segment"] = 31;
  128.     weight["10-pixel line"] = 30;
  129.     weight["PutImage 100x100 square"] = 30;
  130.     weight["Scroll 100x100 pixels"] = 29;
  131.     weight["PutImage 500x500 square"] = 29;
  132.     weight["500x500 rectangle"] = 29;
  133.     weight["100-pixel line"] = 28;
  134.     weight["Char in 60-char line (9x15)"] = 28;
  135.     weight["Char in 80-char image line (6x13)"] = 28;
  136.     weight["Char in 80-char line (6x13)"] = 27;
  137.     weight["Char in 80-char image line (TR 10)"] = 27;
  138.     weight["100-pixel line segment"] = 27;
  139.     weight["Char in 80-char line (TR 10)"] = 27;
  140.     weight["Char in 60-char image line (9x15)"] = 26;
  141.     weight["Copy 100x100 from pixmap to window"] = 26;
  142.     weight["Copy 500x500 from pixmap to window"] = 26;
  143.     weight["Char in 70-char line (8x13)"] = 24;
  144.     weight["500-pixel line"] = 24;
  145.     weight["Char in 20/40/20 line (6x13, TR 10)"] = 23;
  146.     weight["Char in 70-char image line (8x13)"] = 23;
  147.     weight["Change graphics context"] = 23;
  148.     weight["Copy 100x100 from window to window"] = 23;
  149.     weight["10-pixel horizontal line segment"] = 23;
  150.     weight["10-pixel vertical line segment"] = 23;
  151.     weight["Copy 500x500 from window to window"] = 22;
  152.     weight["Char in 30-char line (TR 24)"] = 22;
  153.     weight["Char16 in 40-char line (k14)"] = 22;
  154.     weight["500-pixel line segment"] = 22;
  155.     weight["Char in 30-char image line (TR 24)"] = 22;
  156.     weight["100-pixel horizontal line segment"] = 22;
  157.     weight["100-pixel vertical line segment"] = 22;
  158.     weight["Scroll 10x10 pixels"] = 21;
  159.     weight["Char16 in 40-char image line (k14)"] = 21;
  160.     weight["GetImage 500x500 square"] = 21;
  161.     weight["PutImage 10x10 square"] = 20;
  162.     weight["GetImage 100x100 square"] = 20;
  163.     weight["Move window (4 kids)"] = 20;
  164.     weight["Copy 10x10 from pixmap to window"] = 20;
  165.     weight["100x100 4x4 tiled rectangle"] = 20;
  166.     weight["Copy 100x100 from window to pixmap"] = 19;
  167.     weight["Hide/expose window via popup (4 kids)"] = 19;
  168.     weight["Copy 500x500 from window to pixmap"] = 19;
  169.     weight["500-pixel horizontal line segment"] = 19;
  170.     weight["500-pixel vertical line segment"] = 19;
  171.     weight["Fill 10x10 equivalent triangle"] = 19;
  172.     weight["Char16 in 23-char line (k24)"] = 19;
  173.     weight["1x1 rectangle"] = 19;
  174.     weight["Char16 in 7/14/7 line (k14, k24)"] = 18;
  175.     weight["10x10 4x4 tiled rectangle"] = 18;
  176.     weight["100-pixel line segment (1 kid)"] = 18;
  177.     weight["100x100 rectangle outline"] = 18;
  178.     weight["Move window via parent (4 kids)"] = 18;
  179.     weight["GetAtomName"] = 18;
  180.     weight["GetProperty"] = 18;
  181.     weight["Char16 in 23-char image line (k24)"] = 18;
  182.     weight["100-pixel line segment (3 kids)"] = 17;
  183.     weight["Resize window (4 kids)"] = 17;
  184.     weight["Map window via parent (4 kids)"] = 17;
  185.     weight["Copy 100x100 from pixmap to pixmap"] = 17;
  186.     weight["Unmap window via parent (4 kids)"] = 17;
  187.     weight["100-pixel line segment (2 kids)"] = 17;
  188.     weight["10-pixel solid circle"] = 17;
  189.     weight["1-pixel line"] = 17;
  190.     weight["Move window (16 kids)"] = 16;
  191.     weight["Fill 100x100 equivalent triangle"] = 16;
  192.     weight["Hide/expose window via popup (16 kids)"] = 16;
  193.     weight["Move window via parent (16 kids)"] = 16;
  194.     weight["10x10 rectangle outline"] = 16;
  195.     weight["Destroy window via parent (4 kids)"] = 16;
  196.     weight["Create unmapped window (4 kids)"] = 16;
  197.     weight["Copy 10x10 from window to window"] = 16;
  198.     weight["Copy 100x100 1-bit deep plane"] = 16;
  199.     weight["10-pixel circle"] = 16;
  200.     weight["100x100 opaque stippled rectangle"] = 16;
  201.     weight["500x500 4x4 tiled rectangle"] = 16;
  202.     weight["100x100 stippled rectangle"] = 16;
  203.     weight["Copy 500x500 from pixmap to pixmap"] = 16;
  204.     weight["Create and map subwindows (16 kids)"] = 16;
  205.     weight["10x10 stippled rectangle"] = 16;
  206.     weight["Resize window (16 kids)"] = 16;
  207.     weight["Map window via parent (16 kids)"] = 15;
  208.     weight["100-pixel solid circle"] = 15;
  209.     weight["Copy 500x500 1-bit deep plane"] = 15;
  210.     weight["500x500 rectangle outline"] = 15;
  211.     weight["Create and map subwindows (4 kids)"] = 15;
  212.     weight["Destroy window via parent (16 kids)"] = 15;
  213.     weight["10x1 wide horizontal line segment"] = 15;
  214.     weight["10x1 wide vertical line segment"] = 15;
  215.     weight["100x100 161x145 tiled rectangle"] = 15;
  216.     weight["1-pixel line segment"] = 15;
  217.     weight["Unmap window via parent (16 kids)"] = 15;
  218.     weight["Fill 100x100 trapezoid"] = 14;
  219.     weight["100-pixel circle"] = 14;
  220.     weight["10x10 opaque stippled rectangle"] = 14;
  221.     weight["100-pixel dashed line"] = 14;
  222.     weight["500x500 161x145 tiled rectangle"] = 14;
  223.     weight["Copy 10x10 from window to pixmap"] = 14;
  224.     weight["100x10 wide horizontal line segment"] = 14;
  225.     weight["100x10 wide vertical line segment"] = 14;
  226.     weight["100x100 wide rectangle outline"] = 14;
  227.     weight["100x100 216x208 tiled rectangle"] = 14;
  228.     weight["Dot"] = 14;
  229.     weight["10x10 161x145 tiled rectangle"] = 14;
  230.     weight["Fill 100x100 equivalent complex polygons"] = 14;
  231.     weight["Move window (50 kids)"] = 13;
  232.     weight["Move window via parent (50 kids)"] = 13;
  233.     weight["Circulate window (16 kids)"] = 13;
  234.     weight["100-pixel dashed segment"] = 13;
  235.     weight["Create and map subwindows (50 kids)"] = 13;
  236.     weight["Create and map subwindows (25 kids)"] = 13;
  237.     weight["10x10 wide rectangle outline"] = 13;
  238.     weight["500x500 216x208 tiled rectangle"] = 13;
  239.     weight["Hide/expose window via popup (25 kids)"] = 13;
  240.     weight["Create and map subwindows (100 kids)"] = 13;
  241.     weight["Map window via parent (50 kids)"] = 13;
  242.     weight["Fill 10x10 trapezoid"] = 13;
  243.     weight["100x10 wide line"] = 13;
  244.     weight["10x10 216x208 tiled rectangle"] = 13;
  245.     weight["10-pixel dashed line"] = 13;
  246.     weight["Map window via parent (100 kids)"] = 13;
  247.     weight["Copy 10x10 from pixmap to pixmap"] = 13;
  248.     weight["Map window via parent (25 kids)"] = 13;
  249.     weight["Create unmapped window (25 kids)"] = 13;
  250.     weight["Move window (25 kids)"] = 13;
  251.     weight["Circulate window (4 kids)"] = 12;
  252.     weight["Move window via parent (25 kids)"] = 12;
  253.     weight["Create unmapped window (16 kids)"] = 12;
  254.     weight["Create and map subwindows (75 kids)"] = 12;
  255.     weight["500x500 opaque stippled rectangle"] = 12;
  256.     weight["Hide/expose window via popup (100 kids)"] = 12;
  257.     weight["Create and map subwindows (200 kids)"] = 12;
  258.     weight["Hide/expose window via popup (50 kids)"] = 12;
  259.     weight["500x50 wide horizontal line segment"] = 12;
  260.     weight["500x50 wide vertical line segment"] = 12;
  261.     weight["100x100 161x145 opaque stippled rectangle"] = 12;
  262.     weight["Resize window (25 kids)"] = 12;
  263.     weight["Map window via parent (200 kids)"] = 12;
  264.     weight["10x10 161x145 opaque stippled rectangle"] = 12;
  265.     weight["X protocol NoOperation"] = 12;
  266.     weight["10-pixel dashed segment"] = 12;
  267.     weight["Resize unmapped window (16 kids)"] = 12;
  268.     weight["Create unmapped window (100 kids)"] = 12;
  269.     weight["Fill 10x10 equivalent complex polygon"] = 12;
  270.     weight["Map window via parent (75 kids)"] = 12;
  271.     weight["100x100 161x145 stippled rectangle"] = 12;
  272.     weight["Moved unmapped window (16 kids)"] = 12;
  273.     weight["Copy 10x10 1-bit deep plane"] = 12;
  274.     weight["Unmap window via parent (50 kids)"] = 12;
  275.     weight["GetImage 10x10 square"] = 12;
  276.     weight["Fill 100x100 tiled trapezoid"] = 12;
  277.     weight["500x500 wide rectangle outline"] = 12;
  278.     weight["Fill 100x100 stippled trapezoid"] = 12;
  279.     weight["500x500 stippled rectangle"] = 12;
  280.     weight["Moved unmapped window (4 kids)"] = 12;
  281.     weight["10x10 161x145 stippled rectangle"] = 12;
  282.     weight["Unmap window via parent (25 kids)"] = 12;
  283.     weight["500-pixel solid circle"] = 12;
  284.     weight["Create unmapped window (50 kids)"] = 12;
  285.     weight["Destroy window via parent (25 kids)"] = 11;
  286.     weight["Resize window (200 kids)"] = 11;
  287.     weight["100-pixel filled ellipse"] = 11;
  288.     weight["Hide/expose window via popup (200 kids)"] = 11;
  289.     weight["Unmap window via parent (100 kids)"] = 11;
  290.     weight["Circulate window (25 kids)"] = 11;
  291.     weight["Resize window (50 kids)"] = 11;
  292.     weight["Hide/expose window via popup (75 kids)"] = 11;
  293.     weight["Destroy window via parent (100 kids)"] = 11;
  294.     weight["Destroy window via parent (50 kids)"] = 11;
  295.     weight["Create unmapped window (200 kids)"] = 11;
  296.     weight["Fill 100x100 opaque stippled trapezoid"] = 11;
  297.     weight["Move window via parent (75 kids)"] = 11;
  298.     weight["500-pixel filled ellipse"] = 11;
  299.     weight["Resize unmapped window (4 kids)"] = 11;
  300.     weight["Move window via parent (200 kids)"] = 11;
  301.     weight["Move window (75 kids)"] = 11;
  302.     weight["Fill 10x10 tiled trapezoid"] = 11;
  303.     weight["Fill 100x100 161x145 stippled trapezoid"] = 11;
  304.     weight["Move window (200 kids)"] = 11;
  305.     weight["Fill 10x10 stippled trapezoid"] = 11;
  306.     weight["Create unmapped window (75 kids)"] = 11;
  307.     weight["100-pixel fill chord partial circle"] = 10;
  308.     weight["Circulate Unmapped window (16 kids)"] = 10;
  309.     weight["Circulate window (50 kids)"] = 10;
  310.     weight["Move window (100 kids)"] = 10;
  311.     weight["Circulate window (100 kids)"] = 10;
  312.     weight["Move window via parent (100 kids)"] = 10;
  313.     weight["500x50 wide line"] = 10;
  314.     weight["500-pixel circle"] = 10;
  315.     weight["100-pixel double-dashed line"] = 10;
  316.     weight["Unmap window via parent (200 kids)"] = 10;
  317.     weight["Moved unmapped window (50 kids)"] = 10;
  318.     weight["10-pixel filled ellipse"] = 10;
  319.     weight["Resize window (75 kids)"] = 10;
  320.     weight["Fill 100x100 161x145 tiled trapezoid"] = 10;
  321.     weight["500x500 161x145 opaque stippled rectangle"] = 10;
  322.     weight["Fill 100x100 161x145 opaque stippled trapezoid"] = 10;
  323.     weight["Unmap window via parent (75 kids)"] = 10;
  324.     weight["Resize unmapped window (25 kids)"] = 10;
  325.     weight["100-pixel ellipse"] = 10;
  326.     weight["Destroy window via parent (75 kids)"] = 10;
  327.     weight["Fill 1x1 equivalent triangle"] = 10;
  328.     weight["500-pixel ellipse"] = 10;
  329.     weight["Fill 10x10 opaque stippled trapezoid"] = 10;
  330.     weight["Resize window (100 kids)"] = 10;
  331.     weight["500x500 161x145 stippled rectangle"] = 10;
  332.     weight["Destroy window via parent (200 kids)"] = 10;
  333.     weight["100-pixel fill slice partial circle"] = 10;
  334.     weight["Fill 100x100 216x208 tiled trapezoid"] = 9;
  335.     weight["100-pixel wide circle"] = 9;
  336.     weight["Moved unmapped window (25 kids)"] = 9;
  337.     weight["10x1 wide line"] = 9;
  338.     weight["Resize unmapped window (100 kids)"] = 9;
  339.     weight["100-pixel double-dashed segment"] = 9;
  340.     weight["10-pixel fill chord partial circle"] = 9;
  341.     weight["Circulate window (75 kids)"] = 9;
  342.     weight["100-pixel partial circle"] = 9;
  343.     weight["Circulate window (200 kids)"] = 9;
  344.     weight["Fill 10x10 161x145 stippled trapezoid"] = 9;
  345.     weight["Circulate Unmapped window (4 kids)"] = 9;
  346.     weight["100-pixel dashed circle"] = 9;
  347.     weight["Circulate Unmapped window (25 kids)"] = 9;
  348.     weight["10-pixel ellipse"] = 9;
  349.     weight["Resize unmapped window (50 kids)"] = 9;
  350.     weight["100-pixel partial ellipse"] = 9;
  351.     weight["Fill 10x10 161x145 tiled trapezoid"] = 8;
  352.     weight["100x10 wide dashed line"] = 8;
  353.     weight["10-pixel partial circle"] = 8;
  354.     weight["100-pixel wide ellipse"] = 8;
  355.     weight["Fill 10x10 161x145 opaque stippled trapezoid"] = 8;
  356.     weight["100-pixel wide partial circle"] = 8;
  357.     weight["Moved unmapped window (75 kids)"] = 8;
  358.     weight["Resize unmapped window (75 kids)"] = 8;
  359.     weight["Circulate Unmapped window (100 kids)"] = 8;
  360.     weight["100-pixel fill slice partial ellipse"] = 8;
  361.     weight["100x10 wide double-dashed line"] = 8;
  362.     weight["10-pixel fill slice partial circle"] = 8;
  363.     weight["100-pixel dashed ellipse"] = 8;
  364.     weight["100-pixel fill chord partial ellipse"] = 8;
  365.     weight["100-pixel wide dashed circle"] = 8;
  366.     weight["100-pixel double-dashed circle"] = 8;
  367.     weight["Fill 10x10 216x208 tiled trapezoid"] = 7;
  368.     weight["Moved unmapped window (100 kids)"] = 7;
  369.     weight["10-pixel wide circle"] = 7;
  370.     weight["Moved unmapped window (200 kids)"] = 7;
  371.     weight["Resize unmapped window (200 kids)"] = 7;
  372.     weight["Circulate Unmapped window (50 kids)"] = 7;
  373.     weight["1-pixel circle"] = 7;
  374.     weight["10-pixel partial ellipse"] = 7;
  375.     weight["500-pixel wide circle"] = 7;
  376.     weight["500-pixel wide ellipse"] = 7;
  377.     weight["100-pixel wide partial ellipse"] = 7;
  378.     weight["Circulate Unmapped window (75 kids)"] = 7;
  379.     weight["100-pixel wide dashed ellipse"] = 7;
  380.     weight["100-pixel double-dashed ellipse"] = 7;
  381.     weight["10-pixel wide ellipse"] = 6;
  382.     weight["10-pixel wide partial circle"] = 6;
  383.     weight["1-pixel solid circle"] = 6;
  384.     weight["100-pixel wide double-dashed circle"] = 6;
  385.     weight["Circulate Unmapped window (200 kids)"] = 6;
  386.     weight["1x1 4x4 tiled rectangle"] = 6;
  387.     weight["10-pixel wide partial ellipse"] = 6;
  388.     weight["10-pixel fill chord partial ellipse"] = 6;
  389.     weight["10-pixel fill slice partial ellipse"] = 6;
  390.     weight["100-pixel wide double-dashed ellipse"] = 5;
  391.     weight["1x1 161x145 tiled rectangle"] = 5;
  392.     weight["1x1 216x208 tiled rectangle"] = 5;
  393.     weight["1x1 stippled rectangle"] = 5;
  394.     weight["1x1 opaque stippled rectangle"] = 4;
  395.     weight["1x1 161x145 opaque stippled rectangle"] = 4;
  396.     weight["1x1 161x145 stippled rectangle"] = 4;
  397.     weight["ShmPutImage 10x10 square"] = 0;
  398.     weight["ShmPutImage 100x100 square"] = 0;
  399.     weight["ShmPutImage 500x500 square"] = 0;
  400.     weight["(xor) 100-pixel line"] = 16;
  401.     weight["(xor) 10-pixel line segment"] = 14;
  402.     weight["(xor) 10-pixel line"] = 13;
  403.     weight["(xor) 100-pixel line segment"] = 13;
  404.     weight["(xor) 500-pixel line segment"] = 13;
  405.     weight["(xor) 500-pixel line"] = 12;
  406.     weight["(xor) 10x10 rectangle"] = 12;
  407.     weight["(xor) 100x100 rectangle"] = 12;
  408.     weight["(xor) 100-pixel vertical line segment"] = 10;
  409.     weight["(xor) 100x100 rectangle outline"] = 10;
  410.     weight["(xor) 100-pixel horizontal line segment"] = 10;
  411.     weight["(xor) 10-pixel vertical line segment"] = 10;
  412.     weight["(xor) 100-pixel line segment (2 kids)"] = 10;
  413.     weight["(xor) 10-pixel horizontal line segment"] = 10;
  414.     weight["(xor) 100-pixel line segment (1 kid)"] = 9;
  415.     weight["(xor) Char in 80-char line (6x13)"] = 9;
  416.     weight["(xor) 500-pixel vertical line segment"] = 9;
  417.     weight["(xor) Copy 100x100 from pixmap to window"] = 9;
  418.     weight["(xor) 10x10 rectangle outline"] = 9;
  419.     weight["(xor) 500-pixel horizontal line segment"] = 9;
  420.     weight["(xor) 100-pixel line segment (3 kids)"] = 9;
  421.     weight["(xor) PutImage 100x100 square"] = 9;
  422.     weight["(xor) 500x500 rectangle outline"] = 9;
  423.     weight["(xor) Char in 80-char line (TR 10)"] = 9;
  424.     weight["(xor) 500x500 rectangle"] = 9;
  425.     weight["(xor) Copy 500x500 from pixmap to window"] = 8;
  426.     weight["(xor) Char in 20/40/20 line (6x13, TR 10)"] = 8;
  427.     weight["(xor) 100-pixel dashed line"] = 8;
  428.     weight["(xor) Copy 100x100 1-bit deep plane"] = 8;
  429.     weight["(xor) Char in 60-char line (9x15)"] = 8;
  430.     weight["(xor) Char16 in 40-char line (k14)"] = 7;
  431.     weight["(xor) Fill 10x10 equivalent triangle"] = 7;
  432.     weight["(xor) PutImage 500x500 square"] = 7;
  433.     weight["(xor) Copy 100x100 from window to window"] = 7;
  434.     weight["(xor) 100-pixel dashed segment"] = 7;
  435.     weight["(xor) 100x100 wide rectangle outline"] = 6;
  436.     weight["(xor) Char16 in 7/14/7 line (k14, k24)"] = 6;
  437.     weight["(xor) Fill 100x100 trapezoid"] = 6;
  438.     weight["(xor) 100-pixel solid circle"] = 6;
  439.     weight["(xor) 10-pixel solid circle"] = 6;
  440.     weight["(xor) 1-pixel line segment"] = 6;
  441.     weight["(xor) 1-pixel line"] = 6;
  442.     weight["(xor) 10x1 wide horizontal line segment"] = 6;
  443.     weight["(xor) 10x1 wide vertical line segment"] = 6;
  444.     weight["(xor) Copy 100x100 from pixmap to pixmap"] = 6;
  445.     weight["(xor) 10-pixel dashed line"] = 6;
  446.     weight["(xor) Char in 30-char line (TR 24)"] = 6;
  447.     weight["(xor) Fill 100x100 equivalent triangle"] = 6;
  448.     weight["(xor) Copy 10x10 from pixmap to window"] = 6;
  449.     weight["(xor) Fill 10x10 trapezoid"] = 6;
  450.     weight["(xor) Char in 70-char line (8x13)"] = 6;
  451.     weight["(xor) 100-pixel circle"] = 6;
  452.     weight["(xor) Copy 100x100 from window to pixmap"] = 6;
  453.     weight["(xor) 10-pixel dashed segment"] = 5;
  454.     weight["(xor) 10-pixel circle"] = 5;
  455.     weight["(xor) 10x10 wide rectangle outline"] = 5;
  456.     weight["(xor) 100x100 stippled rectangle"] = 5;
  457.     weight["(xor) 100-pixel filled ellipse"] = 5;
  458.     weight["(xor) 10x10 4x4 tiled rectangle"] = 5;
  459.     weight["(xor) PutImage 10x10 square"] = 5;
  460.     weight["(xor) Copy 500x500 from window to window"] = 5;
  461.     weight["(xor) 500x500 wide rectangle outline"] = 5;
  462.     weight["(xor) 10x10 stippled rectangle"] = 5;
  463.     weight["(xor) 100x10 wide line"] = 5;
  464.     weight["(xor) 100x10 wide horizontal line segment"] = 5;
  465.     weight["(xor) 100x10 wide vertical line segment"] = 5;
  466.     weight["(xor) Scroll 100x100 pixels"] = 5;
  467.     weight["(xor) Char16 in 23-char line (k24)"] = 5;
  468.     weight["(xor) Dot"] = 5;
  469.     weight["(xor) Copy 500x500 1-bit deep plane"] = 5;
  470.     weight["(xor) 100-pixel ellipse"] = 5;
  471.     weight["(xor) 100x100 4x4 tiled rectangle"] = 5;
  472.     weight["(xor) Copy 10x10 1-bit deep plane"] = 5;
  473.     weight["(xor) 1x1 rectangle"] = 5;
  474.     weight["(xor) 500-pixel solid circle"] = 4;
  475.     weight["(xor) 500-pixel filled ellipse"] = 4;
  476.     weight["(xor) 10-pixel filled ellipse"] = 4;
  477.     weight["(xor) Fill 100x100 stippled trapezoid"] = 4;
  478.     weight["(xor) 500x50 wide line"] = 4;
  479.     weight["(xor) 500-pixel circle"] = 4;
  480.     weight["(xor) 100-pixel double-dashed line"] = 4;
  481.     weight["(xor) 500x50 wide horizontal line segment"] = 4;
  482.     weight["(xor) 500x50 wide vertical line segment"] = 4;
  483.     weight["(xor) 100-pixel dashed circle"] = 4;
  484.     weight["(xor) 10x10 opaque stippled rectangle"] = 4;
  485.     weight["(xor) 10-pixel ellipse"] = 4;
  486.     weight["(xor) Copy 500x500 from pixmap to pixmap"] = 4;
  487.     weight["(xor) 100x100 161x145 stippled rectangle"] = 4;
  488.     weight["(xor) 10x10 161x145 tiled rectangle"] = 4;
  489.     weight["(xor) Copy 10x10 from window to window"] = 4;
  490.     weight["(xor) Copy 10x10 from pixmap to pixmap"] = 4;
  491.     weight["(xor) 10x10 161x145 stippled rectangle"] = 4;
  492.     weight["(xor) 100-pixel wide circle"] = 4;
  493.     weight["(xor) 500x500 stippled rectangle"] = 4;
  494.     weight["(xor) 500-pixel ellipse"] = 4;
  495.     weight["(xor) 10x10 216x208 tiled rectangle"] = 4;
  496.     weight["(xor) Fill 100x100 equivalent complex polygons"] = 4;
  497.     weight["(xor) 100-pixel double-dashed segment"] = 3;
  498.     weight["(xor) 10x10 161x145 opaque stippled rectangle"] = 3;
  499.     weight["(xor) Fill 10x10 opaque stippled trapezoid"] = 3;
  500.     weight["(xor) 100-pixel partial circle"] = 3;
  501.     weight["(xor) Fill 10x10 161x145 stippled trapezoid"] = 3;
  502.     weight["(xor) Fill 10x10 161x145 opaque stippled trapezoid"] = 3;
  503.     weight["(xor) Scroll 500x500 pixels"] = 3;
  504.     weight["(xor) 100x100 opaque stippled rectangle"] = 3;
  505.     weight["(xor) Fill 10x10 stippled trapezoid"] = 3;
  506.     weight["(xor) 100x10 wide dashed line"] = 3;
  507.     weight["(xor) Copy 10x10 from window to pixmap"] = 3;
  508.     weight["(xor) Copy 500x500 from window to pixmap"] = 3;
  509.     weight["(xor) 500x500 opaque stippled rectangle"] = 3;
  510.     weight["(xor) Fill 10x10 tiled trapezoid"] = 3;
  511.     weight["(xor) 100x100 161x145 tiled rectangle"] = 3;
  512.     weight["(xor) 100-pixel partial ellipse"] = 3;
  513.     weight["(xor) 100-pixel fill slice partial circle"] = 3;
  514.     weight["(xor) Fill 1x1 equivalent triangle"] = 3;
  515.     weight["(xor) 100-pixel double-dashed circle"] = 3;
  516.     weight["(xor) 500x500 4x4 tiled rectangle"] = 3;
  517.     weight["(xor) 100-pixel wide ellipse"] = 3;
  518.     weight["(xor) 100-pixel fill chord partial circle"] = 3;
  519.     weight["(xor) 100x100 216x208 tiled rectangle"] = 3;
  520.     weight["(xor) Fill 10x10 161x145 tiled trapezoid"] = 3;
  521.     weight["(xor) Fill 100x100 216x208 tiled trapezoid"] = 3;
  522.     weight["(xor) 500x500 161x145 stippled rectangle"] = 3;
  523.     weight["(xor) 500x500 161x145 tiled rectangle"] = 3;
  524.     weight["(xor) 100x100 161x145 opaque stippled rectangle"] = 3;
  525.     weight["(xor) 500x500 161x145 opaque stippled rectangle"] = 3;
  526.     weight["(xor) 10x1 wide line"] = 3;
  527.     weight["(xor) 500x500 216x208 tiled rectangle"] = 3;
  528.     weight["(xor) 100-pixel dashed ellipse"] = 3;
  529.     weight["(xor) Fill 100x100 opaque stippled trapezoid"] = 3;
  530.     weight["(xor) 10-pixel partial circle"] = 3;
  531.     weight["(xor) 100x10 wide double-dashed line"] = 3;
  532.     weight["(xor) Fill 100x100 161x145 stippled trapezoid"] = 3;
  533.     weight["(xor) Fill 100x100 161x145 opaque stippled trapezoid"] = 3;
  534.     weight["(xor) 100-pixel fill slice partial ellipse"] = 3;
  535.     weight["(xor) 1-pixel circle"] = 3;
  536.     weight["(xor) Fill 10x10 equivalent complex polygon"] = 3;
  537.     weight["(xor) 100-pixel wide dashed circle"] = 2;
  538.     weight["(xor) 100-pixel wide double-dashed circle"] = 2;
  539.     weight["(xor) Scroll 10x10 pixels"] = 2;
  540.     weight["(xor) 10-pixel wide circle"] = 2;
  541.     weight["(xor) 100-pixel fill chord partial ellipse"] = 2;
  542.     weight["(xor) Fill 100x100 tiled trapezoid"] = 2;
  543.     weight["(xor) 100-pixel double-dashed ellipse"] = 2;
  544.     weight["(xor) 100-pixel wide dashed ellipse"] = 2;
  545.     weight["(xor) 100-pixel wide double-dashed ellipse"] = 2;
  546.     weight["(xor) 10-pixel partial ellipse"] = 2;
  547.     weight["(xor) 100-pixel wide partial circle"] = 2;
  548.     weight["(xor) 100-pixel wide partial ellipse"] = 2;
  549.     weight["(xor) 10-pixel fill slice partial circle"] = 2;
  550.     weight["(xor) 10-pixel wide ellipse"] = 2;
  551.     weight["(xor) Fill 100x100 161x145 tiled trapezoid"] = 2;
  552.     weight["(xor) Fill 10x10 216x208 tiled trapezoid"] = 2;
  553.     weight["(xor) 10-pixel fill chord partial circle"] = 2;
  554.     weight["(xor) 500-pixel wide circle"] = 2;
  555.     weight["(xor) 500-pixel wide ellipse"] = 2;
  556.     weight["(xor) 1-pixel solid circle"] = 2;
  557.     weight["(xor) 10-pixel fill chord partial ellipse"] = 2;
  558.     weight["(xor) 10-pixel fill slice partial ellipse"] = 2;
  559.     weight["(xor) 10-pixel wide partial circle"] = 1;
  560.     weight["(xor) 10-pixel wide partial ellipse"] = 1;
  561.     weight["(xor) 1x1 stippled rectangle"] = 1;
  562.     weight["(xor) 1x1 161x145 stippled rectangle"] = 1;
  563.     weight["(xor) 1x1 opaque stippled rectangle"] = 1;
  564.     weight["(xor) 1x1 161x145 opaque stippled rectangle"] = 1;
  565.     weight["(xor) 1x1 4x4 tiled rectangle"] = 1;
  566.     weight["(xor) 1x1 161x145 tiled rectangle"] = 1;
  567.     weight["(xor) 1x1 216x208 tiled rectangle"] = 1;
  568.     weight["(xor) ShmPutImage 10x10 square"] = 0;
  569.     weight["(xor) ShmPutImage 100x100 square"] = 0;
  570.     weight["(xor) ShmPutImage 500x500 square"] = 0;
  571.     sumofweights = 0;
  572.     }
  573.     $0 ~ /server/ {
  574.     printf("name:%s\n",substr($0,1,index($0,"server")-2));
  575.     }
  576.     {
  577.     split($0,parts,":");            # get rate and name
  578.     start = index(parts[1],"(") + 1;    # find left parentheses
  579.     end = index(parts[1],"/");        # find terminating '/'
  580.     rate = substr(parts[1],start,end-start);# get ops/sec
  581.  
  582.     name = parts[2];
  583.     while (substr(name,1,1) == " ") {    # remove leading spaces
  584.         name = substr(name,2,length(name));
  585.     }
  586.  
  587.     thisweight = weight[name];
  588.     weight[name] = 0;            # clear to avoid double counting
  589.     sumofweights += thisweight;
  590.     printf("%d:",thisweight);        # output in new format
  591.     printf("%.1f\n",rate);
  592.     }
  593.     END{
  594.     printf("sumof:%.1f\n",sumofweights);
  595.     }
  596. EOS
  597.  
  598. awk -f awkfile.$$ temp.$$ > rates.$$
  599. rm -f awkfile.$$                # cleanup
  600.  
  601. # calculate the weighted average 
  602.  
  603. sumofweights=`grep sumof rates.$$ | awk -F: ' { print($2) }' - `
  604. if [ "$sumofweights" != "4566.0" ]
  605. then
  606.     echo "ERROR: sum of weights =$sumofweights, not equal to 4566.0;"
  607.     echo "ABORTING!"
  608.     rm -f rates.$$ temp.$$
  609.     exit 1
  610. fi
  611.  
  612. awk -F: '
  613.     BEGIN {
  614.     logsum = 0;
  615.     name = "tested"
  616.     }
  617.     $1 == "name" { name = $2;next }
  618.     {
  619.     weight = $1;
  620.     rate = $2;
  621.     if (rate > 0.0) {
  622.         # generate weighted log sum
  623.         logsum += ( log( rate ) * weight );
  624.     }
  625.     }
  626.     END {
  627.     SparcStation1 = 2118.51;
  628.     WeightedAverage = exp(logsum/4566.0);
  629.     printf("Weighted x11perf of %s server =%6.0f\n", name,WeightedAverage);
  630.     printf("Weighted x11perf of SparcStation 1 server =%5.0f\n", SparcStation1);
  631.     printf("Xmark =%8.4f\n", WeightedAverage/SparcStation1);
  632.     }' rates.$$    
  633.  
  634. rm -f temp.$$ rates.$$ awkfile.$$            # cleanup
  635.  
  636. exit 0
  637.