You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by mw...@apache.org on 2009/01/03 20:53:43 UTC

svn commit: r731074 - /james/mime4j/trunk/benchmarks/src/org/apache/james/mime4j/LongMultipartReadBench.java

Author: mwiederkehr
Date: Sat Jan  3 11:53:43 2009
New Revision: 731074

URL: http://svn.apache.org/viewvc?rev=731074&view=rev
Log:
Added more benchmark tests in addition to the existing MimeTokenStream test: a test that uses an empty AbstractContentHandler, one that uses an empty SimpleContentHandler and one that creates a Message object.

Modified:
    james/mime4j/trunk/benchmarks/src/org/apache/james/mime4j/LongMultipartReadBench.java

Modified: james/mime4j/trunk/benchmarks/src/org/apache/james/mime4j/LongMultipartReadBench.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/benchmarks/src/org/apache/james/mime4j/LongMultipartReadBench.java?rev=731074&r1=731073&r2=731074&view=diff
==============================================================================
--- james/mime4j/trunk/benchmarks/src/org/apache/james/mime4j/LongMultipartReadBench.java (original)
+++ james/mime4j/trunk/benchmarks/src/org/apache/james/mime4j/LongMultipartReadBench.java Sat Jan  3 11:53:43 2009
@@ -21,22 +21,77 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.james.mime4j.decoder.CodecUtil;
+import org.apache.james.mime4j.descriptor.BodyDescriptor;
+import org.apache.james.mime4j.message.Header;
+import org.apache.james.mime4j.message.Message;
+import org.apache.james.mime4j.message.SimpleContentHandler;
+import org.apache.james.mime4j.message.storage.DefaultStorageProvider;
+import org.apache.james.mime4j.message.storage.MemoryStorageProvider;
+import org.apache.james.mime4j.parser.AbstractContentHandler;
+import org.apache.james.mime4j.parser.ContentHandler;
+import org.apache.james.mime4j.parser.MimeStreamParser;
 import org.apache.james.mime4j.parser.MimeTokenStream;
 
 public class LongMultipartReadBench {
 
     public static void main(String[] args) throws Exception {
-        
+
+        byte[] content = loadMessage("long-multipart.msg");
+        if (content == null) {
+            System.err.println("Test message not found");
+            return;
+        }
+
+        int testNumber = args.length > 0 ? Integer.parseInt(args[0]) : 0;
+
+        Test test = createTest(testNumber);
+        if (test == null) {
+            System.err.println("No such test: " + testNumber);
+            return;
+        }
+
+        int repetitions = args.length > 1 ? Integer.parseInt(args[1]) : 25000;
+
+        System.out.println("Multipart message read.");
+        System.out.println("No of repetitions: " + repetitions);
+        System.out.println("Content length: " + content.length);
+        System.out.println("Test: " + test.getClass().getSimpleName());
+        System.out.println("--------------------------------");
+
+        long start = System.currentTimeMillis();
+        test.run(content, repetitions);
+        long finish = System.currentTimeMillis();
+
+        System.out.println("Execution time: "
+                + ((double) (finish - start) / 1000) + " s");
+    }
+
+    private static Test createTest(int testNumber) {
+        switch (testNumber) {
+        case 0:
+            return new MimeTokenStreamTest();
+        case 1:
+            return new AbstractContentHandlerTest();
+        case 2:
+            return new SimpleContentHandlerTest();
+        case 3:
+            return new MessageTest();
+        default:
+            return null;
+        }
+    }
+
+    private static byte[] loadMessage(String resourceName) throws IOException {
         ClassLoader cl = LongMultipartReadBench.class.getClassLoader();
-        
+
         ByteArrayOutputStream outstream = new ByteArrayOutputStream();
-        InputStream instream = cl.getResourceAsStream("long-multipart.msg");
+        InputStream instream = cl.getResourceAsStream(resourceName);
         if (instream == null) {
-            System.out.println("Test message not found");
-            return;
+            return null;
         }
         try {
             CodecUtil.copy(instream, outstream);
@@ -44,30 +99,80 @@
             instream.close();
         }
 
-        byte[] content = outstream.toByteArray();
+        return outstream.toByteArray();
+    }
+
+    private interface Test {
+        void run(byte[] content, int repetitions) throws Exception;
+    }
+
+    private static final class MimeTokenStreamTest implements Test {
+        public void run(byte[] content, int repetitions) throws Exception {
+            MimeTokenStream stream = new MimeTokenStream();
+            for (int i = 0; i < repetitions; i++) {
+                stream.parse(new ByteArrayInputStream(content));
+                for (int state = stream.getState(); state != MimeTokenStream.T_END_OF_STREAM; state = stream
+                        .next()) {
+                }
+            }
+        }
+    }
+
+    private static final class AbstractContentHandlerTest implements Test {
+        public void run(byte[] content, int repetitions) throws Exception {
+            ContentHandler contentHandler = new AbstractContentHandler() {
+            };
+
+            for (int i = 0; i < repetitions; i++) {
+                MimeStreamParser parser = new MimeStreamParser();
+                parser.setContentHandler(contentHandler);
+                parser.parse(new ByteArrayInputStream(content));
+            }
+        }
+    }
 
-        int reps = 25000;
-        if (args.length > 0) {
-            reps = Integer.parseInt(args[0]);
+    private static final class SimpleContentHandlerTest implements Test {
+        public void run(byte[] content, int repetitions) throws Exception {
+            ContentHandler contentHandler = new SimpleContentHandler() {
+                @Override
+                public void bodyDecoded(BodyDescriptor bd, InputStream is)
+                        throws IOException {
+                }
+
+                @Override
+                public void headers(Header header) {
+                }
+            };
+
+            for (int i = 0; i < repetitions; i++) {
+                MimeStreamParser parser = new MimeStreamParser();
+                parser.setContentHandler(contentHandler);
+                parser.parse(new ByteArrayInputStream(content));
+            }
         }
-        
-        System.out.println("Multipart message read.");
-        System.out.println("No of repetitions: " + reps);
-        System.out.println("Content length: " + content.length);
-        System.out.println("----------------------------");
-        
-        MimeTokenStream stream = new MimeTokenStream();
-        long start = System.currentTimeMillis();
-        for (int i = 0; i < reps; i++) {
-            stream.parse(new ByteArrayInputStream(content));
-            for (int state = stream.getState(); 
-                state != MimeTokenStream.T_END_OF_STREAM; 
-                state = stream.next()) {
+    }
+
+    private static final class MessageTest implements Test {
+        public void run(byte[] content, int repetitions) throws Exception {
+            DefaultStorageProvider.setInstance(new MemoryStorageProvider());
+
+            for (int i = 0; i < repetitions; i++) {
+                new Message(new ByteArrayInputStream(content));
             }
         }
-        long finish = System.currentTimeMillis();
-        System.out.println("Execution time: " 
-                + ((double)(finish - start) / 1000) + " s" );
     }
-    
+
+    /*
+    // requires mail.jar and activation.jar to be present
+    private static final class MimeMessageTest implements Test {
+        public void run(byte[] content, int repetitions) throws Exception {
+            for (int i = 0; i < repetitions; i++) {
+                MimeMessage mm = new MimeMessage(null, new ByteArrayInputStream(content));
+                Multipart multipart = (Multipart) mm.getContent();
+                multipart.getCount(); // force parsing
+            }
+        }
+    }
+    */
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org