blob: 7b6db5d7273a0b89b055aa78150b33a418a0d92d [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* 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 com.google.gwt.ant.taskdefs;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.TaskContainer;
import java.util.Vector;
/**
* A timer task for ant, which reports the total time to execute the contained
* tasks. It reports both a millisecond total and hour:minute:second.fraction
* formats.
*/
public class Timer extends Task implements TaskContainer {
private static final int MS_IN_HOUR = 60 * 60 * 1000;
private static final int MS_IN_MINUTE = 60 * 1000;
private static final int MS_IN_SECOND = 1000;
private Vector<Task> nested;
private String name;
public Timer() {
super();
nested = new Vector<Task>();
name = "";
}
public void addTask(Task newtask) {
nested.addElement(newtask);
}
public void execute() throws BuildException {
long start = System.currentTimeMillis();
for (Task task : nested) {
task.perform();
}
long durationMsec = (System.currentTimeMillis() - start);
long duration = durationMsec;
long hrs = duration / MS_IN_HOUR;
duration -= hrs * MS_IN_HOUR;
long min = duration / MS_IN_MINUTE;
duration -= min * MS_IN_MINUTE;
long sec = duration / MS_IN_SECOND;
duration -= sec * MS_IN_SECOND;
long msec = duration;
log("timer " + name + " timed " + durationMsec + " ms. " +
String.format("(%02d:%02d:%02d.%03d)", hrs, min, sec, msec));
}
public void setName(String newname) {
name = newname;
}
}