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 org.apache.commons.feedparser.DefaultFeedParserListener; 025 import org.apache.commons.feedparser.FeedParser; 026 import org.apache.commons.feedparser.FeedParserException; 027 import org.apache.commons.feedparser.FeedParserFactory; 028 import org.apache.commons.feedparser.FeedParserListener; 029 import org.apache.commons.feedparser.FeedParserState; 030 import org.apache.commons.feedparser.network.ResourceRequest; 031 import org.apache.commons.feedparser.network.ResourceRequestFactory; 032 033 /** 034 * 035 * @author <a href="mailto:burton@peerfear.org">Kevin A. Burton</a> 036 * @version $Id: DebugPerformance.java 373622 2006-01-30 22:53:00Z mvdb $ 037 */ 038 public class DebugPerformance { 039 040 static SAXParser parser = null; 041 042 public static void doTestSAX() throws Exception { 043 044 if ( parser == null ) { 045 parser = SAXParserFactory.newInstance().newSAXParser(); 046 047 //need to enable SAX2 locals and namespace 048 parser.getXMLReader().setFeature( "http://xml.org/sax/features/namespaces", true ); 049 } 050 051 org.apache.commons.feedparser.sax.RSSFeedParser handler = 052 new org.apache.commons.feedparser.sax.RSSFeedParser(); 053 054 handler.listener = new DefaultFeedParserListener() { 055 056 public void onChannel( FeedParserState state, 057 String title, 058 String link, 059 String description ) throws FeedParserException { 060 061 // System.out.println( "onChannel: title: " + title ); 062 063 } 064 065 public void onItem( FeedParserState state, 066 String title, 067 String link, 068 String description, 069 String permalink ) throws FeedParserException { 070 071 // System.out.println( "onItem: title: " + title ); 072 073 } 074 075 public void onItemEnd() throws FeedParserException { 076 077 // System.out.println( "onItemEnd"); 078 079 } 080 081 }; 082 083 String resource = "file:/home/burton/index.rss"; 084 085 ResourceRequest request = ResourceRequestFactory 086 .getResourceRequest( resource ); 087 088 parser.parse( request.getInputStream(), handler ); 089 090 } 091 092 public static void doTestDefault() throws Exception { 093 094 FeedParser parser = FeedParserFactory.newFeedParser(); 095 FeedParserListener listener = new DefaultFeedParserListener() {}; 096 097 String resource = "file:/home/burton/index.rss"; 098 099 ResourceRequest request = ResourceRequestFactory 100 .getResourceRequest( resource ); 101 102 parser.parse( listener, 103 request.getInputStream(), 104 resource ); 105 106 } 107 108 public static void main( String[] args ) throws Exception { 109 110 DebugPerformance test = new DebugPerformance(); 111 112 //test.testGetWeblogLinkForResource(); 113 //test.test1(); 114 115 doTestMethod( "doTestSAX", DebugPerformance.class, 100 ); 116 doTestMethod( "doTestDefault", DebugPerformance.class, 100 ); 117 118 } 119 120 public static void doTestMethod( String name, Class clazz, int max ) throws Exception { 121 122 Method method = clazz.getMethod( name, null ); 123 124 System.out.println( "Testing method: " + name ); 125 126 long duration = 0; 127 128 for ( int i = 0; i <= max; ++i ) { 129 130 long before = System.currentTimeMillis(); 131 132 method.invoke( null, null ); 133 134 if ( i == 0 ) 135 continue; //don't measure the first call 136 137 long after = System.currentTimeMillis(); 138 duration += after-before; 139 140 } 141 142 System.out.println( "----------------" ); 143 System.out.println( "Total parse count: " + max ); 144 145 System.out.println( "Total duration: " + duration + " milliseconds" ); 146 147 float totalAvgDuration = (float)duration / (float)max; 148 149 System.out.println( "Total avg duration: " + totalAvgDuration + " milliseconds" ); 150 151 float totalPerSecond = 1000 / totalAvgDuration; 152 153 System.out.println( "Total per second: " + totalPerSecond ); 154 155 } 156 157 } 158