diff --git a/org.ntlab.reverseDebugger/speedResult.csv b/org.ntlab.reverseDebugger/speedResult.csv new file mode 100644 index 0000000..6c3b74b --- /dev/null +++ b/org.ntlab.reverseDebugger/speedResult.csv @@ -0,0 +1,16 @@ +ReverseDebugger,,,TraceCollector,,, +No,Time(nsec),,No,Time(nsec),, +1,59422911,,1,27624371,, +2,37320415,,2,4140222,, +3,40346629,,3,3751780,, +4,28439941,,4,3046742,, +5,28923124,,5,3113061,, +6,35115296,,6,4244437,, +7,28169137,,7,3323073,, +8,32749907,,8,3298597,, +9,26405358,,9,3259122,, +10,25948229,,10,3725726,, +Best,25948229,,Best,3046742,, +Worst,59422911,,Worst,27624371,, +Ave(1~10),34284094,,Ave(1~10),5952713,, +Ave(2~10),31490892,,Ave(2~10),3544751,, \ No newline at end of file diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java index b1178ed..a63c5c4 100644 --- a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java +++ b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/DebuggingControlAction.java @@ -170,12 +170,12 @@ // printObjectFlow(vm, thread, threadInstance); // �X�s�[�h�v���Ɣ�r -// SpeedTester st = new SpeedTester(); -// st.countMethodExecutionTest(vm, thread); + SpeedTester st = new SpeedTester(); + st.countMethodExecutionTest(vm, thread); // �݌v�ύX�ɂ��ꎟ��͗p�̃R�[�h(�^�[�Q�b�g����VM��Ŏ��s����OnlineTraceAnalyzer�N���X�֘A�̃��\�b�h)���Ăяo�����߂̉��R�[�h - OnlineTraceAnalyzerCallTester analyzerCallTester = new OnlineTraceAnalyzerCallTester(); - analyzerCallTester.test1(vm, thread); +// OnlineTraceAnalyzerCallTester analyzerCallTester = new OnlineTraceAnalyzerCallTester(); +// analyzerCallTester.test1(vm, thread); } /** diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/SpeedTester.java b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/SpeedTester.java index 657938f..6de2fbe 100644 --- a/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/SpeedTester.java +++ b/org.ntlab.reverseDebugger/src/org/ntlab/debuggingControl/SpeedTester.java @@ -1,5 +1,13 @@ package org.ntlab.debuggingControl; +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import com.sun.jdi.ClassNotLoadedException; import com.sun.jdi.IncompatibleThreadStateException; import com.sun.jdi.IntegerValue; @@ -29,21 +37,24 @@ // �ꎟ��͂̒T��������, ReverseDebugger���ɍ쐬�����ꍇ�ł̏������Ԍv�� System.out.println(); System.out.println("ReverseDebugger:"); - test(mc, roots, targetSignature, SpeedTestType.REVERSE_DEBUGGER, LOOP); + SpeedResult rdResult = test(mc, roots, targetSignature, SpeedTestType.REVERSE_DEBUGGER, LOOP); // �ꎟ��͂̒T��������, �^�[�Q�b�g�v���O�����ɖ��ߍ���TraceCollector���ɍ쐬�����ꍇ�ł̏������Ԍv�� System.out.println(); System.out.println("TraceCollector:"); - test(mc, roots, targetSignature, SpeedTestType.TRACE_COLLECTOR, LOOP); + SpeedResult tcResult = test(mc, roots, targetSignature, SpeedTestType.TRACE_COLLECTOR, LOOP); + + writeToCSV(rdResult, tcResult); } catch (InvalidTypeException | ClassNotLoadedException | InvocationException | IncompatibleThreadStateException e) { e.printStackTrace(); } } - private void test(MethodCaller mc, ObjectReference roots, String targetSignature, SpeedTestType type, final int LOOP) + private SpeedResult test(MethodCaller mc, ObjectReference roots, String targetSignature, SpeedTestType type, final int LOOP) throws InvalidTypeException, ClassNotLoadedException, InvocationException, IncompatibleThreadStateException { int count = 0; long beforeTime = 0, afterTime = 0, executionTime, sumTime = 0, bestTime = -1, worstTime = -1; + SpeedResult result = new SpeedResult(type); for (int i = 0; i < LOOP; i++) { mc.setObj(roots); switch (type) { @@ -57,17 +68,21 @@ count = countMethodExecutionInTraceCollector(mc, targetSignature, 0, "--------"); afterTime = System.nanoTime(); break; - } + } executionTime = afterTime - beforeTime; System.out.print("count: " + count + " "); System.out.println(String.format("Time%-2d: %10d nsec", (i + 1), executionTime)); sumTime += (executionTime); bestTime = (bestTime < 0 || executionTime < bestTime) ? executionTime : bestTime; worstTime = (worstTime < 0 || executionTime > worstTime) ? executionTime : worstTime; + result.addExecutionTime(executionTime); + result.setBestTime(bestTime); + result.setWorstTime(worstTime); } System.out.println(String.format("%-12s: %10d nsec", "BestTime", bestTime)); System.out.println(String.format("%-12s: %10d nsec", "WorstTime", worstTime)); - System.out.println(String.format("%-12s: %10d nsec", "AverageTime", (sumTime / LOOP))); + System.out.println(String.format("%-12s: %10d nsec", "AverageTime", (sumTime / LOOP))); + return result; } private int countMethodExecutionInTraceCollector(MethodCaller mc, String targetSignture, int count, String indent) @@ -105,7 +120,118 @@ return count; } + private void writeToCSV(SpeedResult... results) { + if (results.length == 0) { + return; + } + String path = "C:\\Users\\student\\git\\org.ntlab.reverseDebugger\\org.ntlab.reverseDebugger\\speedResult.csv"; + try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) { + for (SpeedResult result : results) { + bw.write(result.getSpeedTypeName() + ",,,"); + } + bw.newLine(); + for (int i = 0; i < results.length; i++) { + bw.write("No,Time(nsec),,"); + } + bw.newLine(); + for (int i = 0; i < results[0].getExecutionTimes().size(); i++) { + for (SpeedResult result : results) { + bw.write((i + 1) + "," + result.getExecutionTimes().get(i) + ",,"); + } + bw.newLine(); + } + for (SpeedResult result : results) { + bw.write("Best," + result.getBestTime() + ",,"); + } + bw.newLine(); + for (SpeedResult result : results) { + bw.write("Worst," + result.getWorstTime() + ",,"); + } + bw.newLine(); + for (SpeedResult result : results) { + bw.write("Ave(" + "1~" + result.getExecutionTimeCount() + ")," + result.getAverageTime() + ",,"); + } + bw.newLine(); + for (SpeedResult result : results) { + bw.write("Ave(" + "2~" + result.getExecutionTimeCount() + ")," + result.getAverageTime(1) + ",,"); + } + bw.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + private enum SpeedTestType { - REVERSE_DEBUGGER, TRACE_COLLECTOR; + REVERSE_DEBUGGER, TRACE_COLLECTOR; + + public String getSpeedTypeName() { + switch (this) { + case REVERSE_DEBUGGER: + return "ReverseDebugger"; + case TRACE_COLLECTOR: + return "TraceCollector"; + default: + return ""; + } + } + } + + private static class SpeedResult { + private SpeedTestType type; + private List executionTimes = new ArrayList<>(); + private long bestTime; + private long worstTime; + + public SpeedResult(SpeedTestType type) { + this.type = type; + } + + public String getSpeedTypeName() { + return type.getSpeedTypeName(); + } + + public List getExecutionTimes() { + return executionTimes; + } + + public int getExecutionTimeCount() { + return executionTimes.size(); + } + + public long getBestTime() { + return bestTime; + } + + public long getWorstTime() { + return worstTime; + } + + public long getAverageTime() { + return getAverageTime(0, executionTimes.size() - 1); + } + + public long getAverageTime(int start) { + return getAverageTime(start, executionTimes.size() - 1); + } + + public long getAverageTime(int start, int end) { + long sum = 0; + for (int i = start; i <= end; i++) { + sum += executionTimes.get(i); + } + return sum / (end - start + 1); + } + + public void addExecutionTime(long executionTime) { + executionTimes.add(executionTime); + } + + public void setBestTime(long bestTime) { + this.bestTime = bestTime; + } + + public void setWorstTime(long worstTime) { + this.worstTime = worstTime; + } } } diff --git a/org.ntlab.reverseDebugger/src/org/ntlab/reverseDebugger/ReverseDebuggerLaunchConfiguration.java b/org.ntlab.reverseDebugger/src/org/ntlab/reverseDebugger/ReverseDebuggerLaunchConfiguration.java index 60cd0fe..e11440e 100644 --- a/org.ntlab.reverseDebugger/src/org/ntlab/reverseDebugger/ReverseDebuggerLaunchConfiguration.java +++ b/org.ntlab.reverseDebugger/src/org/ntlab/reverseDebugger/ReverseDebuggerLaunchConfiguration.java @@ -1,6 +1,8 @@ package org.ntlab.reverseDebugger; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import org.eclipse.core.runtime.FileLocator; import org.ntlab.traceCollector.IAdditionalLaunchConfiguration; @@ -11,9 +13,11 @@ @Override public String[] getAdditionalClasspath() { try { + List classPathList = new ArrayList<>(); String tracerClassPath = FileLocator.resolve(this.getClass().getClassLoader().getResource(ANALYZER_PATH)).getPath(); String classPath = tracerClassPath.substring(1, tracerClassPath.length() - ANALYZER_PATH.length()); - return new String[]{classPath}; + classPathList.add(classPath); + return classPathList.toArray(new String[classPathList.size()]); } catch (IOException e) { e.printStackTrace(); }