profiler.java

来自「JGRoups源码」· Java 代码 · 共 154 行

JAVA
154
字号
// $Id: Profiler.java,v 1.6 2005/05/30 16:14:35 belaban Exp $package org.jgroups.debug;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.io.FileOutputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.Hashtable;/** * Allows to time execution of 'named' statements, counts number of times called and total * execution time. * * @author Bela Ban */public class Profiler {    static public class Entry {        long num_calls=0;        long tot_time=0;        double avg=0.0;        long start_time=0;        long stop_time=0;        synchronized void compute() {            num_calls++;            tot_time+=stop_time - start_time;            avg=(double)tot_time / num_calls;        }    }    private static OutputStream os=null;    private static final Hashtable entries=new Hashtable();    private static Log log=LogFactory.getLog(Profiler.class);    public Profiler() {        try {            os=new FileOutputStream("profiler.dat");        }        catch(Exception e) {            log.error(e);        }    }    public static void setFilename(String filename) {        try {            if(os != null) {                os.close();            }            os=new FileOutputStream(filename);        }        catch(Exception e) {            log.error(e);        }    }    public static void start(String call_name) {        Entry e=(Entry)entries.get(call_name);        if(e == null) {            e=new Entry();            entries.put(call_name, e);        }        e.start_time=System.currentTimeMillis();    }    public static void stop(String call_name) {        Entry e=(Entry)entries.get(call_name);        if(e == null) {            log.error("Profiler.stop(): entry for " + call_name + " not found");            return;        }        e.stop_time=System.currentTimeMillis();        e.compute();    }    public static void dump() { // dump to file        String key;        Entry val;        if(os == null) {            log.error("Profiler.dump(): output file is null");            return;        }        try {            os.write("Key:      Number of calls:    Total time (ms): Average time (ms):\n".getBytes());            os.write("-----------------------------------------------------------------\n\n".getBytes());        }        catch(Exception e) {            log.error(e);        }        for(Enumeration e=entries.keys(); e.hasMoreElements();) {            key=(String)e.nextElement();            val=(Entry)entries.get(key);            try {                os.write((key + ": " + val.num_calls + ' ' +                          val.tot_time + ' ' + trim(val.avg) + '\n').getBytes());            }            catch(Exception ex) {                log.error(ex);            }        }    }    public static double trim(double inp) {        double retval=0.0, rem=0.0;        long l1, l2;        l1=(long)inp;        rem=inp - l1;        rem=rem * 100.0;        l2=(long)rem;        rem=l2 / 100.0;        retval=l1 + rem;        return retval;    }    public static void main(String[] args) {        Profiler.setFilename("bela.out");        try {            Profiler.start("time1");            Thread.sleep(1500);            Profiler.stop("time1");            Profiler.start("time1");            Thread.sleep(1500);            Profiler.start("time2");            Thread.sleep(500);            Profiler.stop("time2");            Thread.sleep(1500);            Profiler.stop("time1");            Profiler.dump();        }        catch(Exception e) {            log.error(e);        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?