/*
* JBoss, Home of Professional Open Source
* Copyright 2010-2016, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.tests.metamer.ftest.webdriver.utils;
import org.openqa.selenium.interactions.Action;
/**
* Simple utility for measuring time spent in some action.
*
* @author <a href="mailto:jstefek@redhat.com">Jiri Stefek</a>
*/
public final class StopWatch {
final long timeSpentInNanos;
private StopWatch(long timeSpentInNanos) {
this.timeSpentInNanos = timeSpentInNanos;
}
public TimeSpent inMillis() {
return new TimeSpent(Math.round(timeSpentInNanos / 1000000.0));
}
public TimeSpent inNanos() {
return new TimeSpent(timeSpentInNanos);
}
public TimeSpent inSeconds() {
return new TimeSpent(Math.round(timeSpentInNanos / 1000000000.0));
}
public static StopWatch watchTimeSpentInAction(Action a) {
long time = System.nanoTime();
a.perform();
return new StopWatch(System.nanoTime() - time);
}
public static class TimeSpent extends Number {
private static final long serialVersionUID = 1L;
private final long value;
private TimeSpent(long value) {
this.value = value;
}
@Override
public int intValue() {
return (int) value;
}
@Override
public long longValue() {
return (long) value;
}
@Override
public float floatValue() {
return (float) value;
}
@Override
public double doubleValue() {
return (double) value;
}
@Override
public String toString() {
return Long.valueOf(value).toString();
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj instanceof Number) {
Number other = (Number) obj;
return value == other.longValue();
}
return false;
}
@Override
public int hashCode() {
return Long.valueOf(value).hashCode();
}
}
}