Add support for printing trace information

This commit is contained in:
drdev
2014-09-25 17:22:23 +00:00
parent 51ed1f758b
commit 74f088bf58
4 changed files with 80 additions and 0 deletions

1
.gitattributes vendored
View File

@@ -16886,6 +16886,7 @@ forge-gui/src/main/html/js/jquery/jquery-1.9.1.min.js -text
forge-gui/src/main/html/js/observable.js -text
forge-gui/src/main/html/js/socket.js -text
forge-gui/src/main/java/forge/FThreads.java -text
forge-gui/src/main/java/forge/FTrace.java -text
forge-gui/src/main/java/forge/GuiBase.java -text
forge-gui/src/main/java/forge/UiCommand.java svneol=native#text/plain
forge-gui/src/main/java/forge/achievement/Achievement.java -text

View File

@@ -222,6 +222,7 @@ public class Forge implements ApplicationListener {
@Override
public void render() {
try {
forge.FTrace.get("Render").start();
ImageCache.allowSingleLoad();
ForgeAnimation.advanceAll();
@@ -253,6 +254,7 @@ public class Forge implements ApplicationListener {
graphics.end();
BugReporter.reportException(ex, GuiBase.getInterface());
}
forge.FTrace.get("Render").end();
}
@Override
@@ -293,6 +295,10 @@ public class Forge implements ApplicationListener {
screens.clear();
graphics.dispose();
SoundSystem.instance.dispose();
try {
ExceptionHandler.unregisterErrorHandling();
}
catch (Exception e) {}
}
//log message to Forge.log file

View File

@@ -0,0 +1,70 @@
package forge;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class FTrace {
private static long appStartTime;
private static Map<String, FTrace> traces = new HashMap<String, FTrace>();
private static SimpleDateFormat guiFormatter = new SimpleDateFormat("hh:mm:ss.SSS");
public static void initialize() {
appStartTime = new Date().getTime();
}
public static FTrace get(String name0) {
FTrace trace = traces.get(name0);
if (trace == null) {
trace = new FTrace(name0);
traces.put(name0, trace);
}
return trace;
}
public static String formatTimestamp(Date timestamp) {
if (GuiBase.getInterface().isGuiThread()) {
return guiFormatter.format(timestamp); //use cache formatter for better performance on GUI thread
}
return new SimpleDateFormat("hh:mm:ss.SSS").format(timestamp);
}
//dump total time of all traces into log file
public static void dump() {
long appTotalTime = new Date().getTime() - appStartTime;
NumberFormat percent = NumberFormat.getPercentInstance();
System.out.println();
System.out.println("Forge total time - " + appTotalTime + "ms");
for (FTrace trace : traces.values()) {
System.out.println(trace.name + " total time - " + trace.totalTime + "ms (" + percent.format((double)trace.totalTime / (double)appTotalTime) + ")");
}
traces.clear();
}
private final String name;
private long startTime;
private long totalTime;
private FTrace(String name0) {
name = name0;
}
public void start() {
Date now = new Date();
startTime = now.getTime();
System.out.println(name + " start - " + formatTimestamp(now));
}
public void end() {
if (startTime == 0) { return; }
Date now = new Date();
long elapsed = now.getTime() - startTime;
startTime = 0;
totalTime += elapsed;
System.out.println(name + " end - " + formatTimestamp(now) + " (" + elapsed + "ms)");
}
}

View File

@@ -28,6 +28,7 @@ import java.lang.Thread.UncaughtExceptionHandler;
import com.esotericsoftware.minlog.Log;
import forge.FTrace;
import forge.interfaces.IGuiBase;
import forge.properties.ForgeConstants;
import forge.util.MultiplexOutputStream;
@@ -90,6 +91,7 @@ public class ExceptionHandler implements UncaughtExceptionHandler {
System.setErr(new PrintStream(new MultiplexOutputStream(System.err, logFileStream), true));
Log.debug("Error handling registered!");
FTrace.initialize();
}
/**
@@ -97,6 +99,7 @@ public class ExceptionHandler implements UncaughtExceptionHandler {
* stream and resets the system output streams.
*/
public static void unregisterErrorHandling() throws IOException {
FTrace.dump(); //dump trace before unregistering error handling
System.setOut(oldSystemOut);
System.setErr(oldSystemErr);
logFileStream.close();