001package org.hl7.fhir.utilities; 002 003import java.io.BufferedWriter; 004import java.io.File; 005import java.io.FileNotFoundException; 006import java.io.FileOutputStream; 007import java.io.IOException; 008import java.io.OutputStreamWriter; 009 010public class SimpleTimeTracker { 011 012 private long start; 013 private String name; 014 private String context; 015 private int count; 016 017 public static int level = 0; 018 public static BufferedWriter bw; 019 020 public SimpleTimeTracker(String name) { 021 level++; 022 this.name = name; 023 count = -1; 024 start = System.currentTimeMillis(); 025 init(); 026 log(name); 027 } 028 029 public SimpleTimeTracker(String name, String context) { 030 level++; 031 this.name = name; 032 this.context = context; 033 start = System.currentTimeMillis(); 034 count = -1; 035 init(); 036 log(name+" ["+context+"]"); 037 } 038 039 private void init() { 040 if (bw == null) { 041 try { 042 File fout = new File("/Users/grahamegrieve/temp/time.txt"); 043 FileOutputStream fos = new FileOutputStream(fout); 044 bw = new BufferedWriter(new OutputStreamWriter(fos)); 045 } catch (Exception e) { 046 e.printStackTrace(); 047 } 048 049 } 050 051 } 052 053 public void report() { 054 String s = count == -1 ? "" : " ("+count+")"; 055 if (context == null) { 056 s = name+": "+(System.currentTimeMillis()-start)+"ms "+s; 057 } else { 058 s = name+": "+(System.currentTimeMillis()-start)+"ms "+s+" ["+context+"]"; 059 } 060 log(s); 061 level--; 062 if (level == 0) { 063 try { 064 bw.close(); 065 } catch (Exception e) { 066 e.printStackTrace(); 067 } 068 } 069 } 070 071 private void log(String s) { 072 System.out.println(Utilities.padLeft("", '#', level)+" "+s); 073 try { 074 bw.write(s); 075 bw.newLine(); 076 } catch (Exception e) { 077 System.out.println("e: " +e.getMessage()); 078 } 079 } 080 081 public void count() { 082 if (count == -1) { 083 count = 1; 084 } else { 085 count++; 086 } 087 088 } 089 090}