vhardy 2003/07/04 01:48:28 Modified: test-sources/org/apache/batik/test PerformanceTest.java PerformanceTestValidator.java Log: Improved PerformanceTest Revision Changes Path 1.2 +67 -36 xml-batik/test-sources/org/apache/batik/test/PerformanceTest.java Index: PerformanceTest.java =================================================================== RCS file: /home/cvs/xml-batik/test-sources/org/apache/batik/test/PerformanceTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PerformanceTest.java 3 Jul 2003 14:51:08 -0000 1.1 +++ PerformanceTest.java 4 Jul 2003 08:48:27 -0000 1.2 @@ -8,11 +8,7 @@ package org.apache.batik.test; -import java.awt.AlphaComposite; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.geom.AffineTransform; -import java.awt.image.BufferedImage; +import java.util.Vector; /** * This abstract <code>Test</code> implementation instruments performance @@ -93,32 +89,57 @@ * @see #runOp */ public final TestReport runImpl() throws Exception { - // Run the reference and time it the second time it - // is run - runRef(); + int iter = 50; + + double refUnit = 0; + long refStart = 0; + long refEnd = 0; + long opStart = 0; + long opEnd = 0; + double opLength = 0; - long refStart = System.currentTimeMillis(); + // Run once to remove class load time from timing. runRef(); - long refEnd = System.currentTimeMillis(); - - double refUnit = refEnd - refStart; + runOp(); + // System.gc(); - System.err.println(">>>>>>>>>>>>>> refUnit : " + refUnit); + double[] scores = new double[iter]; - // Now, run the test's operation and time it the second - // time it is run - runOp(); + for (int i=0; i<iter; i++) { + refStart = System.currentTimeMillis(); + runRef(); + refEnd = System.currentTimeMillis(); + refUnit = refEnd - refStart; + + opStart = System.currentTimeMillis(); + runOp(); + opEnd = System.currentTimeMillis(); + opLength = opEnd - opStart; - long opStart = System.currentTimeMillis(); - runOp(); - long opEnd = System.currentTimeMillis(); + scores[i] = opLength / refUnit; + System.gc(); + } + + // Now, sort the scores + sort(scores); + + // Compute the mean score based on the scores, not accounting + // for the lowest and highest scores + double score = 0; + int trim = 5; + for (int i=trim; i<scores.length-trim; i++) { + score += scores[i]; + } - double opLength = opEnd - opStart; + score /= (iter - 2*trim); // Compute the score - double score = opLength / refUnit; this.lastScore = score; + if (referenceScore != -1) { + System.err.println(">>>>>>>>>>>>>>> score/lastScore : " + score/referenceScore); + } + // Compare to the reference score if (referenceScore == -1) { TestReport report = reportError("no.reference.score.set"); @@ -145,26 +166,36 @@ } } + protected void sort(double a[]) throws Exception { + for (int i = a.length - 1; i>=0; i--) { + boolean swapped = false; + for (int j = 0; j<i; j++) { + if (a[j] > a[j+1]) { + double d = a[j]; + a[j] = a[j+1]; + a[j+1] = d; + swapped = true; + } + } + if (!swapped) + return; + } + } + /** * Runs the reference operation. * By default, this runs the same BufferedImage drawing * operation 10000 times */ protected void runRef() { - BufferedImage buf = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB); - Graphics2D g = buf.createGraphics(); - AffineTransform txf = new AffineTransform(); - g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); - g.setPaint(new Color(30, 100, 200)); - - for (int i=0; i<50; i++) { - for (int j=0; j<20; j++) { - txf.setToIdentity(); - txf.translate(-100, -100); - txf.rotate(j*Math.PI/100); - txf.translate(100, 100); - g.setTransform(txf); - g.drawRect(30, 30, 140, 140); + Vector v = new Vector(); + for (int i=0; i<10000; i++) { + v.addElement("" + i); + } + + for (int i=0; i<10000; i++) { + if (v.contains("" + i)) { + v.remove("" + i); } } } 1.2 +36 -5 xml-batik/test-sources/org/apache/batik/test/PerformanceTestValidator.java Index: PerformanceTestValidator.java =================================================================== RCS file: /home/cvs/xml-batik/test-sources/org/apache/batik/test/PerformanceTestValidator.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PerformanceTestValidator.java 3 Jul 2003 14:51:08 -0000 1.1 +++ PerformanceTestValidator.java 4 Jul 2003 08:48:28 -0000 1.2 @@ -13,6 +13,12 @@ import java.util.Vector; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; + /** * Validates the operation of the <code>PerformanceTest</code> class. * @@ -28,14 +34,21 @@ TestReport r = p.run(); assertTrue(!r.hasPassed()); assertTrue(r.getErrorCode().equals("no.reference.score.set")); + p.setReferenceScore(p.getLastScore()); + p.run(); + p.setReferenceScore(p.getLastScore()); + p.run(); + double score = p.getLastScore(); p.setReferenceScore(score); r = p.run(); if (!r.hasPassed()) { TestReport result = reportError("unexpected.performance.test.failure"); + result.addDescriptionEntry("error.code", r.getErrorCode()); result.addDescriptionEntry("expected.score", "" + score); result.addDescriptionEntry("actual.score", "" + p.getLastScore()); + result.addDescriptionEntry("regression.percentage", "" + 100*(score - p.getLastScore())/p.getLastScore()); return result; } @@ -50,6 +63,7 @@ result.addDescriptionEntry("actual.code", r.getErrorCode()); result.addDescriptionEntry("expected.score", "" + score); result.addDescriptionEntry("actual.score", "" + p.getLastScore()); + result.addDescriptionEntry("regression.percentage", "" + 100*(score - p.getLastScore())/p.getLastScore()); return result; } @@ -62,6 +76,7 @@ result.addDescriptionEntry("actual.code", r.getErrorCode()); result.addDescriptionEntry("expected.score", "" + score); result.addDescriptionEntry("actual.score", "" + p.getLastScore()); + result.addDescriptionEntry("regression.percentage", "" + 100*(score - p.getLastScore())/p.getLastScore()); return result; } @@ -70,16 +85,32 @@ static class SimplePerformanceTest extends PerformanceTest { public void runOp() { + // runRef(); + BufferedImage buf = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = buf.createGraphics(); + AffineTransform txf = new AffineTransform(); + g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); + g.setPaint(new Color(30, 100, 200)); + + for (int j=0; j<20; j++) { + txf.setToIdentity(); + txf.translate(-100, -100); + txf.rotate(j*Math.PI/100); + txf.translate(100, 100); + g.setTransform(txf); + g.drawRect(30, 30, 140, 140); + } + /* Vector v = new Vector(); - for (int i=0; i<10000; i++) { + for (int i=0; i<5000; i++) { v.addElement("" + i); } - - for (int i=0; i<10000; i++) { + + for (int i=0; i<5000; i++) { if (v.contains("" + i)) { v.remove("" + i); } - } + }*/ } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]