code: /*
   *This file is part of AdmissibleFPG.
   *
   * Copyright (C) 2014 William Pettersson <william@ewpettersson.se>
   *
   *    AdmissibleFPG is free software: you can redistribute it and/or modify
   *    it under the terms of the GNU General Public License as published by
   *    the Free Software Foundation, either version 3 of the License, or
   *    (at your option) any later version.
   *
   *    AdmissibleFPG 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 General Public License for more details.
   *
   *    You should have received a copy of the GNU General Public License
   *    along with AdmissibleFPG.  If not, see <http://www.gnu.org/licenses/>.
   */
  package se.ewpettersson.admissiblefpg.util;
  
  import java.lang.management.ManagementFactory;
  import java.lang.management.ThreadMXBean;
  
  public class Timer {
  	/** Get CPU time in nanoseconds. */
  	long start,time;
  	
  	public Timer() {
  		start=getCpuTime();
  	}
  	
  	
  	
  	public long getCpuTime( ) {
  	    ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
  	    return bean.isCurrentThreadCpuTimeSupported( ) ?
  	        bean.getCurrentThreadCpuTime( ) : 0L;
  	}
  	
  	/** Get user time in nanoseconds. */
  	public long getUserTime( ) {
  	    ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
  	    return bean.isCurrentThreadCpuTimeSupported( ) ?
  	        bean.getCurrentThreadUserTime( ) : 0L;
  	}
  
  	/** Get system time in nanoseconds. */
  	public long getSystemTime( ) {
  	    ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
  	    return bean.isCurrentThreadCpuTimeSupported( ) ?
  	        (bean.getCurrentThreadCpuTime( ) - bean.getCurrentThreadUserTime( )) : 0L;
  	}
  
  
  
  	public void start() {
  		start = getCpuTime();
  	}
  
  
  
  	public void stop() {
  		time = getCpuTime() - start;
  	}
  
  
  
  	public long getTime() {
  		return time/1000000; // ms not ns
  	}
  
  
  
  	public void reset() {
  		start = getCpuTime();
  		
  	}
  	
  }
  