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]