FileDocCategorySizeDatePackage
PerformanceMonitor.javaAPI DocJ2ME MIDP 2.05960Thu Nov 07 12:02:24 GMT 2002com.sun.midp.perfmon

PerformanceMonitor.java

/*
 * @(#)PerformanceMonitor.java	1.9 02/07/24 @(#)
 *
 * Copyright (c) 2001-2002 Sun Microsystems, Inc.  All rights reserved.
 * PROPRIETARY/CONFIDENTIAL
 * Use is subject to license terms.
 */

package com.sun.midp.perfmon;

import java.io.PrintStream;

/**
 * A class that implements the <code>PerformanceMonitor</code> interface.
 * A performance monitor session consists of a start time [ call <code>start 
 * </code> method ] and an end time [ call <code>end</code> method ]. 
 * This class tracks a number of system resources and provides the 
 * ability to track system resource for delta's (between the start and 
 * end of a session).
 *
 * <p>Each performance monitor session must include a call to first the 
 * <code>start</code> and second the <code>end</code> methods in order 
 * to measure system resource delta's. Once a proper session call sequence 
 * has been made the application can then access the appropriate methods 
 * to retrieve the desired system resource delta.
 * Once a call has been made to <code>start</code> method a new session 
 * has been started. If the application calls <code>end</code> before 
 * <code>start</code> an error will be returned.
 *
 * <p>In order to ensure data integrity the implemenation of the 
 * PerformanceMonitor interface requires the  application using the
 * interface always uses the interface with the proper calling sequence.
 * Below is an example of how an application would use the PerformanceMonitor
 * interface (and/or implemenation) correctly:
 *
 * <p> This example of code shows how an application might want to use
 * the PerformanceMonitor interface to measure read() I/O resources.
 *
 * <pre>
 *     start = perfmon.start("read()");  // start a perfmon session
 *
 *     for (int i = 0 ; i < len ; i++ ) {
 *         if ((ch = input.read()) != -1){
 *		if (ch <= ' ') ch = ' ';
 *		b.append((char) ch);
 *	    }
 *	}
 *      end = perfmon.end();            // end a perfmon session
 *
 *      perfmon.report(System.err);     // print stdout standard report format
 *           
 *      perfmon.write(System.err);      // write key/value pair http-to-servlet
 * </pre>
 *
 */ 

public interface PerformanceMonitor {
        
    /**
    * Specifies instruction counter.
    */
    static final int INSTRUCTION_COUNTER         =  0;
    /**
    * Specifies thread switch counter.
    */
    static final int THREAD_SWITCH_COUNTER       =  1;
    /**
    * Specifies dynamic object counter.
    */
    static final int DYNAMIC_OBJECT_COUNTER      =  2;
    /**
    * Specifies dynamic allocation counter.
    */
    static final int DYNAMIC_ALLOC_COUNTER       =  3;
    /**
    * Specifies dynamic deallocation counter.
    */
    static final int DYNAMIC_DEALLOC_COUNTER     =  4;
    /**
    * Specifies garbage collection counter.
    */
    static final int GARBAGE_COLLECTION_COUNTER  =  5;
    /**
    * Specifies total garbage collection deferrals.
    */
    static final int TOTAL_GC_DEFERRALS          =  6;
    /**
    * Specifies maximum garbage collection deferrals.
    */
    static final int MAX_GC_DEFERRALS            =  7;
    /**
    * Specifies garbage collection rescans.
    */
    static final int GARBAGE_COLLECTION_RESCANS  =  8;
    /**
     * Total number of performance measurement counters.
     */
    static final int TOTAL_SYSTEM_PERFMON_COUNTERS = 9;

    /**
     *  Starts the performance monitor timer and system measurements
     *  and sets (or resets) the start time in milliseconds.
     *
     * @param      testname          current test name
     * @return                       start time in milliseconds
     *                               (long - returns Date.getTime())
     */
    public long start(String testname);

    /**
     *  Ends the performance monitor timer and system measurements
     *  and sets (or resets) the end time in milliseconds.
     *
     * @return                       end time in milliseconds
     *                               (long - returns Date.getTime())
     */
    public long end();

    /**
     *  Reports a standard output format to the PrintStream specified
     *  which includes delta measurements (e.g. elapsed time) between
     *  a specific start and end time.
     *
     * @param      printstream       where to write the output buffer
     */
    public void report(PrintStream printstream);

    /**
     * Gets the current perfmon stat value.
     *
     * @param     perfmon_id perfmon id (e.g. THREAD_SWITCH_COUNTER).
     * @return               perfmon status current (int) value
     * @exception IllegalArgumentException an invalid perfmon id type
     */
    public int getStat(int perfmon_id)  
        throws IllegalArgumentException;

    /**
     *  Gets the appropriate perfmon status delta measurement value between
     *  a specific start and end time. 
     * 
     *
     * @param     perfmon_id performon id (e.g. THREAD_SWITCH_COUNTER).
     * @return               perfmon stat (int) value (between start and end)
     * @exception IllegalStateException    if start or end equal 0
     * @exception IllegalArgumentException invalid measurement type
     */
    public int getDelta(int perfmon_id)  
        throws IllegalStateException, IllegalArgumentException;

    /**
     * Gets the current perfmon session start time in milliseconds.
     *
     * @return                current perfmon start time in milliseconds
     */
    public long getStartTime();

    /**
     * Gets the current perfmon session end time in milliseconds.
     *
     * @return                current perfmon end time in milliseconds
     */
    public long getEndTime();

    /**
     * Gets the current perfmon session end time in milliseconds.
     *
     * @return               current perfmon end time in milliseconds
     * @exception IllegalStateException  if start or end equal 0
     */
    public long getElapsedTime()  
        throws IllegalStateException;
    
}