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]

Reply via email to