From 6cebae01fb5756be05afaa1a90336c8ec56b9ceb Mon Sep 17 00:00:00 2001 From: Letitia Li <letitia.li@telecom-paristech.fr> Date: Tue, 4 Jul 2017 15:41:04 +0200 Subject: [PATCH] Mostly complete DIPLODOCUS sim traces --- src/main/java/tmltranslator/TMLModeling.java | 31 ++++ .../JFrameInteractiveSimulation.java | 146 ++++++++++++++++-- .../JSimulationTMLPanel.java | 1 + 3 files changed, 166 insertions(+), 12 deletions(-) diff --git a/src/main/java/tmltranslator/TMLModeling.java b/src/main/java/tmltranslator/TMLModeling.java index 5ace6f4374..7300035a3f 100755 --- a/src/main/java/tmltranslator/TMLModeling.java +++ b/src/main/java/tmltranslator/TMLModeling.java @@ -609,6 +609,37 @@ public class TMLModeling<E> { return null; } + public TMLEvent getEventByShortName(String _name) { + TMLEvent evt; + Iterator<TMLEvent> iterator = events.listIterator(); + + while(iterator.hasNext()) { + evt = iterator.next(); + if (evt.getName().endsWith(_name)) { + return evt; + } + } + + return null; + } + + + public TMLRequest getRequestByShortName(String _name) { + TMLRequest req; + Iterator<TMLRequest> iterator = requests.listIterator(); + + while(iterator.hasNext()) { + req = iterator.next(); + + if (req.getName().endsWith(_name)) { + return req; + } + } + + return null; + } + + public TMLRequest getRequestByName(String _name) { TMLRequest req; Iterator<TMLRequest> iterator = requests.listIterator(); diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java index 2b5ba85c98..a07e5e58a8 100755 --- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java +++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java @@ -236,6 +236,9 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene private Map<String, String> checkTable = new HashMap<String, String>(); private Map<String, List<String>> transTimes = new HashMap<String, List<String>>(); private Vector<SimulationLatency> latencies = new Vector<SimulationLatency>(); + private HashMap<String, List<String>> msgTimes = new HashMap<String, List<String>>(); + + PipedOutputStream pos; PipedInputStream pis; private JFrameTMLSimulationPanel tmlSimPanel; @@ -1382,8 +1385,8 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene } public void resetSimTrace(){ + channelIDMap.clear(); simtraces.clear(); - writeSimTrace(); } public void writeSimTrace(){ @@ -1393,10 +1396,16 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene pis = new PipedInputStream(pos, 4096); tmlSimPanel.setFileReference(new BufferedReader(new InputStreamReader(pis))); bw = new BufferedWriter(new OutputStreamWriter(pos)); + /* for (HwNode node: tmap.getTMLArchitecture().getHwNodes()) { + simtraces.add("time=0 block="+ node.getName()+" type=state_entering state=start"); + simIndex++; + }*/ for (TMLTask task : tmap.getTMLModeling().getTasks()){ simtraces.add("time=0 block="+ task.getName()+" type=state_entering state=startState"); simIndex++; } + + //Sort simtraces by end time Collections.sort(simtraces, new Comparator<String>() { @Override @@ -1422,29 +1431,109 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene System.out.println("Could not write sim trace " + e + " " + simtraces + " " +simIndex); } } - protected void addTransactionToNode(SimulationTransaction tran){ - //System.out.println("Command " + tran.command + public void writeArchitectureSimTrace(){ + } + + public void processDeviceTraces(SimulationTransaction tran){ String command = tran.command; if (command.contains(" ")){ command = command.split(" ")[0]; } try { - if (command.equals("Write") || command.equals("Read")){ + if ((command.equals("Write") || command.equals("Read"))){ TMLChannel chan = tmap.getTMLModeling().getChannelByShortName(tran.channelName); if (chan!=null){ TMLTask originTask = chan.getOriginTask(); TMLTask destTask = chan.getDestinationTask(); if (originTask!=null && destTask!=null){ - //JK asynch channels don't work - // if (chan.getType()==TMLChannel.BRBW){ - // String trace="time=" + tran.endTime+ " block="+ originTask.getName() + " blockdestination="+ destTask.getName() +" type=synchro channel="+tran.channelName+" params=\"" +chan.getSize()+"\""; - + String asynchType = (command.equals("Write") ? "send_async" : "receive_async"); + int msgId=chanId; + if (!msgTimes.containsKey(tran.channelName)){ + msgTimes.put(tran.channelName, new ArrayList<String>()); + } + if (!msgTimes.get(tran.channelName).contains(tran.endTime)){ + // int tmp=msgId-1; + + if (command.equals("Write")){ + if (!channelIDMap.containsKey(tran.channelName)){ + channelIDMap.put(tran.channelName, new ArrayList<Integer>()); + } + channelIDMap.get(tran.channelName).add(msgId); + chanId++; + } + else { + if (channelIDMap.containsKey(tran.channelName) && channelIDMap.get(tran.channelName).size()>0){ + msgId=channelIDMap.get(tran.channelName).remove(0); + } + + } + String trace=""; + if (command.equals("Write")){ + if (tran.nodeType.equals("0")){ + trace = "time=" + tran.endTime+ " block="+ tran.deviceName.replaceAll("_0","") + " type="+asynchType+ " blockdestination="+ tmap.getHwNodeOf(destTask).getName() + " channel="+tran.channelName+" msgid="+ msgId + " params=\"" +chan.getSize()+"\""; + } + } + else { + trace = "time=" + tran.endTime+ " block="+ tran.deviceName.replaceAll("_0","") + " type="+asynchType+ " blockdestination="+ tmap.getHwNodeOf(destTask).getName() + " channel="+tran.channelName+" msgid="+ msgId + " params=\"" +chan.getSize()+"\""; + } + // System.out.println("sending asynch " + trace); + if (!simtraces.contains(trace)){ + simtraces.add(trace); + if (!msgTimes.containsKey(tran.channelName)){ + msgTimes.put(tran.channelName, new ArrayList<String>()); + } + msgTimes.get(tran.channelName).add(tran.endTime); + } //} - //else { + } + } + } + } + else if (command.equals("SelectEvent")){ + } + else if (command.equals("Send")){ + } + else if (command.equals("Wait")){ + } + else if (command.equals("Request")){ + + } + else if (command.equals("Notified")){ + } + else if (command.contains("Execi")){ + String trace="time="+tran.endTime+ " block=" + tran.deviceName.replaceAll("_0","") + " type=state_entering state=exec" + tran.length; + if (!simtraces.contains(trace)){ + simtraces.add(trace); + } + } + else { + System.out.println("UNHANDLED COMMAND " + tran.command); + } + } catch (Exception e){ + System.out.println("Exception " + e); + } + } + protected void addTransactionToNode(SimulationTransaction tran){ + //System.out.println("Command " + tran.command + " " + tran.deviceName); + String command = tran.command; + if (command.contains(" ")){ + command = command.split(" ")[0]; + } + try { + if ((command.equals("Write") || command.equals("Read")) && tran.deviceName.contains("CPU")){ + TMLChannel chan = tmap.getTMLModeling().getChannelByShortName(tran.channelName); + if (chan!=null){ + TMLTask originTask = chan.getOriginTask(); + TMLTask destTask = chan.getDestinationTask(); + if (originTask!=null && destTask!=null){ String asynchType = (command.equals("Write") ? "send_async" : "receive_async"); int msgId=chanId; - int tmp=msgId-1; - if (!simtraces.contains("time=" + tran.endTime+ " block="+ originTask.getName() + " type="+asynchType+ " blockdestination="+ destTask.getName() + " channel="+tran.channelName+" msgid="+ tmp+ " params=\"" +chan.getSize()+"\"")){ + if (!msgTimes.containsKey(tran.channelName)){ + msgTimes.put(tran.channelName, new ArrayList<String>()); + } + if (!msgTimes.get(tran.channelName).contains(tran.endTime)){ + // int tmp=msgId-1; + if (command.equals("Write")){ if (!channelIDMap.containsKey(tran.channelName)){ channelIDMap.put(tran.channelName, new ArrayList<Integer>()); @@ -1468,6 +1557,10 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene // System.out.println("sending asynch " + trace); if (!simtraces.contains(trace)){ simtraces.add(trace); + if (!msgTimes.containsKey(tran.channelName)){ + msgTimes.put(tran.channelName, new ArrayList<String>()); + } + msgTimes.get(tran.channelName).add(tran.endTime); } //} } @@ -1475,14 +1568,42 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene } } else if (command.equals("SelectEvent")){ + String trace="time="+tran.endTime+ " block=" + tran.taskName + " type=state_entering state=SelectEvent"; + if (!simtraces.contains(trace)){ + simtraces.add(trace); + } } else if (command.equals("Send")){ + TMLEvent evt = tmap.getTMLModeling().getEventByShortName(tran.channelName); + if (evt!=null){ + TMLTask originTask = evt.getOriginTask(); + TMLTask destTask = evt.getDestinationTask(); + if (originTask!=null && destTask!=null){ + String trace = "time=" + tran.endTime+ " block="+ originTask.getName() + " type=synchro blockdestination="+ destTask.getName() + " channel="+tran.channelName+ " params=\""; + if (!simtraces.contains(trace)){ + simtraces.add(trace); + } + } + } } else if (command.equals("Wait")){ + // } else if (command.equals("Request")){ + TMLRequest req = tmap.getTMLModeling().getRequestByShortName(tran.channelName); + if (req!=null){ +// TMLTask originTask = req.getOriginTask(); + TMLTask destTask = req.getDestinationTask(); + if (destTask!=null){ + String trace = "time=" + tran.endTime+ " block="+ tran.taskName + " type=synchro blockdestination="+ destTask.getName() + " channel="+tran.channelName + " params=\""; + if (!simtraces.contains(trace)){ + simtraces.add(trace); + } + } + } } else if (command.equals("Notified")){ + // } else if (command.contains("Execi")){ String trace="time="+tran.endTime+ " block=" + tran.taskName + " type=state_entering state=exec" + tran.length; @@ -1491,7 +1612,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene } } else { - System.out.println("UNHANDLED COMMAND " + tran.command); + TraceManager.addDev("UNHANDLED COMMAND " + tran.command + " " + tran.deviceName + " " + tran.nodeType); } //System.out.println("Simulation command " + tran.command + " " + tran.channelName + " " + tran.length); @@ -2932,6 +3053,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene mgui.resetLoadID(); mgui.resetTransactions(); mgui.resetStatus(); + resetSimTrace(); sendCommand("reset"); transTimes=new HashMap<String, List<String>>(); processLatency(); diff --git a/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java b/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java index 5776722489..04143c9347 100644 --- a/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java +++ b/src/main/java/ui/interactivesimulation/JSimulationTMLPanel.java @@ -1012,6 +1012,7 @@ public class JSimulationTMLPanel extends JPanel implements MouseMotionListener, } private void addGenericTransaction(String trans) { + // System.out.println("trans " + trans); int index0; String tmp, tmp1, tmp2; long value; -- GitLab