From 6574d9a5c6311b14936c9e2e648f189cd2699bd6 Mon Sep 17 00:00:00 2001
From: maysam zoor <maysam_zoor@hotmail.com>
Date: Thu, 25 Feb 2021 09:44:30 +0100
Subject: [PATCH] add new group of traces

---
 .../simulation/DependencyGraphTranslator.java | 44 ++++++++++++++++++-
 .../tmltranslator/simulation/PlanArrays.java  | 43 ++++++++++++++++++
 .../JFrameLatencyComparedDetailedPopup.java   |  2 +-
 .../JFrameLatencyDetailedAnalysis.java        |  1 +
 .../JFrameLatencyDetailedPopup.java           |  2 +-
 .../LatencyAnalysisParallelAlgorithms.java    |  7 ++-
 .../TableRenderer.java                        |  8 +++-
 7 files changed, 102 insertions(+), 5 deletions(-)

diff --git a/src/main/java/tmltranslator/simulation/DependencyGraphTranslator.java b/src/main/java/tmltranslator/simulation/DependencyGraphTranslator.java
index d8730bbbb9..08b2806520 100644
--- a/src/main/java/tmltranslator/simulation/DependencyGraphTranslator.java
+++ b/src/main/java/tmltranslator/simulation/DependencyGraphTranslator.java
@@ -153,6 +153,7 @@ public class DependencyGraphTranslator extends SwingWorker {
     private Object[][] dataByTask = null;
     private Object[][] dataByTaskMinMax = null;
     private HashMap<Integer, Vector<SimulationTransaction>> dataByTaskR = new HashMap<Integer, Vector<SimulationTransaction>>();
+    private HashMap<Integer, Vector<SimulationTransaction>> mandatoryOptionalSimT = new HashMap<Integer, Vector<SimulationTransaction>>();
     private HashMap<Integer, List<SimulationTransaction>> dataBydelayedTasks = new HashMap<Integer, List<SimulationTransaction>>();
     private HashMap<Integer, HashMap<String, ArrayList<ArrayList<Integer>>>> timeDelayedPerRow = new HashMap<Integer, HashMap<String, ArrayList<ArrayList<Integer>>>>();
     private HashMap<Integer, HashMap<String, ArrayList<ArrayList<Integer>>>> timeDelayedPerRowMinMax = new HashMap<Integer, HashMap<String, ArrayList<ArrayList<Integer>>>>();
@@ -168,6 +169,7 @@ public class DependencyGraphTranslator extends SwingWorker {
     private ArrayList<String> devicesToBeConsidered = new ArrayList<String>();
     private Vector<SimulationTransaction> relatedsimTraces = new Vector<SimulationTransaction>();
     private Vector<SimulationTransaction> delayDueTosimTraces = new Vector<SimulationTransaction>();
+    private Vector<SimulationTransaction> mandatoryOptional = new Vector<SimulationTransaction>();
     private HashMap<String, ArrayList<SimulationTransaction>> relatedsimTraceswithTaint = new HashMap<String, ArrayList<SimulationTransaction>>();
     private int nbOfNodes = 0;
     private List<String> usedLabels = new ArrayList<String>();
@@ -2063,6 +2065,7 @@ public class DependencyGraphTranslator extends SwingWorker {
             dataBydelayedTasks = new HashMap<Integer, List<SimulationTransaction>>();
             dataByTask = null;
             relatedsimTraces = new Vector<SimulationTransaction>();
+            mandatoryOptional = new Vector<SimulationTransaction>();
             delayDueTosimTraces = new Vector<SimulationTransaction>();
             dependencyGraphRelations.setRunnableTimePerDevice(new HashMap<String, ArrayList<ArrayList<Integer>>>());
             if (path2 != null && path2.getLength() > 0) {
@@ -2072,7 +2075,7 @@ public class DependencyGraphTranslator extends SwingWorker {
                     GraphPath<Vertex, DefaultEdge> pathTochannel = DijkstraShortestPath.findPathBetween(g, v1, getvertex(ChannelName));
                     GraphPath<Vertex, DefaultEdge> pathFromChannel = DijkstraShortestPath.findPathBetween(g, getvertex(ChannelName),
                             getvertex(task22));
-                    if (pathTochannel != null && pathTochannel.getLength() > 0 && pathFromChannel != null && pathFromChannel.getLength() > 0) {
+                    if (pathFromChannel != null && pathFromChannel.getLength() > 0) {
                         devicesToBeConsidered.addAll(busChList);
                     }
                 }
@@ -2720,6 +2723,25 @@ public class DependencyGraphTranslator extends SwingWorker {
                                                 dependencyGraphRelations.getRunnableTimePerDevice().put(dName, timeValuesList);
                                             }
                                         }
+
+                                    } else if (pathToDestination != null && pathToDestination.getLength() > 0) {
+                                        mandatoryOptional.add(st);
+
+                                        ArrayList<Integer> timeValues = new ArrayList<Integer>();
+                                        timeValues.add(0, Integer.valueOf(st.runnableTime));
+                                        timeValues.add(1, startTime);
+                                        String dName = st.deviceName + "_" + st.coreNumber;
+                                        if (!(st.runnableTime).equals(st.startTime)) {
+                                            if (dependencyGraphRelations.getRunnableTimePerDevice().containsKey(dName)) {
+                                                if (!dependencyGraphRelations.getRunnableTimePerDevice().get(dName).contains(timeValues)) {
+                                                    dependencyGraphRelations.getRunnableTimePerDevice().get(dName).add(timeValues);
+                                                }
+                                            } else {
+                                                ArrayList<ArrayList<Integer>> timeValuesList = new ArrayList<ArrayList<Integer>>();
+                                                timeValuesList.add(timeValues);
+                                                dependencyGraphRelations.getRunnableTimePerDevice().put(dName, timeValuesList);
+                                            }
+                                        }
                                     } else if (((st.deviceName.equals(task2DeviceName) && task2CoreNbr.equals(st.coreNumber))
                                             || (st.deviceName.equals(task1DeviceName) && task1CoreNbr.equals(st.coreNumber))
                                             || devicesToBeConsidered.contains(deviceName)) && !st.id.equals(idTask1) && !st.id.equals(idTask2)) {
@@ -2757,6 +2779,8 @@ public class DependencyGraphTranslator extends SwingWorker {
                     dataByTaskR.put(i, relatedsimTraces);
                     dataBydelayedTasks.put(i, delayDueTosimTraces);
                     timeDelayedPerRow.put(i, dependencyGraphRelations.getRunnableTimePerDevice());
+                    mandatoryOptionalSimT.put(i, mandatoryOptional);
+
                     // dataByTask[i][5] = list.getModel();
                     // dataByTask[i][6] = totalTime;
                 }
@@ -3713,6 +3737,20 @@ public class DependencyGraphTranslator extends SwingWorker {
         return dataByTaskRowDetails;
     }
 
+    public String[][] getMandatoryOptionalByRow(int row) {
+        String[][] dataByTaskRowDetails = new String[mandatoryOptionalSimT.get(row).size()][5];
+        int i = 0;
+        for (SimulationTransaction st : mandatoryOptionalSimT.get(row)) {
+            dataByTaskRowDetails[i][0] = st.command;
+            dataByTaskRowDetails[i][1] = nameIDTaskList.get(st.id);
+            dataByTaskRowDetails[i][2] = st.deviceName + "_" + st.coreNumber;
+            dataByTaskRowDetails[i][3] = st.startTime;
+            dataByTaskRowDetails[i][4] = st.endTime;
+            i++;
+        }
+        return dataByTaskRowDetails;
+    }
+
     // fill the detailed latency table once a row is selected
     public Object[][] getTaskByRowDetailsMinMaxTaint(int row) {
         String task12 = (String) dataByTaskMinMax[row][0];
@@ -3775,6 +3813,10 @@ public class DependencyGraphTranslator extends SwingWorker {
         return dataByTaskR.get(row);
     }
 
+    public List<SimulationTransaction> getMandatoryOptionalSimTTaks(int row) {
+        return mandatoryOptionalSimT.get(row);
+    }
+
     public Vector<SimulationTransaction> getMinMaxTasksByRowTainted(int row) {
         int maxStartTime = (int) dataByTaskMinMax[row][1];
         int maxEndTime = (int) dataByTaskMinMax[row][3];
diff --git a/src/main/java/tmltranslator/simulation/PlanArrays.java b/src/main/java/tmltranslator/simulation/PlanArrays.java
index b16153a788..06f9906163 100644
--- a/src/main/java/tmltranslator/simulation/PlanArrays.java
+++ b/src/main/java/tmltranslator/simulation/PlanArrays.java
@@ -10,6 +10,7 @@ public class PlanArrays {
     private List<String> onPathBehavior = new ArrayList<String>();
     private List<String> offPathBehavior = new ArrayList<String>();
     private List<String> offPathBehaviorCausingDelay = new ArrayList<String>();
+    private List<String> mandatoryOptional = new ArrayList<String>();
     private static final String ZERO = "0";
     private static final String DEVICE_NAME = "Device Name";
     private String[] columnNames;
@@ -38,6 +39,23 @@ public class PlanArrays {
                     deviceNames1.add(deviceNameandcore);
                 }
             }
+            for (SimulationTransaction st : dgraph.getMandatoryOptionalSimTTaks(row)) {
+                if (st.coreNumber == null) {
+                    st.coreNumber = ZERO;
+                }
+                tmpEnd = Integer.parseInt(st.endTime);
+                if (tmpEnd > maxTime) {
+                    maxTime = tmpEnd;
+                }
+                tmpStart = Integer.parseInt(st.startTime);
+                if (tmpStart < minTime) {
+                    minTime = tmpStart;
+                }
+                String deviceNameandcore = st.deviceName + "_" + st.coreNumber;
+                if (!deviceNames1.contains(deviceNameandcore)) {
+                    deviceNames1.add(deviceNameandcore);
+                }
+            }
             for (SimulationTransaction st : dgraph.getRowDetailsByHW(row)) {
                 tmpEnd = Integer.parseInt(st.endTime);
                 if (st.coreNumber == null) {
@@ -85,6 +103,26 @@ public class PlanArrays {
                     }
                 }
             }
+            for (SimulationTransaction st : dgraph.getMandatoryOptionalSimTTaks(row)) {
+                if (st.coreNumber == null) {
+                    st.coreNumber = ZERO;
+                }
+                for (String dName : deviceNames1) {
+                    String deviceNameandcore = st.deviceName + "_" + st.coreNumber;
+                    if (deviceNameandcore.equals(dName)) {
+                        length = Integer.parseInt(st.length);
+                        for (int i = 0; i < length; i++) {
+                            int columnnmber = Integer.parseInt(st.endTime) - minTime - i;
+                            dataDetailedByTask[deviceNames1.indexOf(dName)][columnnmber] = dgraph.getNameIDTaskList().get(st.id);
+                            ;
+                            mandatoryOptional.add(dgraph.getNameIDTaskList().get(st.id) + columnNames[columnnmber]);
+                            // if (!dgraph.getOnPath().contains(st)) {
+                            // dgraph.getOnPath().add(st);
+                            // }
+                        }
+                    }
+                }
+            }
             HashMap<String, ArrayList<ArrayList<Integer>>> delayTime = dgraph.getRowDelayDetailsByHW(row);
             for (SimulationTransaction st : dgraph.getRowDetailsByHW(row)) {
                 int startTime = Integer.valueOf(st.startTime);
@@ -308,4 +346,9 @@ public class PlanArrays {
     public String[] getColumnNames() {
         return columnNames;
     }
+
+    public List<String> getMandatoryOptional() {
+        return mandatoryOptional;
+    }
+
 }
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java
index 05e6f2cf21..91a9834ffb 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyComparedDetailedPopup.java
@@ -560,7 +560,7 @@ public class JFrameLatencyComparedDetailedPopup extends JFrame implements TableM
         table.setFillsViewportHeight(true);
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         table.setAutoCreateRowSorter(true);
-        TableRenderer tr = new TableRenderer(onPathBehavior, offPathBehaviorCausingDelay, offPathBehavior);
+        TableRenderer tr = new TableRenderer(onPathBehavior, offPathBehaviorCausingDelay, offPathBehavior,offPathBehavior);
         int ncols = table.getColumnCount();
         table.getModel().addTableModelListener(this);
         TableColumnModel tcm = table.getColumnModel();
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
index 1e8d5948c8..58633d849e 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedAnalysis.java
@@ -511,6 +511,7 @@ public class JFrameLatencyDetailedAnalysis extends JFrame implements ActionListe
     protected void generateDirectedGraph(TMLMapping<TGComponent> tmap, List<TMLComponentDesignPanel> cpanels) {
         try {
             dgraph = new DependencyGraphTranslator(tmap);
+            tc.setDgraph(dgraph);
             pbar.setMaximum(dgraph.getNodeNbProgressBar());
             pbar.setMinimum(0);
             dgraph.addPropertyChangeListener(new PropertyChangeListener() {
diff --git a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java
index 3cda41c3b4..5433179ad8 100644
--- a/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java
+++ b/src/main/java/ui/simulationtraceanalysis/JFrameLatencyDetailedPopup.java
@@ -229,7 +229,7 @@ public class JFrameLatencyDetailedPopup extends JFrame implements TableModelList
         table.setFillsViewportHeight(true);
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         table.setAutoCreateRowSorter(true);
-        TableRenderer tr = new TableRenderer(arrays.getOnPathBehavior(), arrays.getOffPathBehaviorCausingDelay(), arrays.getOffPathBehavior());
+        TableRenderer tr = new TableRenderer(arrays.getOnPathBehavior(), arrays.getOffPathBehaviorCausingDelay(), arrays.getOffPathBehavior(),arrays.getMandatoryOptional());
         int ncols = table.getColumnCount();
         table.getModel().addTableModelListener(this);
         TableColumnModel tcm = table.getColumnModel();
diff --git a/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java b/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java
index e59cb0cdcc..7018f4cbc3 100644
--- a/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java
+++ b/src/main/java/ui/simulationtraceanalysis/LatencyAnalysisParallelAlgorithms.java
@@ -25,7 +25,7 @@ public class LatencyAnalysisParallelAlgorithms implements Runnable {
     private List<TMLComponentDesignPanel> cpanels;
     private DependencyGraphTranslator dgraph, dgraph1, dgraph2;
     private int row, row1, row2, row3, row4, selectedIndex;
-    private Object[][] dataDetailedByTask, dataDetailedByTask2;
+    private Object[][] dataDetailedByTask, dataDetailedByTask2, dataMandatoryOptional;
     private LatencyDetailedAnalysisMain main;
     private MainGUI mainGUI;
     private SimulationTrace selectedST;
@@ -45,6 +45,7 @@ public class LatencyAnalysisParallelAlgorithms implements Runnable {
             jFrameLDA.generateDirectedGraph(tmap, cpanels);
         } else if (algorithmId == 2) {
             dataDetailedByTask = dgraph.getTaskByRowDetails(row);
+            dataMandatoryOptional = dgraph.getMandatoryOptionalByRow(row);
         } else if (algorithmId == 3) {
             dataDetailedByTask = dgraph.getTaskByRowDetailsMinMaxTaint(row);
         } else if (algorithmId == 4) {
@@ -222,6 +223,10 @@ public class LatencyAnalysisParallelAlgorithms implements Runnable {
         this.dgraph1 = dgraph1;
     }
 
+    public Object[][] getDataMandatoryOptional() {
+        return dataMandatoryOptional;
+    }
+
     public void latencyDetailedAnalysis(JFrameCompareLatencyDetail jFrameCompareLatencyDetail, String task12, String task22, String task32,
             String task42, Vector<SimulationTransaction> transFile12, Vector<SimulationTransaction> transFile22) {
         cld = jFrameCompareLatencyDetail;
diff --git a/src/main/java/ui/simulationtraceanalysis/TableRenderer.java b/src/main/java/ui/simulationtraceanalysis/TableRenderer.java
index 407d06889b..9168a37280 100644
--- a/src/main/java/ui/simulationtraceanalysis/TableRenderer.java
+++ b/src/main/java/ui/simulationtraceanalysis/TableRenderer.java
@@ -17,14 +17,16 @@ class TableRenderer extends DefaultTableCellRenderer {
     private List<String> onPathBehaviors = new Vector<String>();
     private List<String> offPathBehaviors = new Vector<String>();
     private List<String> offPathBehaviorCausingDelay = new Vector<String>();
+    private List<String> mandatoryOptionalByRow = new Vector<String>();
 
-    public TableRenderer(List<String> onPathBehavior, List<String> offPathBehaviorCausingDelay, List<String> offPathBehavior) {
+    public TableRenderer(List<String> onPathBehavior, List<String> offPathBehaviorCausingDelay, List<String> offPathBehavior,List<String> mandatoryOptionalByRow) {
         this.onPathBehaviors = new Vector<String>();
         this.offPathBehaviorCausingDelay = new Vector<String>();
         this.offPathBehaviors = new Vector<String>();
         this.onPathBehaviors = onPathBehavior;
         this.offPathBehaviorCausingDelay = offPathBehaviorCausingDelay;
         this.offPathBehaviors = offPathBehavior;
+        this.mandatoryOptionalByRow=mandatoryOptionalByRow;
     }
 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
@@ -45,6 +47,10 @@ class TableRenderer extends DefaultTableCellRenderer {
                 randomColour = Color.orange;
                 // randomColour = Color.red;
             }
+            else if (mandatoryOptionalByRow.contains(value.toString() + table.getColumnName(column))) {
+                randomColour = Color.LIGHT_GRAY;
+                // randomColour = Color.red;
+            }
         } else {
             this.colorCell = false;
         }
-- 
GitLab