groovy.lang

## Class BenchmarkInterceptor

- java.lang.Object
- - groovy.lang.BenchmarkInterceptor

- All Implemented Interfaces:
    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]]

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Map` | `calls`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `BenchmarkInterceptor()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Object` | `afterInvoke(Object object, String methodName, Object[] arguments, Object result)` This code is executed after the method is optionally called.
    `Object` | `beforeInvoke(Object object, String methodName, Object[] arguments)` This code is executed before the method is optionally called.
    `boolean` | `doInvoke()`
    `Map` | `getCalls()` Returns the raw data associated with the current benchmark run.
    `void` | `reset()` Resets all the benchmark data on this object.
    `List` | `statistic()` Returns benchmark statistics as a List<Object[]>.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### calls

          protected Map calls

  - ### Constructor Detail

    - #### BenchmarkInterceptor

          public BenchmarkInterceptor()

  - ### Method Detail

    - #### getCalls

          public Map getCalls()

      Returns the raw data associated with the current benchmark run.

    - #### reset

          public void reset()

      Resets all the benchmark data on this object.

    - #### beforeInvoke

          public Object beforeInvoke(Object object,
                            String methodName,
                            Object[] arguments)

      Description copied from interface: `Interceptor`
      This code is executed before the method is optionally called.
      Specified by:
        `beforeInvoke` in interface `Interceptor`
      Parameters:
        `object` - receiver object for the method call
        `methodName` - name of the method to call
        `arguments` - arguments to the method call
      Returns:
        any arbitrary result that replaces the result of the original method call only if doInvoke() returns false and afterInvoke() relays this result.

    - #### afterInvoke

          public Object afterInvoke(Object object,
                           String methodName,
                           Object[] arguments,
                           Object result)

      Description copied from interface: `Interceptor`
      This code is executed after the method is optionally called.
      Specified by:
        `afterInvoke` in interface `Interceptor`
      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:
        any arbitrary result that can replace the result of the original method call. Typically, the result parameter is returned.

    - #### doInvoke

          public boolean doInvoke()

      Specified by:
        `doInvoke` in interface `Interceptor`
      Returns:
        whether the target method should be invoked at all.

    - #### statistic

          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]