/******************************************************************************* * Copyright (c) 2002 - 2006 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.client; import com.ibm.wala.util.perf.StopwatchGC; /** * An object to track performance of an analysis engine */ public abstract class AbstractEngineStopwatch implements EngineStopwatch { /** * @return the number of distinct categories timed by this object */ protected abstract int getNumberOfCategories(); /** * @return an array of Strings that represent names of the categories tracked */ protected abstract String[] getCategoryNames(); protected final StopwatchGC[] stopwatch; protected AbstractEngineStopwatch() { stopwatch = new StopwatchGC[getNumberOfCategories()]; for (int i = 0; i < getNumberOfCategories(); i++) { stopwatch[i] = new StopwatchGC(getCategoryNames()[i]); } } @Override public final String report() { StringBuffer result = new StringBuffer(); long total = 0; for (int i = 0; i < getNumberOfCategories(); i++) { total += stopwatch[i].getElapsedMillis(); result.append(getCategoryNames()[i] + ": " + stopwatch[i].getElapsedMillis() + "\n"); } result.append("Total : " + total + "\n"); return result.toString(); } /** * */ @Override public void start(byte category) { stopwatch[category].start(); } /** * */ @Override public void stop(byte category) { stopwatch[category].stop(); } @Override public StopwatchGC getTimer(byte category) { return stopwatch[category]; } }