001 /* 002 * Copyright 1999,2004 The Apache Software Foundation. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.apache.commons.feedparser.test; 018 019 import java.lang.reflect.Method; 020 021 import javax.xml.parsers.SAXParser; 022 import javax.xml.parsers.SAXParserFactory; 023 024 import junit.framework.TestCase; 025 026 import org.apache.commons.feedparser.DefaultFeedParserListener; 027 import org.apache.commons.feedparser.FeedParser; 028 import org.apache.commons.feedparser.FeedParserException; 029 import org.apache.commons.feedparser.FeedParserFactory; 030 import org.apache.commons.feedparser.FeedParserListener; 031 import org.apache.commons.feedparser.FeedParserState; 032 import org.apache.commons.feedparser.network.ResourceRequest; 033 import org.apache.commons.feedparser.network.ResourceRequestFactory; 034 035 /** 036 * 037 * @author <a href="mailto:burton@peerfear.org">Kevin A. Burton</a> 038 * @version $Id: TestPerformance.java 373622 2006-01-30 22:53:00Z mvdb $ 039 */ 040 public class TestPerformance extends TestCase { 041 042 public TestPerformance( String name ) { 043 super( name ); 044 } 045 046 static SAXParser parser = null; 047 048 public static void testSAX() throws Exception { 049 050 if ( parser == null ) { 051 parser = SAXParserFactory.newInstance().newSAXParser(); 052 053 //need to enable SAX2 locals and namespace 054 parser.getXMLReader().setFeature( "http://xml.org/sax/features/namespaces", true ); 055 } 056 057 org.apache.commons.feedparser.sax.RSSFeedParser handler = 058 new org.apache.commons.feedparser.sax.RSSFeedParser(); 059 060 handler.listener = new DefaultFeedParserListener() { 061 062 public void onChannel( FeedParserState state, 063 String title, 064 String link, 065 String description ) throws FeedParserException { 066 067 // System.out.println( "onChannel: title: " + title ); 068 069 } 070 071 public void onItem( FeedParserState state, 072 String title, 073 String link, 074 String description, 075 String permalink ) throws FeedParserException { 076 077 // System.out.println( "onItem: title: " + title ); 078 079 } 080 081 public void onItemEnd() throws FeedParserException { 082 083 // System.out.println( "onItemEnd"); 084 085 } 086 087 }; 088 089 String resource = "file:/home/burton/index.rss"; 090 091 ResourceRequest request = ResourceRequestFactory 092 .getResourceRequest( resource ); 093 094 parser.parse( request.getInputStream(), handler ); 095 096 } 097 098 public static void testDefault() throws Exception { 099 100 FeedParser parser = FeedParserFactory.newFeedParser(); 101 FeedParserListener listener = new DefaultFeedParserListener() {}; 102 103 String resource = "file:/home/burton/index.rss"; 104 105 ResourceRequest request = ResourceRequestFactory 106 .getResourceRequest( resource ); 107 108 parser.parse( listener, 109 request.getInputStream(), 110 resource ); 111 112 } 113 114 public static void main( String[] args ) throws Exception { 115 116 TestPerformance test = new TestPerformance( null ); 117 118 //test.testGetWeblogLinkForResource(); 119 //test.test1(); 120 121 doTestMethod( "testSAX", TestPerformance.class, 100 ); 122 doTestMethod( "testDefault", TestPerformance.class, 100 ); 123 124 } 125 126 public static void doTestMethod( String name, Class clazz, int max ) throws Exception { 127 128 Method method = clazz.getMethod( name, null ); 129 130 System.out.println( "Testing method: " + name ); 131 132 long duration = 0; 133 134 for ( int i = 0; i <= max; ++i ) { 135 136 long before = System.currentTimeMillis(); 137 138 method.invoke( null, null ); 139 140 if ( i == 0 ) 141 continue; //don't measure the first call 142 143 long after = System.currentTimeMillis(); 144 duration += after-before; 145 146 } 147 148 System.out.println( "----------------" ); 149 System.out.println( "Total parse count: " + max ); 150 151 System.out.println( "Total duration: " + duration + " milliseconds" ); 152 153 float totalAvgDuration = (float)duration / (float)max; 154 155 System.out.println( "Total avg duration: " + totalAvgDuration + " milliseconds" ); 156 157 float totalPerSecond = 1000 / totalAvgDuration; 158 159 System.out.println( "Total per second: " + totalPerSecond ); 160 161 } 162 163 } 164