Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Few changes #4

Merged
merged 7 commits into from
Jun 15, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions src/main/java/org/spideruci/analysis/trace/MethodTraceDirReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package org.spideruci.analysis.trace;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.spideruci.analysis.trace.io.TraceReader;
import org.spideruci.cerebro.layout.model.DynamicFlowGraph;
import org.spideruci.cerebro.layout.model.FlowIdent;
import org.spideruci.cerebro.layout.model.SourceLineNode;

public class MethodTraceDirReader extends TraceDirReader {
private static HashMap<String, Map<String, SourceLineNode>> methodMap = new HashMap<>();

public MethodTraceDirReader() {
// TODO Auto-generated constructor stub
}

public static DynamicFlowGraph scanTraceFiles(File[] files, final String path)
throws IOException {
if(path == null) {
throw new RuntimeException("path is null ... fuck it!");
}

DynamicFlowGraph dynamicFlowGraph = new DynamicFlowGraph();
for(File f : files) {
if(f == null || !f.isFile() || !f.getName().endsWith(".trc")) {
continue;
}

String name = f.getName();
System.out.println("Scanning " + name);
PrintStream jsonTraceStream = new PrintStream(path + name + ".json");
jsonTraceStream.println("[");

TraceReader traceReader = new TraceReader(f);
HashMap<String, SourceLineNode> threadedPrevious = new HashMap<>();
int count = 0;
String prevMethod = "";
String prevClass = "";

while(true) {
TraceEvent event = traceReader.readNextExecutedEvent();
if(event == null) {
break;
}

if(event.getExecInsnType() != EventType.$line$) {
continue;
}

String ownerClass = traceReader.getExecutedEventOwnerClass(event);
String ownerMethod = traceReader.getExecutedEventOwnerMethod(event);
int lineNumber = traceReader.getExecutedEventSourceLine(event);
String threadId = event.getExecThreadId();

SourceLineNode node = new SourceLineNode(ownerClass, ownerMethod, lineNumber);

if(!ownerMethod.equals(prevMethod) && !ownerClass.equals(prevClass)){
if(!methodMap.containsKey(node.methodName())){
node = dynamicFlowGraph.addNode(node);
Map<String, SourceLineNode> temp = new HashMap<>();
temp.put(node.className(), node);
methodMap.put(node.methodName(), temp);
}
else{
if(methodMap.get(node.methodName()).get(node.className()) != null)
node = methodMap.get(node.methodName()).get(node.className());
else{
node = dynamicFlowGraph.addNode(node);
methodMap.get(node.methodName()).put(node.className(), node);
}
}


spitJsonTrace(jsonTraceStream, node.id());
count += 1;
SourceLineNode previous = threadedPrevious.get(threadId);
if(previous != null) {
dynamicFlowGraph.addEdge(previous, node);
}

threadedPrevious.put(threadId, node);
}
prevMethod = ownerMethod;
prevClass = ownerClass;
}

jsonTraceStream.println("0]");
FlowIdent ident = new FlowIdent(name, count);
dynamicFlowGraph.addFlows(ident);
}

return dynamicFlowGraph;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public static DynamicFlowGraph scanTraceFiles(File[] files, final String path)

node = dynamicFlowGraph.addNode(node);

spitJsonTrace(jsonTraceStream, node.id);
spitJsonTrace(jsonTraceStream, node.id());
count += 1;
SourceLineNode previous = threadedPrevious.get(threadId);
if(previous != null) {
Expand All @@ -102,7 +102,7 @@ public static DynamicFlowGraph scanTraceFiles(File[] files, final String path)
return dynamicFlowGraph;
}

private static void spitJsonTrace(PrintStream out, int nodeId) {
protected static void spitJsonTrace(PrintStream out, int nodeId) {
out.print(nodeId + ",\n");
}

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/org/spideruci/cerebro/Cerebro.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import java.io.IOException;

import org.graphstream.ui.layout.springbox.BarnesHutLayout;

import org.spideruci.analysis.trace.MethodTraceDirReader;
import org.spideruci.analysis.trace.TraceDirReader;
import org.spideruci.cerebro.community.JungCommunityComputer;
import org.spideruci.cerebro.layout.model.DynamicFlowGraph;
Expand Down Expand Up @@ -67,6 +67,7 @@ public static DynamicFlowGraph getDynamicFlowGraph(String[] args) throws IOExcep
String tracePath = args[0];
File[] files = TraceDirReader.getFiles(args[0]);
dynamicFlowGraph = TraceDirReader.scanTraceFiles(files, tracePath);
// dynamicFlowGraph = MethodTraceDirReader.scanTraceFiles(files, tracePath);
}

return dynamicFlowGraph;
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/org/spideruci/cerebro/layout/Commands.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public enum Commands {
COLOR_BY_METHOD,
COLOR_BY_CLASS,
REMOVE_COLOR,
FIND_START_NODE,
DONE,
HELP;

Expand Down Expand Up @@ -80,6 +81,9 @@ public static boolean handleInput(DynamicDisplay display,
case COLOR_BY_CLASS:
display.colorNodesByClass();
break;
case FIND_START_NODE:
display.setStartNode();
break;
case HELP:
System.out.println(Commands.mainMenu);
break;
Expand Down
Loading