Class PerfTest

  • Direct Known Subclasses:
    BreakIteratorPerformanceTest, ConverterPerformanceTest, DateFormatPerformanceTest, DecimalFormatPerformanceTest, NormalizerPerformanceTest, RBBIPerf, ResourceBundlePerf, ServiceObjectCreationPerf, UCharacterPerf, UnicodeSetPerf

    public abstract class PerfTest
    extends java.lang.Object
    Base class for performance testing framework. To use, the subclass can simply define one or more instance methods with names beginning with "test" (case ignored). The prototype of the method is PerfTest.Function testTheName()

    The actual performance test will execute on the returned Command object (refer to Command Pattern). To call a test from command line, the 'test' prefix of the test method name can be ignored/removed.

    In addition, the subclass should define a main() method that calls PerfTest.run() as defined here.

    If the subclasses use any command line arguments (beyond those handled automatically by this class) then it should override PerfTest.setup() to handle its arguments. If the subclasses need more sophisticated management for controlling finding/calling test method, it can replace the default implementation for PerfTest.testProvider before calling PerfTest.run().

    Example invocation: java -cp classes -verbose:gc com.ibm.icu.dev.test.perf.UnicodeSetPerf --gc --passes 4 --iterations 100 UnicodeSetAdd [[:l:][:c:]]

    Example output: [GC 511K->192K(1984K), 0.0086170 secs] [GC 704K->353K(1984K), 0.0059619 secs] [Full GC 618K->371K(1984K), 0.0242779 secs] [Full GC 371K->371K(1984K), 0.0228649 secs] = testUnicodeSetAdd begin 100 = testUnicodeSetAdd end 11977 1109044 = testUnicodeSetAdd begin 100 = testUnicodeSetAdd end 12047 1109044 = testUnicodeSetAdd begin 100 = testUnicodeSetAdd end 11987 1109044 = testUnicodeSetAdd begin 100 = testUnicodeSetAdd end 11978 1109044

    The [] lines are emitted by the JVM as a result of the -verbose:gc switch.

    Lines beginning with '=' are emitted by PerfTest: = testUnicodeSetAdd begin 100 A 'begin' statement contains the name of the setup method, which determines what test function is measures, and the number of iterations that will be times. = testUnicodeSetAdd end 12047 1109044 An 'end' statement gives the name of the setup method again, and then two integers. The first is the total elapsed time in milliseconds, and the second is the number of events per iteration. In this example, the time per event is 12047 / (100 * 1109044) or 108.6 ns/event.

    Raw times are given as integer ms, because this is what the system measures.

    Since:
    ICU 2.4
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected boolean action  
      (package private) static java.lang.String ACTION  
      protected boolean bulk_mode  
      (package private) static java.lang.String BULK_MODE  
      protected boolean doPriorGC  
      protected int duration  
      (package private) static java.lang.String DURATION  
      protected java.lang.String encoding  
      (package private) static java.lang.String ENCODING  
      (package private) static java.lang.String FILE_NAME  
      protected java.lang.String fileName  
      (package private) static java.lang.String GARBAGE_COLLECT  
      (package private) static java.lang.String HELP
      These are to be used in Options.
      protected int iterations  
      (package private) static java.lang.String ITERATIONS  
      protected boolean line_mode  
      (package private) static java.lang.String LINE_MODE  
      (package private) static java.lang.String LIST  
      protected java.util.Locale locale  
      (package private) static java.lang.String LOCALE  
      (package private) static org.apache.commons.cli.Options OPTIONS  
      protected int passes  
      (package private) static java.lang.String PASSES  
      protected java.lang.String sourceDir  
      (package private) static java.lang.String SOURCEDIR  
      (package private) static java.lang.String TEST_NAME  
      protected java.lang.String testName  
      protected PerfTest.TestCmdProvider testProvider  
      protected int threads  
      (package private) static java.lang.String THREADS  
      protected int time  
      (package private) static java.lang.String TIME  
      protected boolean uselen  
      (package private) static java.lang.String USELEN  
      protected boolean verbose  
      (package private) static java.lang.String VERBOSE  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected PerfTest()
      Constructor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void gc()
      Invoke the runtime's garbage collection procedure repeatedly until the amount of free memory stabilizes to within 10%.
      private long getIteration​(java.lang.String methName, PerfTest.Function fn)
      Translate '-t time' to iterations (or just return '-i iteration')
      (package private) org.apache.commons.cli.Options getOptions()  
      private java.util.Set<java.lang.String> parseOptions​(java.lang.String[] args)  
      private long performLoops​(PerfTest.Function function, long loops)  
      java.lang.String readDataLine​(java.io.BufferedReader br)  
      protected java.lang.String[] readLines​(java.lang.String filename, java.lang.String srcEncoding, boolean bulkMode)  
      static byte[] readToEOS​(java.io.InputStream stream)  
      static char[] readToEOS​(java.io.Reader reader)  
      protected void run​(java.lang.String[] args)
      Subclasses should call this method in their main().
      protected void setup​(java.lang.String[] args)
      Framework method.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • verbose

        protected boolean verbose
      • sourceDir

        protected java.lang.String sourceDir
      • fileName

        protected java.lang.String fileName
      • encoding

        protected java.lang.String encoding
      • testName

        protected java.lang.String testName
      • uselen

        protected boolean uselen
      • iterations

        protected int iterations
      • passes

        protected int passes
      • time

        protected int time
      • line_mode

        protected boolean line_mode
      • bulk_mode

        protected boolean bulk_mode
      • locale

        protected java.util.Locale locale
      • doPriorGC

        protected boolean doPriorGC
      • threads

        protected int threads
      • duration

        protected int duration
      • action

        protected boolean action
      • HELP

        static final java.lang.String HELP
        These are to be used in Options.
        See Also:
        Constant Field Values
      • OPTIONS

        static final org.apache.commons.cli.Options OPTIONS
    • Constructor Detail

      • PerfTest

        protected PerfTest()
        Constructor.
    • Method Detail

      • setup

        protected void setup​(java.lang.String[] args)
        Framework method. Default implementation does not parse any extra arguments. Subclasses may override this to parse extra arguments. Subclass implementations should NOT call the base class implementation.
      • getOptions

        org.apache.commons.cli.Options getOptions()
      • run

        protected final void run​(java.lang.String[] args)
                          throws java.lang.Exception
        Subclasses should call this method in their main(). run() will in turn call setup() with any arguments it does not parse. This method parses the command line and runs the tests given on the command line, with the given parameters. See the class description for details.
        Throws:
        java.lang.Exception
      • parseOptions

        private java.util.Set<java.lang.String> parseOptions​(java.lang.String[] args)
                                                      throws PerfTest.UsageException,
                                                             org.apache.commons.cli.ParseException
        Parameters:
        args - command line arguments to parse
        Returns:
        the method list to call
        Throws:
        PerfTest.UsageException - parameters parsed, but semantically incorrect or conflicting
        org.apache.commons.cli.ParseException - parameters cannot be parsed
      • getIteration

        private long getIteration​(java.lang.String methName,
                                  PerfTest.Function fn)
                           throws java.lang.InterruptedException
        Translate '-t time' to iterations (or just return '-i iteration')
        Throws:
        java.lang.InterruptedException
      • performLoops

        private long performLoops​(PerfTest.Function function,
                                  long loops)
                           throws java.lang.InterruptedException
        Throws:
        java.lang.InterruptedException
      • gc

        protected void gc()
        Invoke the runtime's garbage collection procedure repeatedly until the amount of free memory stabilizes to within 10%.
      • readToEOS

        public static char[] readToEOS​(java.io.Reader reader)
      • readToEOS

        public static byte[] readToEOS​(java.io.InputStream stream)
      • readLines

        protected java.lang.String[] readLines​(java.lang.String filename,
                                               java.lang.String srcEncoding,
                                               boolean bulkMode)
      • readDataLine

        public java.lang.String readDataLine​(java.io.BufferedReader br)
                                      throws java.lang.Exception
        Throws:
        java.lang.Exception