Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!zaphod.mps.ohio-state.edu!rpi!bu.edu!snorkelwacker!bloom-beacon!EXPO.LCS.MIT.EDU!rws From: rws@EXPO.LCS.MIT.EDU (Bob Scheifler) Newsgroups: comp.windows.x Subject: Re: awk script for computing xstones Message-ID: <9006071217.AA27130@expire.lcs.mit.edu> Date: 7 Jun 90 12:16:58 GMT References: <9469@nfs4.rl.ac.uk> Sender: root@athena.mit.edu (Wizard A. Root) Organization: The Internet Lines: 198 Does anyone have the difinitive answer to the question "Which is the correct awk script for producing xstones ?" I've seen so many blind quotations of bogusly-computed xstones numbers lately, I'd say the definitive answer is to stop depending on xstones entirely. Or at least don't depend on the "averaged" numbers, just look at the raw numbers and make your own comparisons. The "original" awk script was clearly wrong. For the record, here's the xstones.awk we have here (which I believe came from someone at Tektronix). I wouldn't call it "definitive" since we claim no control over xbench and don't endorse it, but it's better than the original: BEGIN { countedWeight["x"] = 0; missedWeight["x"] = 0; runtime["x"] = 0; countedWeight["line"] = 0; missedWeight["line"] = 0; runtime["line"] = 0; countedWeight["fill"] = 0; missedWeight["fill"] = 0; runtime["fill"] = 0; countedWeight["blit"] = 0; missedWeight["blit"] = 0; runtime["blit"] = 0; countedWeight["arc"] = 0; missedWeight["arc"] = 0; runtime["arc"] = 0; countedWeight["text"] = 0; missedWeight["text"] = 0; runtime["text"] = 0; countedWeight["complex"] = 0; missedWeight["complex"] = 0; runtime["complex"] = 0; sunValue["line10"] = 2616; sunValue["line100"] = 1630.80; sunValue["line400"] = 643.50; sunValue["dline10"] = 818.73; sunValue["dline100"] = 171.60; sunValue["dline400"] = 49.62; sunValue["wline10"] = 78; sunValue["wline100"] = 19.09; sunValue["wline400"] = 6; sunValue["rects10"] = 1115.27; sunValue["rects100"] = 796.73; sunValue["rects400"] = 414; sunValue["fillrects10"] = 1244.60; sunValue["fillrects100"] = 693.80; sunValue["fillrects400"] = 157.08; sunValue["tiledrects10"] = 1387.20; sunValue["tiledrects100"] = 323.17; sunValue["tiledrects400"] = 48.12; sunValue["stippledrects10"] = 834.73; sunValue["stippledrects100"] = 153.17; sunValue["stippledrects400"] = 35.57; sunValue["invrects10"] = 3440.09; sunValue["invrects100"] = 938.27; sunValue["invrects400"] = 134.44; sunValue["arcs10"] = 5.43; sunValue["arcs100"] = 1.23; sunValue["arcs400"] = 0.53; sunValue["filledarcs10"] = 25.26; sunValue["filledarcs100"] = 6.0; sunValue["filledarcs400"] = 2.73; sunValue["filledpoly100"] = 99.83; sunValue["screencopy10"] = 225.82; sunValue["screencopy100"] = 94.29; sunValue["screencopy400"] = 17.76; sunValue["scroll"] = 68.20; sunValue["bitmapcopy10"] = 302.64; sunValue["bitmapcopy100"] = 68.33; sunValue["bitmapcopy400"] = 10.69; sunValue["string"] = 5635.64; sunValue["complex1"] = 18.6; resultnames[0] = "line"; resultnames[1] = "fill"; resultnames[2] = "blit"; resultnames[3] = "arc"; resultnames[4] = "text"; resultnames[5] = "complex"; resultnames[6] = "x"; resultcount = 7; } / line10 / { x = "line10"; w = 300; g = "line"; } / line100 / { x = "line100"; w = 400; g = "line"; } / line400 / { x = "line400"; w = 300; g = "line"; } / dline10 / { x = "dline10"; w = 50; g = "line"; } / dline100 / { x = "dline100"; w = 150; g = "line"; } / dline400 / { x = "dline400"; w = 100; g = "line"; } / wline10 / { x = "wline10"; w = 50; g = "line"; } / wline100 / { x = "wline100"; w = 100; g = "line"; } / wline400 / { x = "wline400"; w = 50; g = "line"; } / rects10 / { x = "rects10"; w = 150; g = "line"; } / rects100 / { x = "rects100"; w = 250; g = "line"; } / rects400 / { x = "rects400"; w = 150; g = "line"; } / fillrects10 / { x = "fillrects10"; w = 350; g = "fill"; } / fillrects100 / { x = "fillrects100"; w = 450; g = "fill"; } / fillrects400 / { x = "fillrects400"; w = 350; g = "fill"; } / tiledrects10 / { x = "tiledrects10"; w = 150; g = "fill"; } / tiledrects100 / { x = "tiledrects100"; w = 250; g = "fill"; } / tiledrects400 / { x = "tiledrects400"; w = 150; g = "fill"; } / stippledrects10 / { x = "stippledrects10"; w = 50; g = "fill"; } / stippledrects100 / { x = "stippledrects100"; w = 100; g = "fill"; } / stippledrects400 / { x = "stippledrects400"; w = 50; g = "fill"; } / arcs10 / { x = "arcs10"; w = 50; g = "arc"; } / arcs100 / { x = "arcs100"; w = 100; g = "arc"; } / arcs400 / { x = "arcs400"; w = 50; g = "arc"; } / filledarcs10 / { x = "filledarcs10"; w = 50; g = "arc"; } / filledarcs100 / { x = "filledarcs100"; w = 100; g = "arc"; } / filledarcs400 / { x = "filledarcs400"; w = 50; g = "arc"; } / filledpoly100 / { x = "filledpoly100"; w = 200; g = "dummy"; } / invrects10 / { x = "invrects10"; w = 100; g = "blit"; } / invrects100 / { x = "invrects100"; w = 150; g = "blit"; } / invrects400 / { x = "invrects400"; w = 100; g = "blit"; } / screencopy10 / { x = "screencopy10"; w = 50; g = "blit"; } / screencopy100 / { x = "screencopy100"; w = 150; g = "blit"; } / screencopy400 / { x = "screencopy400"; w = 100; g = "blit"; } / scroll / { x = "scroll"; w =1000; g = "blit"; } / bitmapcopy10 / { x = "bitmapcopy10"; w = 50; g = "blit"; } / bitmapcopy100 / { x = "bitmapcopy100"; w = 100; g = "blit"; } / bitmapcopy400 / { x = "bitmapcopy400"; w = 50; g = "blit"; } / imagestring/ { x = "string"; w =3000; g = "text"; } / complex1 / { x = "complex1"; w = 800; g = "complex"; } /rate =/ { if ( x != "dummy" ) { # printf ("%s value is %8.0f sun is %8.0f\n", x, $3, sunValue[x]); # printf ("ratio %8.4f weight %8.0f\n", ratio, w); # printf ("runtime[x] %8.0f countedWeight[x] %8.0f\n",runtime["x"], countedWeight["x"]); # printf ("runtime[g] %8.0f countedWeight[g] %8.0f\n",runtime[g], countedWeight[g]); ratio = $3 / sunValue[x]; runtime["x"] = runtime["x"] + w*ratio; countedWeight["x"] = countedWeight["x"] + w; runtime[g] = runtime[g] + w*ratio; countedWeight[g] = countedWeight[g] + w; x = "dummy"; w = 1 } } /NOT RUN/ { if (x != "dummy") { missedWeight["x"] = missedWeight["x"] + w; missedWeight[g] = missedWeight[g] + w; x = "dummy"; w = 1 } } END { allWeight = 10000; for (result = 0; result < resultcount; result++) { resultname = resultnames[result]; cw = countedWeight[resultname]; mw = missedWeight[resultname]; rt = runtime[resultname]; if (cw == 0) { printf "TOTAL ? %sStones\n", resultname; } else { if (mw > 0) { text = "expected "; } else { text = ""; } ratio = rt / cw; stones = int(allWeight * ratio); printf ("TOTAL %s %8.0f %sStones\n", text, stones, resultname); } } }