Class BenchmarkUtils


  • public final class BenchmarkUtils
    extends java.lang.Object
    Utility class for performance profiling; mainly for measuring execution times. All long temporal values are assumed to be nanoseconds if not otherwise specified. Similarly, all long memory values are assumed to be in bytes if not otherwise specified.
    Since:
    1.6
    Author:
    Sina Madani
    • Field Detail

      • GC_PROFILE_STAGE

        public static final java.lang.String GC_PROFILE_STAGE
        See Also:
        Constant Field Values
      • DEFAULT_TIME_UNITS

        public static final java.time.temporal.TemporalUnit DEFAULT_TIME_UNITS
    • Method Detail

      • formatDuration

        public static java.lang.String formatDuration​(java.time.Duration duration)
        NOTE: Only durations less than 24 hours are supported.
      • getTotalExecutionTimeFrom

        public static java.time.Duration getTotalExecutionTimeFrom​(java.util.Collection<ProfileDiagnostic> profiledStages)
        Sums the execution times of the execution stages.
        Parameters:
        profiledStages - The profiled stages.
        Returns:
        The total duration of ProfileDiagnostic.executionTime for the given profiled stages.
      • getTotalMemoryUsage

        public static long getTotalMemoryUsage()
        Returns:
        The sum of peak memory usage for all memory pools.
      • getCurrentMemoryUsage

        public static long getCurrentMemoryUsage()
      • getTime

        public static java.lang.String getTime()
        Returns:
        The current time as a String.
      • getCpuName

        public static java.lang.String getCpuName()
        Convenience method for getting the CPU model.
        Returns:
        The CPU model as reported by the operating system.
        Since:
        1.6
      • getNumberOfHardwareThreads

        public static int getNumberOfHardwareThreads()
        Delegates to Runtime.availableProcessors().
        Returns:
        The number of logical cores available to the JVM.
      • getProfileStageByName

        public static ProfileDiagnostic getProfileStageByName​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                              java.lang.String stageName)
        Finds the stage for the given name.
        Parameters:
        profileInfo - The profiled stages.
        stageName - The stage name.
        Returns:
        The prifle stage, or null if there wasn't one.
      • removeGCTimeFromStage

        public static ProfileDiagnostic removeGCTimeFromStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                              java.lang.String stageName)
        Performs a Runtime.gc(), takes into account the time taken to do so and subtracts it from the given stage, identified by its name.
        Parameters:
        profileInfo - The profiled stages.
        stageName - The stage identifier to subtract garbage collection time from.
        Returns:
        The updated stage, for convenience.
      • measureAndAddGCTime

        public static long measureAndAddGCTime​(java.util.Collection<ProfileDiagnostic> profileInfo)
        Calls Runtime.gc(), measuring the time and accumulating it in the provided profiled stages using the GC_PROFILE_STAGE key.
        Parameters:
        profileInfo - The profiled stages to update.
        Returns:
        The time taken to perform the GC invocation.
      • profileExecutionStage

        public static <T,​R,​E extends java.lang.Exception> R profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                                                              java.lang.String description,
                                                                                              CheckedFunction<T,​R,​E> code,
                                                                                              T argument)
                                                                                       throws E extends java.lang.Exception
        Creates a new ProfileDiagnostic and adds it to the collection of profiled stages, measuring execution time and memory consumption.
        Parameters:
        profileInfo - The execution stages to write to.
        description - The name of the execution stage.
        code - The transformation to profile.
        argument - The argument to the transformation code.
        Returns:
        The result of the transformation code.
        Throws:
        E - Any exception thrown from the transformation code.
        E extends java.lang.Exception
      • profileExecutionStage

        public static <T,​E extends java.lang.Exception> void profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                                                         java.lang.String description,
                                                                                         CheckedConsumer<T,​E> code,
                                                                                         T argument)
                                                                                  throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • profileExecutionStage

        public static <R,​E extends java.lang.Exception> R profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                                                      java.lang.String description,
                                                                                      CheckedSupplier<R,​E> code)
                                                                               throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • profileExecutionStage

        public static <E extends java.lang.Exception> void profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                                                 java.lang.String description,
                                                                                 CheckedRunnable<E> code)
                                                                          throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • profileExecutionStage

        public static <T,​R> R profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                          java.lang.String description,
                                                          java.util.function.Function<T,​R> code,
                                                          T argument)
      • profileExecutionStage

        public static <T> void profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                     java.lang.String description,
                                                     java.util.function.Consumer<T> code,
                                                     T argument)
      • profileExecutionStage

        public static <R> R profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                  java.lang.String description,
                                                  java.util.function.Supplier<R> code)
      • profileExecutionStage

        public static void profileExecutionStage​(java.util.Collection<ProfileDiagnostic> profileInfo,
                                                 java.lang.String description,
                                                 java.lang.Runnable code)
      • measureTimeNanos

        public static <T,​E extends java.lang.Exception> long measureTimeNanos​(CheckedConsumer<T,​E> code,
                                                                                    T argument)
                                                                             throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • measureTimeNanos

        public static <E extends java.lang.Exception> long measureTimeNanos​(CheckedRunnable<E> code)
                                                                     throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • measureTimeNanos

        public static long measureTimeNanos​(java.lang.Runnable code)
      • measureTimeNanos

        public static <T> long measureTimeNanos​(java.util.function.Consumer<T> code,
                                                T argument)
      • measureTimeMillis

        public static <T,​E extends java.lang.Exception> long measureTimeMillis​(CheckedConsumer<T,​E> code,
                                                                                     T argument)
                                                                              throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • measureTimeMillis

        public static <E extends java.lang.Exception> long measureTimeMillis​(CheckedRunnable<E> code)
                                                                      throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • measureTimeMillis

        public static long measureTimeMillis​(java.lang.Runnable code)
      • measureTimeMillis

        public static <T> long measureTimeMillis​(java.util.function.Consumer<T> code,
                                                 T argument)
      • printExecutionTime

        public static void printExecutionTime​(java.lang.String stageTag,
                                              java.lang.Runnable code)
      • printExecutionTime

        public static <E extends java.lang.Exception> void printExecutionTime​(java.lang.String stageTag,
                                                                              CheckedRunnable<E> code)
                                                                       throws E extends java.lang.Exception
        Throws:
        E extends java.lang.Exception
      • addProfileInfo

        public static void addProfileInfo​(java.util.Collection<ProfileDiagnostic> profileStages,
                                          java.lang.String stage,
                                          long nanos,
                                          long memory)
      • formatExecutionStages

        public static java.lang.String formatExecutionStages​(java.lang.Iterable<ProfileDiagnostic> profileInfo)
      • formatExecutionTimes

        public static java.lang.String formatExecutionTimes​(java.lang.Iterable<ProfileDiagnostic> profileInfo)
      • formatExecutionTime

        public static java.lang.String formatExecutionTime​(java.time.Duration time)
      • formatExecutionTime

        public static java.lang.String formatExecutionTime​(java.lang.String title,
                                                           java.time.Duration time)
      • formatExecutionTime

        public static java.lang.String formatExecutionTime​(long nanos)
      • formatExecutionTime

        public static java.lang.String formatExecutionTime​(java.lang.String title,
                                                           long nanos)
      • formatMillis

        public static java.lang.String formatMillis​(long millis)
      • formatNanos

        public static java.lang.String formatNanos​(long nanos)
      • nanosToMillis

        public static long nanosToMillis​(long nanos)