[logback-dev] svn commit: r2292 - logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36

noreply.ceki at qos.ch noreply.ceki at qos.ch
Sun Jun 14 21:56:16 CEST 2009


Author: ceki
Date: Sun Jun 14 21:56:16 2009
New Revision: 2292

Added:
   logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/DateFormatPerfTest.java
      - copied, changed from r2291, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/TestDateFormat.java
   logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/TestDateFormatOriginal.java
Removed:
   logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/TestDateFormat.java

Log:
LBCLASSIC-36 Rename application

Copied: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/DateFormatPerfTest.java (from r2291, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/TestDateFormat.java)
==============================================================================
--- /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/TestDateFormat.java	(original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/DateFormatPerfTest.java	Sun Jun 14 21:56:16 2009
@@ -6,7 +6,7 @@
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 
-public class TestDateFormat {
+public class DateFormatPerfTest {
   public static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";
   static final long NANOS_IN_ONE_SEC = 1000 * 1000 * 1000L;
 

Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/TestDateFormatOriginal.java
==============================================================================
--- (empty file)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/issue/lbclassic36/TestDateFormatOriginal.java	Sun Jun 14 21:56:16 2009
@@ -0,0 +1,239 @@
+package ch.qos.logback.classic.issue.lbclassic36;
+
+import junit.framework.TestCase;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.joda.time.format.DateTimeFormatter;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.DateTime;
+
+public class TestDateFormatOriginal extends TestCase {
+  public static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";
+  static final long NANOS_IN_ONE_SEC = 1000 * 1000 * 1000L;
+
+  /**
+   * Create the test case
+   * 
+   * @param testName
+   *                name of the test case
+   */
+  public TestDateFormatOriginal(String testName) {
+    super(testName);
+  }
+
+  /**
+   * @return the suite of tests being tested
+   */
+  public static Test suite() {
+    return new TestSuite(TestDateFormatOriginal.class);
+  }
+
+  public static void main(String[] args) {
+    junit.textui.TestRunner.run(suite());
+  }
+
+  public void setUp() throws Exception {
+    super.setUp();
+  }
+
+  public void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  public void testRaw() throws Exception {
+    SimpleDateFormat simpleFormat = new SimpleDateFormat(ISO8601_PATTERN);
+    DateTimeFormatter jodaFormat = DateTimeFormat.forPattern(ISO8601_PATTERN);
+
+    Date date = new Date();
+    DateTime dateTime = new DateTime(date);
+
+    long start = System.nanoTime();
+    for (int i = 0; i < 100000; ++i) {
+      jodaFormat.print(dateTime);
+    }
+    long jodaAvg = (System.nanoTime() - start) / 100000;
+
+    
+     start = System.nanoTime();
+    for (int i = 0; i < 100000; ++i) {
+      simpleFormat.format(date);
+    }
+    long simpleAvg = (System.nanoTime() - start) / 100000;
+
+    float diff = (((float) (simpleAvg - jodaAvg)) / simpleAvg) * 100;
+    System.out.println("Raw - JDK: " + simpleAvg + " ns Joda: " + jodaAvg
+        + " ns - Difference: " + diff + "%");
+  }
+
+  public void testSynchronized() throws Exception {
+    SynchronizedDateFormatter formatter = new SynchronizedDateFormatter();
+    int threads = 10;
+    int iterations = 10000;
+    Thread[] formatThreads = new Thread[threads];
+    Date date = new Date();
+
+    for (int i = 0; i < threads; i++) {
+      formatThreads[i] = new DateFormatThread(formatter, date, iterations);
+    }
+    long start = System.nanoTime();
+    for (Thread thread : formatThreads) {
+      thread.start();
+    }
+    for (Thread thread : formatThreads) {
+      thread.join();
+    }
+    long end = System.nanoTime();
+    double actual = ((double) (end - start)) / NANOS_IN_ONE_SEC;
+    System.out.printf("Synchronized DateFormat: %,.4f seconds\n", actual);
+
+  }
+
+  public void testUnSynchronized() throws Exception {
+    UnsynchronizedDateFormatter formatter = new UnsynchronizedDateFormatter();
+    int threads = 10;
+    int iterations = 10000;
+    Thread[] formatThreads = new Thread[threads];
+    Date date = new Date();
+
+    for (int i = 0; i < threads; i++) {
+      formatThreads[i] = new DateFormatThread(formatter, date, iterations);
+    }
+    long start = System.nanoTime();
+    for (Thread thread : formatThreads) {
+      thread.start();
+    }
+    for (Thread thread : formatThreads) {
+      thread.join();
+    }
+    long end = System.nanoTime();
+    double actual = ((double) (end - start)) / NANOS_IN_ONE_SEC;
+    System.out.printf("Unsynchronized DateFormat: %,.4f seconds\n", actual);
+
+  }
+
+  public void testThreadLocal() throws Exception {
+    ThreadLocalDateFormatter formatter = new ThreadLocalDateFormatter();
+    int threads = 10;
+    int iterations = 10000;
+    Thread[] formatThreads = new Thread[threads];
+    Date date = new Date();
+
+    for (int i = 0; i < threads; i++) {
+      formatThreads[i] = new DateFormatThread(formatter, date, iterations);
+    }
+    long start = System.nanoTime();
+    for (Thread thread : formatThreads) {
+      thread.start();
+    }
+    for (Thread thread : formatThreads) {
+      thread.join();
+    }
+    long end = System.nanoTime();
+    double actual = ((double) (end - start)) / NANOS_IN_ONE_SEC;
+    System.out.printf("ThreadLocal DateFormat: %,.4f seconds\n", actual);
+
+  }
+
+  public void testDateTimeFormatter() throws Exception {
+    int threads = 10;
+    int iterations = 10000;
+    Thread[] formatThreads = new DateTimeFormatThread[threads];
+    JodaFormatter formatter = new JodaFormatter();
+    Date date = new Date();
+    DateTime dateTime = new DateTime(date);
+
+    for (int i = 0; i < threads; i++) {
+      formatThreads[i] = new DateTimeFormatThread(formatter, dateTime,
+          iterations);
+    }
+    long start = System.nanoTime();
+    for (Thread thread : formatThreads) {
+      thread.start();
+    }
+    for (Thread thread : formatThreads) {
+      thread.join();
+    }
+    long end = System.nanoTime();
+    double actual = ((double) (end - start)) / NANOS_IN_ONE_SEC;
+    System.out.printf("Joda DateTimeFormatter: %,.4f seconds\n", actual);
+
+  }
+
+  public static interface Formatter {
+    String format(Date date);
+  }
+
+  public static class SynchronizedDateFormatter implements Formatter {
+    SimpleDateFormat simpleFormat = new SimpleDateFormat(ISO8601_PATTERN);
+
+    public synchronized String format(Date date) {
+      return simpleFormat.format(date);
+    }
+  }
+
+  public static class UnsynchronizedDateFormatter implements Formatter {
+    public synchronized String format(Date date) {
+      return new SimpleDateFormat(ISO8601_PATTERN).format(date);
+    }
+  }
+
+  public static class ThreadLocalDateFormatter implements Formatter {
+    ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>() {
+      protected synchronized SimpleDateFormat initialValue() {
+        return new SimpleDateFormat(ISO8601_PATTERN);
+      }
+    };
+
+    public String format(Date date) {
+      return formatter.get().format(date);
+    }
+  }
+
+  public static class JodaFormatter {
+    DateTimeFormatter formatter = DateTimeFormat.forPattern(ISO8601_PATTERN);
+
+    public String format(DateTime date) {
+      return formatter.print(date);
+    }
+  }
+
+  public static class DateFormatThread extends Thread {
+    Formatter formatter;
+    Date date;
+    long iterCount;
+
+    public DateFormatThread(Formatter f, Date date, long iterations) {
+      this.formatter = f;
+      this.date = date;
+      this.iterCount = iterations;
+    }
+
+    public void run() {
+      for (int i = 0; i < iterCount; i++) {
+        formatter.format(this.date);
+      }
+    }
+  }
+
+  public static class DateTimeFormatThread extends Thread {
+    JodaFormatter formatter;
+    DateTime date;
+    long iterCount;
+
+    public DateTimeFormatThread(JodaFormatter f, DateTime date, long iterations) {
+      this.formatter = f;
+      this.date = date;
+      this.iterCount = iterations;
+    }
+
+    public void run() {
+      for (int i = 0; i < iterCount; i++) {
+        formatter.format(this.date);
+      }
+    }
+  }
+}


More information about the logback-dev mailing list