You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by le...@apache.org on 2002/03/06 07:45:04 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler AbstractProfileSample.java DefaultProfilerManager.java ProfilableProxy.java ProfilePointProxy.java ProfileSample.java

leif        02/03/05 22:45:04

  Modified:    src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler
                        AbstractProfileSample.java
                        DefaultProfilerManager.java ProfilableProxy.java
                        ProfilePointProxy.java ProfileSample.java
  Log:
  Add support for compact profiler state files.
  
  Revision  Changes    Path
  1.4       +67 -11    jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/AbstractProfileSample.java
  
  Index: AbstractProfileSample.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/AbstractProfileSample.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractProfileSample.java	5 Mar 2002 12:34:32 -0000	1.3
  +++ AbstractProfileSample.java	6 Mar 2002 06:45:04 -0000	1.4
  @@ -9,6 +9,7 @@
   
   import java.util.ArrayList;
   import java.util.Arrays;
  +import java.util.StringTokenizer;
   
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  @@ -20,7 +21,7 @@
    *  ProfileSamples.
    *
    * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
  - * @version CVS $Revision: 1.3 $ $Date: 2002/03/05 12:34:32 $
  + * @version CVS $Revision: 1.4 $ $Date: 2002/03/06 06:45:04 $
    * @since 4.1
    */
   abstract class AbstractProfileSample
  @@ -369,9 +370,12 @@
       /**
        * Saves the current state into a Configuration.
        *
  +     * @param useCompactSamples Flag for whether or not ProfileSample data
  +     *                          should be saved in compact format or not.
  +     *
        * @return The state as a Configuration.
        */
  -    public final Configuration saveState()
  +    public final Configuration saveState( boolean useCompactSamples )
       {
           synchronized(this)
           {
  @@ -382,11 +386,28 @@
               // Save the history samples so that the newest is first.
               DefaultConfiguration samples = new DefaultConfiguration( "history", "-" );
               int[] history = getHistorySnapshot();
  -            for ( int i = history.length - 1; i >= 0; i-- )
  +            if ( useCompactSamples )
  +            {
  +                StringBuffer sb = new StringBuffer();
  +                
  +                // Store the first value outside the loop to simplify the loop.
  +                sb.append( history[ history.length - 1 ] );
  +                for ( int i = history.length - 2; i >= 0; i-- )
  +                {
  +                    sb.append( ',' );
  +                    sb.append( history[ i ] );
  +                }
  +                
  +                samples.setValue( sb.toString() );
  +            }
  +            else
               {
  -                DefaultConfiguration sample = new DefaultConfiguration( "sample", "-" );
  -                sample.setValue( Integer.toString( history[i] ) );
  -                samples.addChild( sample );
  +                for ( int i = history.length - 1; i >= 0; i-- )
  +                {
  +                    DefaultConfiguration sample = new DefaultConfiguration( "sample", "-" );
  +                    sample.setValue( Integer.toString( history[i] ) );
  +                    samples.addChild( sample );
  +                }
               }
               state.addChild( samples );
               
  @@ -418,20 +439,55 @@
               //  First sample is the current value, following sames go back in
               //   time from newest to oldest.
               Configuration history = state.getChild( "history" );
  -            Configuration samples[] = history.getChildren( "sample" );
               
  +            Configuration samples[] = history.getChildren( "sample" );
  +            int[] sampleValues;
  +            if ( samples.length == 0 )
  +            {
  +                // No sample children.  The data may be stored in compact form
  +                String compactSamples = history.getValue();
  +                
  +                // Sample values are stored in newest to oldest order.
  +                StringTokenizer st = new StringTokenizer( compactSamples, "," );
  +                sampleValues = new int[st.countTokens()];
  +                
  +                for ( int i = 0; i < sampleValues.length; i++ )
  +                {
  +                    try
  +                    {
  +                        sampleValues[i] = Integer.parseInt( st.nextToken() );
  +                    }
  +                    catch ( NumberFormatException e )
  +                    {
  +                        throw new ConfigurationException( "The compact sample data could not be " +
  +                            "loaded, because of a number format problem, for ProfileSample: " +
  +                            m_name ); 
  +                    }
  +                }
  +            }
  +            else
  +            {
  +                // Sample data stored as individual elements
  +                sampleValues = new int[ samples.length ];
  +                
  +                // Sample values are stored in newest to oldest order.
  +                for ( int i = 0; i < samples.length; i++ )
  +                {
  +                    sampleValues[i] = samples[ i ].getValueAsInteger();
  +                }
  +            }
               
               // Get the current value
               int value;
  -            if ( samples.length > 0 )
  +            if ( sampleValues.length > 0 )
               {
  -                value = samples[0].getValueAsInteger();
  +                value = sampleValues[0];
                   
                   for ( int i = 0; i < m_size - 1; i++ )
                   {
  -                    if ( i < samples.length - 1 )
  +                    if ( i < sampleValues.length - 1 )
                       {
  -                        m_historyOld[ m_size - 2 - i ] = samples[ i + 1 ].getValueAsInteger();
  +                        m_historyOld[ m_size - 2 - i ] = sampleValues[ i + 1 ];
                       }
                       else
                       {
  
  
  
  1.6       +8 -2      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/DefaultProfilerManager.java
  
  Index: DefaultProfilerManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/DefaultProfilerManager.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultProfilerManager.java	5 Mar 2002 16:35:59 -0000	1.5
  +++ DefaultProfilerManager.java	6 Mar 2002 06:45:04 -0000	1.6
  @@ -36,7 +36,7 @@
   /**
    *
    * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
  - * @version CVS $Revision: 1.5 $ $Date: 2002/03/05 16:35:59 $
  + * @version CVS $Revision: 1.6 $ $Date: 2002/03/06 06:45:04 $
    * @since 4.1
    */
   public class DefaultProfilerManager
  @@ -56,6 +56,9 @@
       /** Save state interval. */
       private long m_stateInterval;
       
  +    /** Use a compact format when saving profile sample data. */
  +    private boolean m_stateCompactSamples;
  +    
       /** Last time that the state was saved. */
       private long m_lastStateSave;
       
  @@ -138,6 +141,9 @@
               // Configure the state file.
               Configuration stateFileConf = configuration.getChild( "state-file" );
               m_stateInterval = stateFileConf.getAttributeAsLong( "interval", 60000 );
  +            m_stateCompactSamples = 
  +                stateFileConf.getAttributeAsBoolean( "use-compact-samples", true );
  +            
               String stateFile = stateFileConf.getValue( null );
               if ( stateFile != null )
               {
  @@ -404,7 +410,7 @@
               //  that will contain profile samples.
               if ( profilableProxies[i].isConfigured() )
               {
  -                state.addChild( profilableProxies[i].saveState() );
  +                state.addChild( profilableProxies[i].saveState( m_stateCompactSamples ) );
               }
           }
           
  
  
  
  1.5       +6 -3      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/ProfilableProxy.java
  
  Index: ProfilableProxy.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/ProfilableProxy.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ProfilableProxy.java	5 Mar 2002 16:35:59 -0000	1.4
  +++ ProfilableProxy.java	6 Mar 2002 06:45:04 -0000	1.5
  @@ -22,7 +22,7 @@
    * Not Synchronized.
    *
    * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
  - * @version CVS $Revision: 1.4 $ $Date: 2002/03/05 16:35:59 $
  + * @version CVS $Revision: 1.5 $ $Date: 2002/03/06 06:45:04 $
    * @since 4.1
    */
   class ProfilableProxy
  @@ -308,9 +308,12 @@
       /**
        * Saves the current state into a Configuration.
        *
  +     * @param useCompactSamples Flag for whether or not ProfileSample data
  +     *                          should be saved in compact format or not.
  +     *
        * @return The state as a Configuration.
        */
  -    Configuration saveState()
  +    Configuration saveState( boolean useCompactSamples )
       {
           DefaultConfiguration state = new DefaultConfiguration( "profilable", "-" );
           state.addAttribute( "name", m_name );
  @@ -322,7 +325,7 @@
               //  that will contain profile samples.
               if ( proxies[i].isConfigured() )
               {
  -                state.addChild( proxies[i].saveState() );
  +                state.addChild( proxies[i].saveState( useCompactSamples ) );
               }
           }
           
  
  
  
  1.4       +6 -3      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/ProfilePointProxy.java
  
  Index: ProfilePointProxy.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/ProfilePointProxy.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ProfilePointProxy.java	5 Mar 2002 12:34:32 -0000	1.3
  +++ ProfilePointProxy.java	6 Mar 2002 06:45:04 -0000	1.4
  @@ -29,7 +29,7 @@
    *  It is resolved when the Profilable actually registers the ProfilePoint.
    *
    * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
  - * @version CVS $Revision: 1.3 $ $Date: 2002/03/05 12:34:32 $
  + * @version CVS $Revision: 1.4 $ $Date: 2002/03/06 06:45:04 $
    * @since 4.1
    */
   public class ProfilePointProxy
  @@ -708,9 +708,12 @@
       /**
        * Saves the current state into a Configuration.
        *
  +     * @param useCompactSamples Flag for whether or not ProfileSample data
  +     *                          should be saved in compact format or not.
  +     *
        * @return The state as a Configuration.
        */
  -    Configuration saveState()
  +    Configuration saveState( boolean useCompactSamples )
       {
           DefaultConfiguration state = new DefaultConfiguration( "profile-point", "-" );
           state.addAttribute( "name", m_name );
  @@ -718,7 +721,7 @@
           ProfileSample[] samples = getProfileSamples();
           for ( int i = 0; i < samples.length; i++ )
           {
  -            state.addChild( samples[i].saveState() );
  +            state.addChild( samples[i].saveState( useCompactSamples ) );
           }
           
           return state;
  
  
  
  1.3       +5 -2      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/ProfileSample.java
  
  Index: ProfileSample.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/altprofile/profiler/ProfileSample.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProfileSample.java	5 Mar 2002 12:34:32 -0000	1.2
  +++ ProfileSample.java	6 Mar 2002 06:45:04 -0000	1.3
  @@ -16,7 +16,7 @@
    * Access to ProfileSamples are synchronized through the ProfileDataSet.
    *
    * @author <a href="mailto:leif@silveregg.co.jp">Leif Mortenson</a>
  - * @version CVS $Revision: 1.2 $ $Date: 2002/03/05 12:34:32 $
  + * @version CVS $Revision: 1.3 $ $Date: 2002/03/06 06:45:04 $
    * @since 4.1
    */
   public interface ProfileSample
  @@ -110,9 +110,12 @@
       /**
        * Saves the current state into a Configuration.
        *
  +     * @param useCompactSamples Flag for whether or not ProfileSample data
  +     *                          should be saved in compact format or not.
  +     *
        * @return The state as a Configuration.
        */
  -    Configuration saveState();
  +    Configuration saveState( boolean useCompactSamples );
       
       /**
        * Loads the state into the ProfileSample.
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>