You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by bl...@apache.org on 2001/12/13 20:36:48 UTC
cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile AbstractProfilePoint.java CSVProfiler.java EventsPerSampleProfilePoint.java PeekValueProfilePoint.java Profilable.java ProfilePoint.java Profiler.java ValueProfilePoint.java
bloritsch 01/12/13 11:36:48
Added: src/scratchpad/org/apache/avalon/excalibur/profile
AbstractProfilePoint.java CSVProfiler.java
EventsPerSampleProfilePoint.java
PeekValueProfilePoint.java Profilable.java
ProfilePoint.java Profiler.java
ValueProfilePoint.java
Log:
add profile to excalibur
Revision Changes Path
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/AbstractProfilePoint.java
Index: AbstractProfilePoint.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
/**
* The ProfilPoint interface is to mark objects that can be sampled by a
* Profiler. The interface only has one sampling method to simplify the items
* that can be sampled.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public class AbstractProfilePoint implements ProfilePoint
{
private final String m_name;
/**
* Initializes the ProfilePoint with a name.
*/
public AbstractProfilePoint( String name )
{
m_name = name;
}
/**
* Get the ProfilePoint's name. The Profiler uses this so that the
* heading for the sample data makes sense.
*/
public final String getName()
{
return m_name;
}
}
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/CSVProfiler.java
Index: CSVProfiler.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
import java.io.File;
import java.io.IOException;
import java.util.Set;
import java.util.HashSet;
/**
* This Profiler is a simple implementation that serializes the values in
* a Comma Separated Value (CSV) file.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public class CSVProfiler implements Profiler, Startable
{
private Set m_profilables = new HashSet();
private Thread m_thread = null;
/**
* Adds a target to profile, along with a name for the target. Good names
* include what the expected samples are. For instance "ThreadController:
* number of threads" or "EventQueue: events processed per second". The real
* results come from the Profilable object itself, but the name is so humans
* have a reference for the values. NOTE: if the Profilable class does
* not expose any ProfilePoints, it is excluded from the list of Profilable
* classes that are notified when the Profiler is active.
*
* @parameter profileSource The actual source of the samples
*/
void add( Profilable profileSource );
/**
* Serializes the results of the profiling to a file. The actual format
* depends on the Profiler in use. It can be simple Comma Separated Values
* (CSV) with the columns representing a unique Profilable. Most spreadsheet
* programs can import this and generate meaningful graphs from it. Another
* alternative is to output the information in a tool specific format. The
* actual format depends on the Profiler in question, and the Profiler merely
* needs the reference to the output file.
*
* @parameter outputInfo The handle of the file the profiler serializes the
* results to.
*
* @throws <code>IOException</code> If the file is not valid, or cannot be
* written to.
*/
void serialize( File outputInfo ) throws IOException;
}
private class Sampler implements Runnable
{
private final Set m_profilables;
private final File m_outputFile;
}
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/EventsPerSampleProfilePoint.java
Index: EventsPerSampleProfilePoint.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
/**
* The ProfilPoint interface is to mark objects that can be sampled by a
* Profiler. The interface only has one sampling method to simplify the items
* that can be sampled.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public class EventsPerSampleProfilePoint extends AbstractProfilePoint
{
private int m_value = 0;
/**
* Creates a EventsPerSampleProfilePoint with an initial name.
*/
public EventsPerSampleProfilePoint( String name )
{
super( name );
}
/**
* Set the sample value
*/
public void increment( )
{
m_value++;
}
/**
* Obtain the sample. All samples are an integer, so the profiled objects
* must measure quantity (numbers of items), rate (items/period), time in
* milliseconds, etc.
*/
public int getSample()
{
final int returnValue = m_value;
m_value = 0;
return returnValue;
}
}
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/PeekValueProfilePoint.java
Index: PeekValueProfilePoint.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
/**
* The ProfilPoint interface is to mark objects that can be sampled by a
* Profiler. The interface only has one sampling method to simplify the items
* that can be sampled.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public class PeekValueProfilePoint extends AbstractProfilePoint
{
private int m_value = 0;
/**
* Creates a PeekValueProfilePoint with an initial name.
*/
public PeekValueProfilePoint( String name )
{
super( name );
}
/**
* Set the sample value
*/
public void setValue( int currentValue )
{
if ( currentValue > m_value )
{
m_value = currentValue;
}
}
/**
* Obtain the sample. All samples are an integer, so the profiled objects
* must measure quantity (numbers of items), rate (items/period), time in
* milliseconds, etc.
*/
public int getSample()
{
return m_value;
}
}
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/Profilable.java
Index: Profilable.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
/**
* The Profilable interface is to mark objects that can be sampled by a Profiler.
* The interface provides a method to initialize the profiler, plus two methods
* to provide an optimization cue for the object (when it is safe not to track
* events).
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public interface Profilable
{
/**
* Obtain a reference to all the ProfilePoints that the Profilable
* object wishes to expose. All sampling is done directly through
* the ProfilePoints as opposed to the Profilable interface.
*/
ProfilePoint[] getProfilePoints();
/**
* The Profiler will call this method when it begins taking samples.
* This is an optimization cue to the Profilable class. It does take
* resources to hold ProfilePoints and update them. A class may keep
* a <code>boolean</code> to flag whether the ProfilePoints are to be
* maintained.
*/
void startProfiling();
/**
* The Profiler will call this method when it no longer is interested
* in taking samples. It is an optimization cue to the Profilable
* class so that it can release resources and stop maintaining the
* ProfilePoints.
*/
void stopProfiling();
}
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/ProfilePoint.java
Index: ProfilePoint.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
/**
* The ProfilPoint interface is to mark objects that can be sampled by a
* Profiler. The interface only has one sampling method to simplify the items
* that can be sampled.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public interface ProfilePoint
{
/**
* Get the ProfilePoint's name. The Profiler uses this so that the
* heading for the sample data makes sense.
*/
String getName();
/**
* Obtain the sample. All samples are an integer, so the profiled objects
* must measure quantity (numbers of items), rate (items/period), time in
* milliseconds, etc.
*/
int getSample();
}
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/Profiler.java
Index: Profiler.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
import java.io.File;
import java.io.IOException;
/**
* The Profiler is used to determine numeric values for specific parts of the
* Avalon environment. The idea is to add references to Profilable objects to
* the Profiler. The Profiler takes periodic snapshots of the running system
* so that performance or resource usage can be assertained. The sample duration
* is dependant on the Profiler's settings, and should never change during the
* time the Profiler is running.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public interface Profiler
{
/**
* Adds a target to profile, along with a name for the target. Good names
* include what the expected samples are. For instance "ThreadController:
* number of threads" or "EventQueue: events processed per second". The real
* results come from the Profilable object itself, but the name is so humans
* have a reference for the values. NOTE: if the Profilable class does
* not expose any ProfilePoints, it is excluded from the list of Profilable
* classes that are notified when the Profiler is active.
*
* @parameter profileSource The actual source of the samples
*/
void add( Profilable profileSource );
/**
* Serializes the results of the profiling to a file. The actual format
* depends on the Profiler in use. It can be simple Comma Separated Values
* (CSV) with the columns representing a unique Profilable. Most spreadsheet
* programs can import this and generate meaningful graphs from it. Another
* alternative is to output the information in a tool specific format. The
* actual format depends on the Profiler in question, and the Profiler merely
* needs the reference to the output file.
*
* @parameter outputInfo The handle of the file the profiler serializes the
* results to.
*
* @throws <code>IOException</code> If the file is not valid, or cannot be
* written to.
*/
void serialize( File outputInfo ) throws IOException;
}
1.1 jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/profile/ValueProfilePoint.java
Index: ValueProfilePoint.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.profile;
/**
* The ProfilPoint interface is to mark objects that can be sampled by a
* Profiler. The interface only has one sampling method to simplify the items
* that can be sampled.
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
*/
public class ValueProfilePoint extends AbstractProfilePoint
{
private int m_value = 0;
/**
* Creates a ValueProfilePoint with an initial name.
*/
public ValueProfilePoint( String name )
{
super( name );
}
/**
* Set the sample value
*/
public void setValue( int currentValue )
{
m_value = currentValue;
}
/**
* Obtain the sample. All samples are an integer, so the profiled objects
* must measure quantity (numbers of items), rate (items/period), time in
* milliseconds, etc.
*/
public int getSample()
{
return m_value;
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>