alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Groovy example source code file (BenchmarkInterceptor.java)

This example Groovy source code file (BenchmarkInterceptor.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Groovy tags/keywords

benchmarkinterceptor, interceptor, iterator, linkedhashmap, linkedlist, list, list, long, long, map, object, object, string, string, util

The Groovy BenchmarkInterceptor.java source code

/*
 * Copyright 2003-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package groovy.lang;

import java.util.*;

/**
 * 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 <pre>getCalls()
* and <pre>statistic() API.

* * Example usage can be seen here: * <pre> * 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() * </pre> * Which produces the following output: * <pre> * [[size, 4, 0], [set, 4000, 21]] * </pre> */ public class BenchmarkInterceptor implements Interceptor { protected Map calls = new LinkedHashMap(); // keys to list of invocation times and before and after /** * Returns the raw data associated with the current benchmark run. */ public Map getCalls() { return calls; } /** * Resets all the benchmark data on this object. */ public void reset() { calls = new HashMap(); } public Object beforeInvoke(Object object, String methodName, Object[] arguments) { if (!calls.containsKey(methodName)) calls.put(methodName, new LinkedList()); ((List) calls.get(methodName)).add(new Long(System.currentTimeMillis())); return null; } public Object afterInvoke(Object object, String methodName, Object[] arguments, Object result) { ((List) calls.get(methodName)).add(new Long(System.currentTimeMillis())); return result; } public boolean doInvoke() { return true; } /** * Returns benchmark statistics as a List<Object[]>. * AccumulateTime is measured in milliseconds and is as accurate as * System.currentTimeMillis() allows it to be. * @return a list of lines, each item is [methodname, numberOfCalls, accumulatedTime] */ public List statistic() { List result = new LinkedList(); for (Iterator iter = calls.keySet().iterator(); iter.hasNext();) { Object[] line = new Object[3]; result.add(line); line[0] = iter.next(); List times = (List) calls.get(line[0]); line[1] = new Integer(times.size() / 2); int accTime = 0; for (Iterator it = times.iterator(); it.hasNext();) { Long start = (Long) it.next(); Long end = (Long) it.next(); accTime += end.longValue() - start.longValue(); } line[2] = new Long(accTime); } return result; } }

Other Groovy examples (source code examples)

Here is a short list of links related to this Groovy BenchmarkInterceptor.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.