Package: groovy.lang

## [Java] Class BenchmarkInterceptor

- groovy.lang.BenchmarkInterceptor

- All Implemented Interfaces and Traits:
    Interceptor

      public class BenchmarkInterceptor
      extends Object
      implements Interceptor

  Interceptor that registers the timestamp of each method call before and after invocation. The timestamps are stored internally and can be retrieved through the with the

      getCalls()

  and

      statistic()

  API.

  Example usage:

       def proxy = ProxyMetaClass.getInstance(ArrayList.class)
       proxy.interceptor = new BenchmarkInterceptor()
       proxy.use {
           def list = (0..10000).collect{ it }
           4.times { list.size() }
           4000.times { list.set(it, it+1) }
       }
       proxy.interceptor.statistic()

  Which produces the following output:

       [[size, 4, 0], [set, 4000, 21]]

- - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public Object` | `afterInvoke(Object object, String methodName, Object[] arguments, Object result)` This code is executed after the method is called.
    `` | `public Object` | `beforeInvoke(Object object, String methodName, Object[] arguments)` This code is executed before the method is called.
    `` | `public boolean` | `doInvoke()` The call should be invoked separately
    `` | `public Map` | `getCalls()` Returns the raw data associated with the current benchmark run.
    `` | `public void` | `reset()` Resets all the benchmark data on this object.
    `` | `public List` | `statistic()` Returns benchmark statistics as a List<Object[]>.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll`

- - ### Method Detail

    - #### @Override
      public Object afterInvoke(Object object, String methodName, Object[] arguments, Object result)

      This code is executed after the method is called.

      Parameters:
        `object` - receiver object for the called method
        `methodName` - name of the called method
        `arguments` - arguments to the called method
        `result` - result of the executed method call or result of beforeInvoke if method was not called
      Returns:
        result

    - #### @Override
      public Object beforeInvoke(Object object, String methodName, Object[] arguments)

      This code is executed before the method is called.

      Parameters:
        `object` - receiver object for the method call
        `methodName` - name of the method to call
        `arguments` - arguments to the method call
      Returns:
        null relays this result.

    - #### @Override
      public boolean doInvoke()

      The call should be invoked separately

      Returns:
        true

    - #### public Map getCalls()

      Returns the raw data associated with the current benchmark run.

    - #### public void reset()

      Resets all the benchmark data on this object.

    - #### public List statistic()

      Returns benchmark statistics as a List<Object[]>. AccumulateTime is measured in milliseconds and is as accurate as System.currentTimeMillis() allows it to be.

      Returns:
        a list of lines, each item is [methodname, numberOfCalls, accumulatedTime]