001/** 002 * Copyright (c) 2004-2011 QOS.ch 003 * All rights reserved. 004 * 005 * Permission is hereby granted, free of charge, to any person obtaining 006 * a copy of this software and associated documentation files (the 007 * "Software"), to deal in the Software without restriction, including 008 * without limitation the rights to use, copy, modify, merge, publish, 009 * distribute, sublicense, and/or sell copies of the Software, and to 010 * permit persons to whom the Software is furnished to do so, subject to 011 * the following conditions: 012 * 013 * The above copyright notice and this permission notice shall be 014 * included in all copies or substantial portions of the Software. 015 * 016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 017 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 018 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 019 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 020 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 021 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 022 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 023 * 024 */ 025package org.slf4j.helpers; 026 027import java.text.MessageFormat; 028 029import org.junit.Ignore; 030import org.junit.Test; 031 032@Ignore 033public class MessageFormatterPerfTest { // extends TestCase { 034 035 Integer i1 = new Integer(1); 036 Integer i2 = new Integer(2); 037 static long RUN_LENGTH = 100 * 1000; 038 // 039 static long REFERENCE_BIPS = 48416; 040 041 public void XtestJDKFormatterPerf() { 042 jdkMessageFormatter(RUN_LENGTH); 043 double duration = jdkMessageFormatter(RUN_LENGTH); 044 System.out.println("jdk duration = " + duration + " nanos"); 045 } 046 047 @Test 048 public void testSLF4JPerf_OneArg() { 049 slf4jMessageFormatter_OneArg(RUN_LENGTH); 050 double duration = slf4jMessageFormatter_OneArg(RUN_LENGTH); 051 System.out.println("duration=" + duration); 052 long referencePerf = 36; 053 BogoPerf.assertDuration(duration, referencePerf, REFERENCE_BIPS); 054 } 055 056 @Test 057 public void testSLF4JPerf_TwoArg() { 058 slf4jMessageFormatter_TwoArg(RUN_LENGTH); 059 double duration = slf4jMessageFormatter_TwoArg(RUN_LENGTH); 060 long referencePerf = 60; 061 BogoPerf.assertDuration(duration, referencePerf, REFERENCE_BIPS); 062 } 063 064 public double slf4jMessageFormatter_OneArg(long len) { 065 long start = System.nanoTime(); 066 for (int i = 0; i < len; i++) { 067 final FormattingTuple tp = MessageFormatter.format("This is some rather short message {} ", i1); 068 tp.getMessage(); 069 tp.getArgArray(); 070 tp.getThrowable(); 071 072 MessageFormatter.format("This is some rather short message {} ", i1); 073 } 074 long end = System.nanoTime(); 075 return (end - start) / (1000 * 1000.0); 076 } 077 078 public double slf4jMessageFormatter_TwoArg(long len) { 079 long start = System.nanoTime(); 080 for (int i = 0; i < len; i++) { 081 final FormattingTuple tp = MessageFormatter.format("This is some {} short message {} ", i1, i2); 082 tp.getMessage(); 083 tp.getArgArray(); 084 tp.getThrowable(); 085 } 086 long end = System.nanoTime(); 087 return (end - start) / (1000 * 1000.0); 088 } 089 090 public double jdkMessageFormatter(long len) { 091 @SuppressWarnings("unused") 092 String s = ""; 093 s += ""; // keep compiler happy 094 long start = System.currentTimeMillis(); 095 Object[] oa = new Object[] { i1 }; 096 for (int i = 0; i < len; i++) { 097 s = MessageFormat.format("This is some rather short message {0}", oa); 098 } 099 long end = System.currentTimeMillis(); 100 return (1.0 * end - start); 101 } 102 103}