cziegeler 2002/06/27 03:06:57 Modified: . changes.xml src/java/org/apache/cocoon/components/profiler ProfilerData.java ProfilerGenerator.java ProfilingCachingProcessingPipeline.java ProfilingNonCachingProcessingPipeline.java ProfilingSAXConnector.java src/webapp/WEB-INF cocoon.xconf Log: Refactored the profiling code, no need for sax connectors anymore Revision Changes Path 1.196 +5 -2 xml-cocoon2/changes.xml Index: changes.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/changes.xml,v retrieving revision 1.195 retrieving revision 1.196 diff -u -r1.195 -r1.196 --- changes.xml 24 Jun 2002 20:32:18 -0000 1.195 +++ changes.xml 27 Jun 2002 10:06:56 -0000 1.196 @@ -25,6 +25,7 @@ <person name="Berin Loritsch" email="[EMAIL PROTECTED]" id="BL"/> <person name="Stefano Mazzocchi" email="[EMAIL PROTECTED]" id="SM"/> <person name="Stephan Michels" email="[EMAIL PROTECTED]" id="SMS"/> + <person name="John Morrison" email="[EMAIL PROTECTED]" id="JM"/> <person name="Giacomo Pati" email="[EMAIL PROTECTED]" id="GP"/> <person name="Konstantin Piroumian" email="[EMAIL PROTECTED]" id="KP"/> <person name="Ovidiu Predescu" email="[EMAIL PROTECTED]" id="OP"/> @@ -35,10 +36,12 @@ <person name="Davanum Srinivas" email="[EMAIL PROTECTED]" id="DM"/> <person name="Sylvain Wallez" email="[EMAIL PROTECTED]" id="SW"/> <person name="Carsten Ziegeler" email="[EMAIL PROTECTED]" id="CZ"/> - <person name="John Morrison" email="[EMAIL PROTECTED]" id="JM"/> </devs> <release version="@version@" date="@date@"> + <action dev="CZ" type="update"> + Updated the profiler code, removed the need of SAXConnectors. + </action> <action dev="SW" type="add"> Extend the syntax of sitemap variable substitution : variables can have a prefix which indicates an InputModule where to get the value from. For example, the expression 1.6 +1 -12 xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilerData.java Index: ProfilerData.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilerData.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ProfilerData.java 26 Jun 2002 14:07:22 -0000 1.5 +++ ProfilerData.java 27 Jun 2002 10:06:56 -0000 1.6 @@ -95,17 +95,6 @@ a.add(new Entry(component, role, source)); } - public int indexOf(Object component) - { - for(int i=0; i<a.size(); i++){ - // FIXME - this does not work if caching is used, as - // a transformer might be compared with an XMLTeePipe - if(((Entry)a.get(i)).component == component) - return i; - } - return -1; - } - public void setTime(int i, long time) { ((Entry)a.get(i)).time = time; 1.6 +14 -18 xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilerGenerator.java Index: ProfilerGenerator.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilerGenerator.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ProfilerGenerator.java 22 Feb 2002 07:00:11 -0000 1.5 +++ ProfilerGenerator.java 27 Jun 2002 10:06:56 -0000 1.6 @@ -50,11 +50,8 @@ */ package org.apache.cocoon.components.profiler; -import org.apache.avalon.excalibur.pool.Recyclable; -import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.component.ComponentManager; -import org.apache.avalon.framework.component.Composable; import org.apache.cocoon.generation.ComposerGenerator; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; @@ -71,8 +68,8 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a> * @version CVS $Id$ */ -public class ProfilerGenerator extends ComposerGenerator -implements Recyclable, Composable, Disposable { +public class ProfilerGenerator +extends ComposerGenerator { /** * The XML namespace for the output document. @@ -81,21 +78,20 @@ private Profiler profiler; - - public void compose(ComponentManager manager) throws ComponentException - { + /** + * Composable + */ + public void compose(ComponentManager manager) + throws ComponentException { super.compose(manager); - - try{ - this.profiler = (Profiler)super.manager.lookup(Profiler.ROLE); - }catch(Exception e){ - e.printStackTrace(); - } + this.profiler = (Profiler)super.manager.lookup(Profiler.ROLE); } - public void dispose() - { - if(this.profiler != null){ + /** + * Disposable + */ + public void dispose() { + if (this.profiler != null){ super.manager.release(this.profiler); this.profiler = null; } 1.3 +40 -13 xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilingCachingProcessingPipeline.java Index: ProfilingCachingProcessingPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilingCachingProcessingPipeline.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ProfilingCachingProcessingPipeline.java 25 Jun 2002 06:09:01 -0000 1.2 +++ ProfilingCachingProcessingPipeline.java 27 Jun 2002 10:06:56 -0000 1.3 @@ -59,6 +59,8 @@ import org.apache.cocoon.ProcessingException; import org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline; import org.apache.cocoon.environment.Environment; +import org.apache.cocoon.xml.XMLConsumer; +import org.apache.cocoon.xml.XMLProducer; /** * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a> @@ -67,28 +69,38 @@ public class ProfilingCachingProcessingPipeline extends CachingProcessingPipeline { - private ComponentManager manager; private Profiler profiler; private ProfilerData data = null; + private int index = 0; + /** + * Composable + */ public void compose(ComponentManager manager) throws ComponentException { super.compose(manager); - - this.manager = manager; this.profiler = (Profiler)manager.lookup(Profiler.ROLE); } + /** + * Disposable + */ public void dispose() { - super.dispose(); - if(this.profiler != null){ this.manager.release(this.profiler); this.profiler = null; } - this.manager = null; + super.dispose(); + } + + /** + * Recyclable + */ + public void recycle() { + this.data = null; + super.recycle(); } public void setGenerator (String role, String source, Parameters param) @@ -111,10 +123,9 @@ public boolean process(Environment environment) throws ProcessingException { - // FIXME - If a reader is used, data is not set + this.index = 0; if (this.data != null) { this.data.addComponent(super.lastConsumer, null, null); - environment.getObjectModel().put("profiler", data); // Execute pipeline long time = System.currentTimeMillis(); @@ -125,12 +136,28 @@ profiler.addResult(environment.getURI(), data); return result; } else { - return super.process( environment ); + this.data = new ProfilerData(); + long time = System.currentTimeMillis(); + boolean result = super.process( environment ); + this.data.setTime(0, System.currentTimeMillis() - time); + // Report + profiler.addResult(environment.getURI(), data); + return result; } } - public void recycle() { - this.data = null; - super.recycle(); + /** + * Connect the next component + */ + protected void connect(Environment environment, + XMLProducer producer, + XMLConsumer consumer) + throws ProcessingException { + ProfilingSAXConnector connector = new ProfilingSAXConnector(); + connector.setup(this.index, this.data); + this.index++; + super.connect(environment, producer, connector); + super.connect(environment, connector, consumer); } + } 1.3 +41 -13 xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilingNonCachingProcessingPipeline.java Index: ProfilingNonCachingProcessingPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilingNonCachingProcessingPipeline.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ProfilingNonCachingProcessingPipeline.java 25 Jun 2002 06:09:01 -0000 1.2 +++ ProfilingNonCachingProcessingPipeline.java 27 Jun 2002 10:06:56 -0000 1.3 @@ -59,6 +59,8 @@ import org.apache.cocoon.ProcessingException; import org.apache.cocoon.components.pipeline.impl.NonCachingProcessingPipeline; import org.apache.cocoon.environment.Environment; +import org.apache.cocoon.xml.XMLConsumer; +import org.apache.cocoon.xml.XMLProducer; /** * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a> @@ -68,33 +70,44 @@ extends NonCachingProcessingPipeline implements Disposable { - private ComponentManager manager; private Profiler profiler; private ProfilerData data = null; + private int index = 0; + /** + * Composable + */ public void compose(ComponentManager manager) throws ComponentException { super.compose(manager); - - this.manager = manager; this.profiler = (Profiler)manager.lookup(Profiler.ROLE); } + /** + * Disposable + */ public void dispose() { if (this.profiler != null){ this.manager.release(this.profiler); this.profiler = null; } - this.manager = null; + } + + /** + * Recyclable + */ + public void recycle() { + this.data = null; + super.recycle(); } public void setGenerator (String role, String source, Parameters param) throws ProcessingException { super.setGenerator(role, source, param); - if(this.data == null) + if (this.data == null) this.data = new ProfilerData(); this.data.setGenerator(super.generator, role, source); } @@ -103,17 +116,16 @@ throws ProcessingException { super.addTransformer(role, source, param); - if(this.data == null) + if (this.data == null) this.data = new ProfilerData(); this.data.addComponent(super.transformers.get(super.transformers.size()-1), role, source); } public boolean process(Environment environment) throws ProcessingException { - // FIXME - If a reader is used, data is not set + this.index = 0; if (this.data != null) { this.data.addComponent(super.lastConsumer, null, null); - environment.getObjectModel().put("profiler", data); // Execute pipeline long time = System.currentTimeMillis(); @@ -124,12 +136,28 @@ profiler.addResult(environment.getURI(), data); return result; } else { - return super.process( environment ); + this.data = new ProfilerData(); + long time = System.currentTimeMillis(); + boolean result = super.process( environment ); + this.data.setTime(0, System.currentTimeMillis() - time); + // Report + profiler.addResult(environment.getURI(), data); + return result; } } - public void recycle() { - this.data = null; - super.recycle(); + /** + * Connect the next component + */ + protected void connect(Environment environment, + XMLProducer producer, + XMLConsumer consumer) + throws ProcessingException { + ProfilingSAXConnector connector = new ProfilingSAXConnector(); + connector.setup(this.index, this.data); + this.index++; + super.connect(environment, producer, connector); + super.connect(environment, connector, consumer); } + } 1.6 +9 -44 xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilingSAXConnector.java Index: ProfilingSAXConnector.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/profiler/ProfilingSAXConnector.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ProfilingSAXConnector.java 13 May 2002 16:06:52 -0000 1.5 +++ ProfilingSAXConnector.java 27 Jun 2002 10:06:56 -0000 1.6 @@ -50,27 +50,16 @@ */ package org.apache.cocoon.components.profiler; -import org.apache.avalon.excalibur.pool.Recyclable; -import org.apache.avalon.framework.parameters.Parameters; -import org.apache.cocoon.ProcessingException; -import org.apache.cocoon.components.saxconnector.SAXConnector; -import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.xml.AbstractXMLPipe; -import org.apache.cocoon.xml.XMLConsumer; import org.xml.sax.Attributes; import org.xml.sax.SAXException; -import java.io.IOException; -import java.util.Map; - /** * This SAX connector measures time taken by the following SAX handler. * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a> * @version CVS $Id$ */ -public class ProfilingSAXConnector extends AbstractXMLPipe - implements Recyclable, SAXConnector -{ +public class ProfilingSAXConnector extends AbstractXMLPipe { private ProfilerData data; private int index; private long time; @@ -79,42 +68,18 @@ /** * Setup this SAXConnector. */ - public void setup(SourceResolver resolver, Map objectModel, String src, Parameters params) - throws ProcessingException, SAXException, IOException - { - this.data = (ProfilerData)objectModel.get("profiler"); - } - - /** - * Recycle the SAXConnector - */ - public void recycle() - { - this.data = null; - this.time = this.total = 0; - this.index = -1; - super.recycle(); - } - - public void setConsumer(XMLConsumer consumer) - { - super.setConsumer(consumer); - if(this.data != null) - this.index = this.data.indexOf(consumer); - else - this.index = -1; + public void setup(int index, ProfilerData data) { + this.index = index; + this.data = data; } - - public void startDocument() throws SAXException - { + public void startDocument() throws SAXException { time = System.currentTimeMillis(); super.startDocument(); total += System.currentTimeMillis() - time; } - public void endDocument() throws SAXException - { + public void endDocument() throws SAXException { time = System.currentTimeMillis(); super.endDocument(); total += System.currentTimeMillis() - time; @@ -122,8 +87,8 @@ data.setTime(index, total); } - public void startPrefixMapping(String prefix, String uri) throws SAXException - { + public void startPrefixMapping(String prefix, String uri) + throws SAXException { time = System.currentTimeMillis(); super.startPrefixMapping(prefix, uri); total += System.currentTimeMillis() - time; 1.25 +1 -3 xml-cocoon2/src/webapp/WEB-INF/cocoon.xconf Index: cocoon.xconf =================================================================== RCS file: /home/cvs/xml-cocoon2/src/webapp/WEB-INF/cocoon.xconf,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- cocoon.xconf 27 May 2002 14:02:30 -0000 1.24 +++ cocoon.xconf 27 Jun 2002 10:06:57 -0000 1.25 @@ -458,16 +458,14 @@ Connects the various pipeline components. LoggingSAXConnector logs SAX events between pipeline components into cocoon's log file. - ProfilingSAXConnector gathers timing information. Uncomment one of the following lines for using the SAXConnector. <sax-connector class="org.apache.cocoon.components.saxconnector.LoggingSAXConnector"/> - <sax-connector class="org.apache.cocoon.components.profiler.ProfilingSAXConnector"/> --> <!-- Profiler: The profiler facilitates the gathering of statistics about timings of different steps of pipelines. Profiler consists of several components: - profiling pipeline, profiling SAX connector, and profiler generator + profiling pipeline and profiler generator which are used to generate the profile report. You need to enable all of these components to use profiler.
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]