/* -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- //------100-columns-wide------>|*/ // for license see accompanying LICENSE_TESTS.txt file (available also at http://www.xmlpull.org) package org.xmlpull.v1.wrapper.perftest; //import junit.framework.Test; import java.io.StringReader; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.util.XmlPullUtil; import org.xmlpull.v1.wrapper.XmlPullParserWrapper; import org.xmlpull.v1.wrapper.XmlPullWrapperFactory; /** * Test overhead of wrapper approach. * * @author Aleksander Slominski */ public class Driver { public static void main (String[] args) throws Exception { final int PASSES = 20; final int REPEAT = 5 * 10000; System.err.println("starting tests with PASSES="+PASSES+" REPEAT="+REPEAT); long startDirect=-1,endDirect=-1; long startStaticWrap=-1,endStaticWrap=-1; XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); XmlPullWrapperFactory staticWrapperFactory = XmlPullWrapperFactory.newInstance(factory); // multiple passes necessary to do some warmup to remove HotSpot influences ... for (int count = 0; count < PASSES; count++) { System.err.println("pass "+(count+1)+" of "+PASSES); startDirect = System.currentTimeMillis(); XmlPullParser pp = factory.newPullParser(); for (int i = 0; i < REPEAT; i++) { StringReader sr = new StringReader("world!"); pp.setInput(sr); pp.nextTag(); pp.require(XmlPullParser.START_TAG, null, "hello"); pp.next(); XmlPullUtil.nextEndTag(pp); pp.require(XmlPullParser.END_TAG, null, "hello"); } endDirect = System.currentTimeMillis(); System.err.println("direct test took "+(endDirect-startDirect)/1000.0+" seconds"); startStaticWrap = System.currentTimeMillis(); XmlPullParserWrapper spw = staticWrapperFactory.newPullParserWrapper(); for (int i = 0; i < REPEAT; i++) { StringReader sr = new StringReader("world!"); spw.setInput(sr); spw.nextTag(); spw.require(XmlPullParser.START_TAG, null, "hello"); spw.next(); spw.nextEndTag(); spw.require(XmlPullParser.END_TAG, null, "hello"); } endStaticWrap = System.currentTimeMillis(); System.err.println("static wrap test took "+(endStaticWrap-startStaticWrap)/1000.0+" seconds"); } double directSecs = (endDirect - startDirect) /1000.0; //System.err.println("direct test took "+directSecs+" seconds"); { double staticWrapSecs = (endStaticWrap - startStaticWrap) /1000.0; double staticSpeedup = staticWrapSecs / directSecs; double percent = ((long)Math.round((staticSpeedup - 1)* 100.0 * 100.0))/100.0; System.err.println("speedup when using direct over static wrap "+staticSpeedup+" ("+percent+"%)"); } System.err.println("finished"); } }