VisClient/org/hfbk/util/StartupProfiler.java

Go to the documentation of this file.
00001 package org.hfbk.util;
00002 
00003 import java.io.FileNotFoundException;
00004 import java.io.PrintStream;
00005 import java.util.Map;
00006 
00007 import org.hfbk.vis.VisClient;
00008 
00009 public class StartupProfiler extends Thread {
00010 
00011         Counter<String> sup = new Counter<String>();
00012 
00013         boolean running=true;
00014         
00015         public StartupProfiler() {
00016                 Runtime.getRuntime().addShutdownHook(new Thread(){
00017                         public void run() {
00018                                 close();
00019                         }
00020                 });
00021                 setName("StartupProfiler");
00022                 setDaemon(true);
00023                 setPriority(Thread.MAX_PRIORITY);
00024                 start();
00025         }
00026         
00027         public void run() {
00028                 try {
00029                         while (running) {                               
00030                                 for (Map.Entry<Thread,StackTraceElement[]> st:  Thread.getAllStackTraces().entrySet()){
00031                                         String trace=st.getKey().getName();
00032                                         for (StackTraceElement ste : st.getValue())
00033                                                 trace+=":"+ste.getClassName()+"."+ste.getMethodName();
00034                                         sup.add(trace);
00035                                 }
00036                                 Thread.sleep(10);
00037                         }
00038                 } catch (Exception e) {
00039                         throw new RuntimeException (e);
00040                 }
00041         }
00042 
00043         void close(){
00044                 running=false;
00045                 try {
00046                         PrintStream ps=new PrintStream("profile.txt");
00047                         
00048                         for (Map.Entry<String, Integer> count: sup.entrySet())
00049                                 ps.printf("%8d %s \n", count.getValue(), count.getKey() );
00050                         
00051                         ps.close();
00052                         System.out.println("Saved Thread Samples.");
00053                 } catch (FileNotFoundException e) {
00054                         throw new RuntimeException (e);
00055                 }
00056         }
00057 
00058         public static void main(String[] args) throws Exception {
00059                 new StartupProfiler();
00060                 VisClient.main(args);
00061                 
00062                  
00063         }
00064 }

Generated on Tue Apr 7 17:57:20 2009 for visclient by  doxygen 1.5.1