Escribir lapso temporal en java

28 07 2010

A veces necesario poder calcular el tiempo de ejecución de una parte del código. Ello puede ser porque estemos perfilando una aplicación o porque simplemente queramos dejar constancia de ello en algún fichero de log o en alguna consola de debugging.

En particular es algo que necesito muy a menudo así que lo tengo encapsulado en el siguiente método estática en una clase de utilidades:

public class Time {
	/**
	 * @param initial Initial time in milliseconds.
	 * @return a message with the shape: "xxx seconds (YYY millis)"
	 */
	public static String getLapseTimeMessage(long initial) {
		TimeUnit secondsUnit = TimeUnit.SECONDS;
		TimeUnit millisUnit = TimeUnit.MILLISECONDS;

		long timeLapse = System.currentTimeMillis() - initial;
		long seconds = secondsUnit.convert(timeLapse, millisUnit);
		long millis = millisUnit.convert(timeLapse, millisUnit);

		return seconds + " seconds (" + millis + " millis)";
	}
	../..
}

Una clase cliente la utilizaría como sigue:

long initial = 0;
if (logger.isDebugEnabled()) {
	initial = System.currentTimeMillis();
}

Parser parser=new ParserFactory().makeParser();
String text=this.programText;
this.program=parser.parse(text);//ParseException, IOException

logger.debug("Javascript parser needed " + Time.getLapseTimeMessage(initial));

Que dejaría una traza como la siguiente:

Javascript parser needed 1 seconds (1542 millis)

Obviamente esta es una aproximación muy básica que puede ser mejorada y más parametrizada, pero para casos sencillos cumple su cometido.

Anuncios