/******************************************************************************* | |
* Copyright (c) 2019 Dortmund University of Applied Sciences and Arts. | |
* | |
* This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: Junhyung Ki - initial API and implementation | |
* | |
*******************************************************************************/ | |
package org.eclipse.app4mc.gsoc_rta.ui; | |
import java.awt.Color; | |
import java.awt.EventQueue; | |
import java.awt.Font; | |
import java.awt.List; | |
import java.awt.event.ActionEvent; | |
import java.awt.event.ActionListener; | |
import java.io.File; | |
import java.math.BigInteger; | |
import java.util.HashMap; | |
import java.util.stream.Collectors; | |
import javax.swing.ButtonGroup; | |
import javax.swing.JButton; | |
import javax.swing.JComboBox; | |
import javax.swing.JFrame; | |
import javax.swing.JFileChooser; | |
import javax.swing.JLabel; | |
import javax.swing.JOptionPane; | |
import javax.swing.JRadioButton; | |
import javax.swing.JTextField; | |
import org.apache.log4j.Level; | |
import org.apache.log4j.Logger; | |
import org.eclipse.app4mc.amalthea.model.Amalthea; | |
import org.eclipse.app4mc.amalthea.model.AmaltheaServices; | |
import org.eclipse.app4mc.amalthea.model.EventChain; | |
import org.eclipse.app4mc.amalthea.model.Label; | |
import org.eclipse.app4mc.amalthea.model.ProcessingUnit; | |
import org.eclipse.app4mc.amalthea.model.PuType; | |
import org.eclipse.app4mc.amalthea.model.Task; | |
import org.eclipse.app4mc.amalthea.model.Time; | |
import org.eclipse.app4mc.amalthea.model.TimeUnit; | |
import org.eclipse.app4mc.amalthea.model.io.AmaltheaLoader; | |
import org.eclipse.app4mc.amalthea.model.util.FactoryUtil; | |
import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil.TimeType; | |
import org.eclipse.app4mc.gsoc_rta.*; | |
import org.eclipse.app4mc.gsoc_rta.SharedConsts.ComParadigm; | |
import org.eclipse.emf.common.util.EList; | |
import javax.swing.SwingConstants; | |
import javax.swing.filechooser.FileNameExtensionFilter; | |
import javax.swing.JSeparator; | |
/** | |
* Date: August 21-2019 | |
* @author Junhyung Ki | |
* @version 1.0 | |
* The purpose of this class is to provide users a better visual and increase usability of Response Time Analysis. | |
*/ | |
@SuppressWarnings("serial") | |
public class APP4RTA extends JFrame { | |
private static JComboBox<String> ecComboBox = new JComboBox<String>(); | |
private CPURta cpurta = new CPURta(); | |
private E2ELatency e2e = new E2ELatency(); | |
private Amalthea currentModel = null; | |
private java.util.List<ProcessingUnit> currentPUList = null; | |
private int[] currentIA = null; | |
private EList<Task> allTaskList = null; | |
private EList<EventChain> currentECList = null; | |
private EventChain currentEC = null; | |
private java.util.List<Task> currentTaskChain = null; | |
private File currentFile = null; | |
private HashMap<Integer, java.util.List<Task>> puTaskListHM; | |
private JFrame frame; | |
private int selectedECIndex = -1; | |
private boolean schedulability_flag = false; | |
private ComParadigm currentParadigm = null; | |
JFileChooser fileChooser; | |
JTextField selectedModelLbl; | |
private JLabel jl0, jl1, jl2, jl3, jl4, jl5, jl6, jl7, jl8, jl9, jl10, | |
jl11, jl12, jl13, jl14, jl15, jl16, jl17, jl18, jl19; | |
private JTextField tf0, tf1, tf2, tf3, tf4, tf5, tf6, tf7, tf8, tf9, | |
tf10, tf11, tf12, tf13, tf14, tf15, tf16, tf17, tf18, tf19; | |
private JLabel[] jLabelArray = { | |
jl0, jl1, jl2, jl3, jl4, jl5, jl6, jl7, jl8, jl9, jl10, | |
jl11, jl12, jl13, jl14, jl15, jl16, jl17, jl18, jl19 | |
}; | |
private JTextField[] jTextFieldArray= { | |
tf0, tf1, tf2, tf3, tf4, tf5, tf6, tf7, tf8, tf9, | |
tf10, tf11, tf12, tf13, tf14, tf15, tf16, tf17, tf18, tf19 | |
}; | |
private JLabel jl_0, jl_1, jl_2, jl_3, jl_4, jl_5, jl_6, jl_7; | |
private JLabel jl_a, jl_b, jl_c, jl_d, jl_e, jl_f, jl_g, jl_h; | |
private List l0, l1, l2, l3, l4, l5, l6, l7; | |
private List rtL0, rtL1, rtL2, rtL3, rtL4, rtL5, rtL6, rtL7; | |
private JLabel[] puLabelArray = { | |
jl_0, jl_1, jl_2, jl_3, jl_4, jl_5, jl_6, jl_7 | |
}; | |
private JLabel[] rtListLabelArray = { | |
jl_a, jl_b, jl_c, jl_d, jl_e, jl_f, jl_g, jl_h | |
}; | |
private List[] puListArray = { | |
l0, l1, l2, l3, l4, l5, l6, l7 | |
}; | |
private List[] rtListArray = { | |
rtL0, rtL1, rtL2, rtL3, rtL4, rtL5, rtL6, rtL7 | |
}; | |
private JLabel ecL0, ecL1, ecL2, ecL3, ecL4, ecL5, ecL6, | |
ecL7, ecL8, ecL9, ecL10, ecL11, ecL12, ecL13; | |
private JTextField jtf0, jtf1, jtf2, jtf3, jtf4, jtf5, jtf6, | |
jtf7, jtf8, jtf9, jtf10, jtf11, jtf12, jtf13; | |
private JLabel[] ecLabelArray = { | |
ecL0, ecL1, ecL2, ecL3, ecL4, ecL5, ecL6, | |
ecL7, ecL8, ecL9, ecL10, ecL11, ecL12, ecL13 | |
}; | |
private JTextField[] ecJTPArray = { | |
jtf0, jtf1, jtf2, jtf3, jtf4, jtf5, jtf6, | |
jtf7, jtf8, jtf9, jtf10, jtf11, jtf12, jtf13 | |
}; | |
private List list, list_1, list_2; | |
public static void main(String[] args) { | |
EventQueue.invokeLater(new Runnable() { | |
public void run() { | |
org.apache.log4j.BasicConfigurator.configure(); | |
Logger.getRootLogger().setLevel(Level.ERROR); | |
final APP4RTA window = new APP4RTA(); | |
window.frame.setVisible(true); | |
window.frame.setTitle("APP4RTA"); | |
} | |
}); | |
} | |
public APP4RTA() { | |
initialize(); | |
} | |
private void initialize() { | |
frame = new JFrame(); | |
frame.getContentPane().setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
frame.setBounds(0, 31, 1200, 1027); | |
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
frame.getContentPane().setLayout(null); | |
JLabel lblSelectTheModel = new JLabel("Amalthea Model"); | |
lblSelectTheModel.setFont(new Font("Stencil BT", Font.PLAIN, 13)); | |
lblSelectTheModel.setBounds(10, 13, 120, 22); | |
frame.getContentPane().add(lblSelectTheModel); | |
JLabel lblTaskName = new JLabel("Task Name"); | |
lblTaskName.setForeground(new Color(139, 0, 0)); | |
lblTaskName.setFont(new Font("Sitka Heading", Font.BOLD, 12)); | |
lblTaskName.setHorizontalAlignment(SwingConstants.CENTER); | |
lblTaskName.setBounds(15, 43, 70, 16); | |
frame.getContentPane().add(lblTaskName); | |
JLabel lblPuNum = new JLabel("PU Num"); | |
lblPuNum.setForeground(new Color(0, 0, 255)); | |
lblPuNum.setHorizontalAlignment(SwingConstants.CENTER); | |
lblPuNum.setFont(new Font("Sitka Heading", Font.BOLD, 12)); | |
lblPuNum.setBounds(92, 43, 70, 16); | |
frame.getContentPane().add(lblPuNum); | |
JButton btnDefualtIa = new JButton("Defualt IA"); | |
btnDefualtIa.addActionListener(new ActionListener() { | |
public void actionPerformed(ActionEvent arg0) { | |
if (cpurta.getModel() == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: A model is not loaded."); | |
return ; | |
} else if (cpurta.getTRT() == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: TRT HashMap is not loaded."); | |
return ; | |
} else if (cpurta.getPUl().size() == 0) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Processing Unit List is not loaded."); | |
return ; | |
} | |
final int[] defaultIA = SharedConsts.defaultIAMapping; | |
if (cpurta.getModel().getSwModel().getTasks().size() == defaultIA.length) { | |
for (int i = 0; i < defaultIA.length; i++) { | |
jTextFieldArray[i].setText("" + defaultIA[i]); | |
} | |
return ; | |
} else if (currentPUList.size() == 1) { | |
final int numOfTasks = cpurta.getModel().getSwModel().getTasks().size(); | |
for (int i = 0; i < numOfTasks; i++) { | |
jTextFieldArray[i].setText("0"); | |
} | |
return ; | |
} | |
String str = ""; | |
for (int i = 0; i < currentPUList.size(); i++) { | |
if (i == currentPUList.size() - 1) { | |
str = str + i; | |
break; | |
} | |
str = str + i + ", "; | |
} | |
JOptionPane.showMessageDialog(frame, "ERROR: The length of the default integer array does not match with\n" | |
+ "the number of tasks in the target model.\n\n" + "Please assign the number(s) manually.\n" | |
+ "Available PU number(s): " + str); | |
} | |
}); | |
JButton btnEnterIA = new JButton("Enter IA"); | |
btnEnterIA.addActionListener(new ActionListener() { | |
public void actionPerformed(ActionEvent e) { | |
currentIA = new int[cpurta.getModel().getSwModel().getTasks().size()]; | |
for (int i = 0; i < allTaskList.size(); i++) { | |
if (jTextFieldArray[i].getText().length() == 0) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Fill the rest of the array!"); | |
return ; | |
} else if (jTextFieldArray[i].getText().charAt(0) < 48 || jTextFieldArray[i].getText().charAt(0) > 54) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Wrong array value!"); | |
return ; | |
} else if (i >= 0 && i <= 9 && Integer.parseInt(jTextFieldArray[i].getText()) == 6) { | |
JOptionPane.showMessageDialog(frame, "ERROR: CPU Tasks should not be mapped to GPU! \n\n" | |
+ "Please assign different IA value for " + "(" + allTaskList.get(i).getName() + ")"); | |
return ; | |
} else if (i == jTextFieldArray.length-1 && Integer.parseInt(jTextFieldArray[i].getText()) != 6) { | |
JOptionPane.showMessageDialog(frame, "ERROR: 'Detection' task can not be mapped to CPU!"); | |
return ; | |
} | |
currentIA[i] = Integer.parseInt(jTextFieldArray[i].getText()); | |
} | |
cpurta.setIA(currentIA); | |
cpurta.setContention(currentIA, currentModel); | |
puTaskListHM = cpurta.be_getPUTaskListHashMap(currentModel); | |
for (int i = 0; i < puTaskListHM.size(); i++) { | |
if (puListArray[i].getItemCount() == 0) { | |
for (int j = 0; j < puTaskListHM.get(i).size(); j++) { | |
puListArray[i].add((puTaskListHM.get(i).get(j)).getName()); | |
} | |
} | |
} | |
} | |
}); | |
JRadioButton rdbtnSynchronous = new JRadioButton("Synchronous"); | |
rdbtnSynchronous.setForeground(new Color(139, 0, 0)); | |
rdbtnSynchronous.setFont(new Font("Sitka Heading", Font.BOLD, 13)); | |
JRadioButton rdbtnAsynchronous = new JRadioButton("Asynchronous"); | |
rdbtnAsynchronous.setForeground(new Color(0, 0, 255)); | |
rdbtnAsynchronous.setFont(new Font("Sitka Heading", Font.BOLD, 13)); | |
ButtonGroup offloadingMode = new ButtonGroup(); | |
offloadingMode.add(rdbtnSynchronous); | |
offloadingMode.add(rdbtnAsynchronous); | |
JRadioButton rdbtnWorstCase = new JRadioButton("Worst-Case"); | |
rdbtnWorstCase.setFont(new Font("Sitka Heading", Font.BOLD, 13)); | |
rdbtnWorstCase.setForeground(Color.DARK_GRAY); | |
JRadioButton rdbtnAverageCase = new JRadioButton("Average-Case"); | |
rdbtnAverageCase.setFont(new Font("Sitka Heading", Font.BOLD, 13)); | |
rdbtnAverageCase.setForeground(Color.DARK_GRAY); | |
JRadioButton rdbtnBestCase = new JRadioButton("Best-Case"); | |
rdbtnBestCase.setFont(new Font("Sitka Heading", Font.BOLD, 13)); | |
rdbtnBestCase.setForeground(Color.DARK_GRAY); | |
ButtonGroup executionMode = new ButtonGroup(); | |
executionMode.add(rdbtnWorstCase); | |
executionMode.add(rdbtnAverageCase); | |
executionMode.add(rdbtnBestCase); | |
JLabel lblSchedulability = new JLabel("Schedulability"); | |
JTextField schedulability = new JTextField(); | |
schedulability.setHorizontalAlignment(SwingConstants.RIGHT); | |
schedulability.setEditable(false); | |
JLabel lblMemAccCost = new JLabel("Cumulated Memory-Access Cost"); | |
JTextField memAccCost = new JTextField(); | |
memAccCost.setHorizontalAlignment(SwingConstants.RIGHT); | |
memAccCost.setEditable(false); | |
JLabel lblCumulContention = new JLabel("Cumulated Contention"); | |
JTextField cumulContention = new JTextField(); | |
cumulContention.setHorizontalAlignment(SwingConstants.RIGHT); | |
cumulContention.setEditable(false); | |
JLabel lblComputation = new JLabel("Computation"); | |
JTextField computation = new JTextField(); | |
computation.setHorizontalAlignment(SwingConstants.RIGHT); | |
computation.setEditable(false); | |
JLabel lblResponseTimeSum = new JLabel("Response Time Sum"); | |
JTextField rtSum = new JTextField(); | |
rtSum.setHorizontalAlignment(SwingConstants.RIGHT); | |
rtSum.setEditable(false); | |
JButton btnCalculate = new JButton("Calculate"); | |
btnCalculate.addActionListener(new ActionListener() { | |
public void actionPerformed(ActionEvent arg0) { | |
for (int i = 0; i < allTaskList.size(); i++) { | |
if (jTextFieldArray[i].getText().length() == 0) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Fill the array first!"); | |
return ; | |
} | |
} | |
if (rdbtnSynchronous.isSelected()) { | |
SharedConsts.synchronousOffloading = true; | |
} else if (rdbtnAsynchronous.isSelected()) { | |
SharedConsts.synchronousOffloading = false; | |
} else { | |
JOptionPane.showMessageDialog(frame, "ERROR: You should choose an offloading mode! (Sync / Async)"); | |
return ; | |
} | |
if (rdbtnWorstCase.isSelected()) { | |
SharedConsts.timeType = TimeType.WCET; | |
} else if (rdbtnAverageCase.isSelected()) { | |
SharedConsts.timeType = TimeType.ACET; | |
} else if (rdbtnBestCase.isSelected()) { | |
SharedConsts.timeType = TimeType.BCET; | |
} else { | |
JOptionPane.showMessageDialog(frame, "ERROR: You should choose an execution case! (Worst Case / Average Case / Best Case)"); | |
return ; | |
} | |
if (currentIA == null || puTaskListHM.size() == 0) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Click the 'Enter IA' button."); | |
return ; | |
} | |
schedulability_flag = true; | |
Time pRtSum = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
for (int i = 0; i < puTaskListHM.size(); i++) { | |
final ProcessingUnit pu = cpurta.getPUl().get(i); | |
final java.util.List<Task> thisPUTaskList = puTaskListHM.get(i); | |
Time thisRT = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
if (rtListArray[i].getItemCount() == 0) { | |
if (pu.getDefinition().getPuType().equals(PuType.CPU)) { | |
for (Task t : thisPUTaskList) { | |
thisRT = cpurta.preciseTestCPURT(t, thisPUTaskList, SharedConsts.timeType, pu); | |
final Time thisPeriod = CommonUtils.getStimInTime(t); | |
final BigInteger period = AmaltheaServices.convertToPicoSeconds(thisPeriod); | |
if (AmaltheaServices.convertToPicoSeconds(thisRT).compareTo(period) > 0) { | |
rtListArray[i].add("Non Scheduleable! => MAX Value"); | |
schedulability_flag = false; | |
} else if (AmaltheaServices.convertToPicoSeconds(thisRT).equals(BigInteger.ZERO)) { | |
rtListArray[i].add("0 ps (GPU Task on CPU)"); | |
} else { | |
rtListArray[i].add(thisRT.toString()); | |
} | |
pRtSum = pRtSum.add(thisRT); | |
} | |
} else { | |
for (Task t : thisPUTaskList) { | |
thisRT = cpurta.getTRT().get(t); | |
rtListArray[i].add(thisRT.toString()); | |
pRtSum = pRtSum.add(thisRT); | |
} | |
} | |
} | |
} | |
if (schedulability_flag) { | |
schedulability.setText("Scheduleable! :)"); | |
memAccCost.setText("" + cpurta.getCumulatedMemAccCosts()); | |
cumulContention.setText("" + cpurta.getCumulatedContention()); | |
computation.setText("" + (pRtSum.subtract(cpurta.getCumulatedMemAccCosts())).subtract(cpurta.getCumulatedContention())); | |
rtSum.setText(pRtSum.toString()); | |
} else { | |
schedulability.setText("Non Scheduleable! :("); | |
memAccCost.setText("Not Available."); | |
cumulContention.setText("Not Available."); | |
computation.setText("Not Available."); | |
rtSum.setText("Not Available."); | |
} | |
} | |
}); | |
JButton btnReset = new JButton("Reset"); | |
btnReset.addActionListener(new ActionListener() { | |
public void actionPerformed(ActionEvent e) { | |
currentIA = null; | |
cpurta.setIA(currentIA); | |
cpurta.setContention(currentIA, currentModel); | |
/* latency time initializing */ | |
cpurta.initCumulatedMemAccCosts(); | |
cpurta.initCumulatedContention(); | |
for (int i = 0; i < allTaskList.size(); i++) { | |
jTextFieldArray[i].setText(""); | |
} | |
for (int i = 0; i < currentPUList.size(); i++) { | |
puListArray[i].removeAll(); | |
} | |
for (int i = 0; i < currentPUList.size(); i++) { | |
rtListArray[i].removeAll(); | |
} | |
offloadingMode.setSelected(null, false); | |
executionMode.setSelected(null, false); | |
schedulability.setText(null); | |
memAccCost.setText(null); | |
cumulContention.setText(null); | |
computation.setText(null); | |
rtSum.setText(null); | |
currentIA = null; | |
puTaskListHM = null; | |
frame.revalidate(); | |
frame.repaint(); | |
} | |
}); | |
selectedModelLbl = new JTextField(); | |
selectedModelLbl.setEditable(false); | |
selectedModelLbl.setBounds(142, 13, 206, 22); | |
frame.getContentPane().add(selectedModelLbl); | |
selectedModelLbl.setColumns(10); | |
JButton amaltheaSchBtn = new JButton("Search Amalthea"); | |
amaltheaSchBtn.addActionListener(new ActionListener() { | |
public void actionPerformed(ActionEvent e) { | |
final String userDirLocation = System.getProperty("user.dir"); | |
File userDir = new File(userDirLocation); | |
fileChooser = new JFileChooser(userDir); | |
fileChooser.setAcceptAllFileFilterUsed(false); | |
FileNameExtensionFilter filter = new FileNameExtensionFilter("Amalthea models", "amxmi"); | |
fileChooser.addChoosableFileFilter(filter); | |
fileChooser.setDialogTitle("Open File"); | |
int result = fileChooser.showOpenDialog(null); | |
if (result == JFileChooser.APPROVE_OPTION) { | |
final Amalthea loadedModel = AmaltheaLoader.loadFromFile(fileChooser.getSelectedFile()); | |
if (loadedModel.getVersion().compareTo("0.9.4") != 0) { | |
JOptionPane.showMessageDialog(frame, "Error: This model should be migrated to the version 0.9.4"); | |
return ; | |
} | |
/* Something was selected before */ | |
if (currentFile != null) { | |
/* The selected file is equal to the previous file => Do nothing */ | |
if (fileChooser.getSelectedFile().equals(currentFile)) { | |
JOptionPane.showMessageDialog(frame, "Same Model"); | |
return ; | |
} | |
/* If the selected file is different to the previous one => Remove and Do Normal. */ | |
else { | |
schedulability.setText(null); | |
memAccCost.setText(null); | |
cumulContention.setText(null); | |
computation.setText(null); | |
rtSum.setText(null); | |
for (int i = 0; i < allTaskList.size(); i++) { | |
frame.remove(jLabelArray[i]); | |
frame.remove(jTextFieldArray[i]); | |
} | |
frame.remove(btnDefualtIa); | |
frame.remove(btnEnterIA); | |
frame.remove(rdbtnSynchronous); | |
frame.remove(rdbtnAsynchronous); | |
frame.remove(rdbtnWorstCase); | |
frame.remove(rdbtnAverageCase); | |
frame.remove(rdbtnBestCase); | |
frame.remove(btnCalculate); | |
frame.remove(btnReset); | |
frame.remove(lblSchedulability); | |
frame.remove(schedulability); | |
frame.remove(lblMemAccCost); | |
frame.remove(memAccCost); | |
frame.remove(lblCumulContention); | |
frame.remove(cumulContention); | |
frame.remove(lblComputation); | |
frame.remove(computation); | |
frame.remove(lblResponseTimeSum); | |
frame.remove(rtSum); | |
for (int i = 0; i < currentPUList.size(); i++) { | |
frame.remove(puLabelArray[i]); | |
frame.remove(rtListLabelArray[i]); | |
frame.remove(puListArray[i]); | |
frame.remove(rtListArray[i]); | |
} | |
frame.remove(ecComboBox); | |
} | |
} | |
/* Something was not selected before => Do normal */ | |
currentFile = fileChooser.getSelectedFile(); | |
selectedModelLbl.setText(currentFile.getName()); | |
currentModel = loadedModel; | |
currentPUList = CommonUtils.getPUs(currentModel); | |
if (currentPUList.get(0).getAccessElements().size() == 0) { | |
JOptionPane.showMessageDialog(frame, "The selected model's processing unit(s) does(do) not have 'read & write Latency' values.\n\n" | |
+ "Therefore, the default value of 30 will be assigned for them.\n" | |
+ "This will affect the response time results."); | |
} | |
cpurta.setModel(currentModel); | |
cpurta.setTRT(cpurta.getDefaultTRT(currentModel)); | |
cpurta.setPUl(currentPUList); | |
allTaskList = currentModel.getSwModel().getTasks(); | |
if (allTaskList.size() > 20) { | |
JOptionPane.showMessageDialog(frame, "ERROR: The selected model has " + allTaskList.size() + " Tasks. (Limit: 20)\n" | |
+ "Please choose a different model."); | |
return ; | |
} else if (currentPUList.size() > 8) { | |
JOptionPane.showMessageDialog(frame, "ERROR: The selected model has " + currentPUList.size() + " Processing Units. (Limit: 8)\n" | |
+ "Please choose a different model."); | |
return ; | |
} | |
/* Task Indices */ | |
for (int i = 0; i < allTaskList.size(); i++) { | |
jLabelArray[i] = new JLabel(allTaskList.get(i).getName()); | |
jLabelArray[i].setBounds(12, (60+(i*24)), 97, 16); | |
frame.getContentPane().add(jLabelArray[i]); | |
jTextFieldArray[i] = new JTextField(); | |
jTextFieldArray[i].setColumns(10); | |
jTextFieldArray[i].setBounds(118, (60+(i*24)), 22, 22); | |
frame.getContentPane().add(jTextFieldArray[i]); | |
} | |
/* DefaultIA Button */ | |
btnDefualtIa.setBounds(155, 60, 97, 25); | |
frame.getContentPane().add(btnDefualtIa); | |
/* EnterIA Button */ | |
btnEnterIA.setBounds(155, 90, 97, 25); | |
frame.getContentPane().add(btnEnterIA); | |
/* Sync Radio Button */ | |
rdbtnSynchronous.setBounds(152, 125, 126, 25); | |
frame.getContentPane().add(rdbtnSynchronous); | |
/* Async Radio Button */ | |
rdbtnAsynchronous.setBounds(152, 145, 126, 25); | |
frame.getContentPane().add(rdbtnAsynchronous); | |
/* WorstCase Radio Button */ | |
rdbtnWorstCase.setBounds(152, 175, 107, 25); | |
frame.getContentPane().add(rdbtnWorstCase); | |
/* AverageCase Radio Button */ | |
rdbtnAverageCase.setBounds(152, 195, 107, 25); | |
frame.getContentPane().add(rdbtnAverageCase); | |
/* BestCase Radio Button */ | |
rdbtnBestCase.setBounds(152, 215, 107, 25); | |
frame.getContentPane().add(rdbtnBestCase); | |
/* Calculate Button */ | |
btnCalculate.setBounds(155, 252, 97, 25); | |
frame.getContentPane().add(btnCalculate); | |
/* Reset Button */ | |
btnReset.setBounds(155, 282, 97, 25); | |
frame.getContentPane().add(btnReset); | |
/* Schedulability Label & TextField */ | |
lblSchedulability.setBounds(157, 323, 200, 16); | |
frame.getContentPane().add(lblSchedulability); | |
schedulability.setBounds(155, 343, 200, 22); | |
frame.getContentPane().add(schedulability); | |
/* MemAccCost Label & TextField */ | |
lblMemAccCost.setBounds(157, 368, 200, 16); | |
frame.getContentPane().add(lblMemAccCost); | |
memAccCost.setBounds(155, 388, 200, 22); | |
frame.getContentPane().add(memAccCost); | |
/* CumulContention Label & TextField */ | |
lblCumulContention.setBounds(157, 413, 200, 16); | |
frame.getContentPane().add(lblCumulContention); | |
cumulContention.setBounds(155, 433, 200, 22); | |
frame.getContentPane().add(cumulContention); | |
/* Computation */ | |
lblComputation.setBounds(157, 458, 200, 16); | |
frame.getContentPane().add(lblComputation); | |
computation.setBounds(155, 478, 200, 22); | |
frame.getContentPane().add(computation); | |
/* ResponseTime Sum Label & TextField */ | |
lblResponseTimeSum.setBounds(157, 503, 200, 16); | |
frame.getContentPane().add(lblResponseTimeSum); | |
rtSum.setBounds(155, 523, 200, 22); | |
frame.getContentPane().add(rtSum); | |
/* PU & RT Lists */ | |
for (int i = 0; i < currentPUList.size(); i++) { | |
puLabelArray[i] = new JLabel(i +": " + currentPUList.get(i).getDefinition().getName()); | |
rtListLabelArray[i] = new JLabel("Response Time"); | |
puListArray[i] = new List(); | |
rtListArray[i] = new List(); | |
if (i >= 0 && i < 4) { | |
puLabelArray[i].setBounds((387+(i*200)), 50, 87, 22); | |
rtListLabelArray[i].setBounds((474+(i*200)), 50, 88, 22); | |
puListArray[i].setBounds((385+(i*200)), 75, 87, 145); | |
rtListArray[i].setBounds((475+(i*200)), 75, 87, 145); | |
} else if (i >= 4) { | |
puLabelArray[i].setBounds((387+((i-4)*200)), 225, 87, 22); | |
rtListLabelArray[i].setBounds((474+((i-4)*200)), 225, 88, 22); | |
puListArray[i].setBounds((385+((i-4)*200)), 250, 87, 145); | |
rtListArray[i].setBounds((475+((i-4)*200)), 250, 87, 145); | |
} | |
frame.getContentPane().add(puLabelArray[i]); | |
frame.getContentPane().add(rtListLabelArray[i]); | |
frame.getContentPane().add(puListArray[i]); | |
frame.getContentPane().add(rtListArray[i]); | |
} | |
/* E2ELatency Part */ | |
currentECList = currentModel.getConstraintsModel().getEventChains(); | |
if (currentECList.size() != 0) { | |
final String[] ecComboArray = new String[currentECList.size()]; | |
for (int i = 0; i < currentECList.size(); i++) { | |
ecComboArray[i] = currentECList.get(i).getName(); | |
} | |
ecComboBox = new JComboBox<String>(ecComboArray); | |
ecComboBox.setBounds(150, 570, 206, 22); | |
frame.getContentPane().add(ecComboBox); | |
ecComboBox.setSelectedItem(null); | |
} else { | |
JOptionPane.showMessageDialog(frame, "WARNING: The selected model has no Event-Chain.\n" | |
+ "End-to-End Event-Chain Latency Calculation is impossible with this model."); | |
// TODO: Something needs to be done here to prevent E2ELatency calculation. | |
} | |
frame.revalidate(); | |
frame.repaint(); | |
} | |
} | |
}); | |
amaltheaSchBtn.setBounds(348, 12, 133, 24); | |
frame.getContentPane().add(amaltheaSchBtn); | |
JLabel lblEventChainModel = new JLabel("EVENT CHAIN MODEL"); | |
lblEventChainModel.setFont(new Font("Stencil BT", Font.PLAIN, 13)); | |
lblEventChainModel.setBounds(10, 570, 136, 22); | |
frame.getContentPane().add(lblEventChainModel); | |
JRadioButton rdbtnDirect = new JRadioButton("Direct"); | |
rdbtnDirect.setForeground(new Color(139, 0, 0)); | |
rdbtnDirect.setFont(new Font("Sitka Heading", Font.BOLD, 13)); | |
rdbtnDirect.setBounds(530, 569, 70, 25); | |
frame.getContentPane().add(rdbtnDirect); | |
JRadioButton rdbtnImplicit = new JRadioButton("Implicit"); | |
rdbtnImplicit.setForeground(new Color(0, 0, 255)); | |
rdbtnImplicit.setFont(new Font("Sitka Heading", Font.BOLD, 13)); | |
rdbtnImplicit.setBounds(596, 569, 79, 25); | |
frame.getContentPane().add(rdbtnImplicit); | |
ButtonGroup paradigmMode = new ButtonGroup(); | |
paradigmMode.add(rdbtnDirect); | |
paradigmMode.add(rdbtnImplicit); | |
JLabel lblNewLabel = new JLabel("Direct & Implicit Communication Paradigm"); | |
lblNewLabel.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13)); | |
lblNewLabel.setBounds(10, 605, 293, 16); | |
frame.getContentPane().add(lblNewLabel); | |
JLabel lblWorstcaseReaction = new JLabel("WC Reaction"); | |
lblWorstcaseReaction.setHorizontalAlignment(SwingConstants.CENTER); | |
lblWorstcaseReaction.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblWorstcaseReaction.setBounds(10, 627, 90, 16); | |
frame.getContentPane().add(lblWorstcaseReaction); | |
JTextField txtField0 = new JTextField(); | |
txtField0.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField0.setBounds(103, 625, 200, 22); | |
txtField0.setEditable(false); | |
frame.getContentPane().add(txtField0); | |
JLabel lblBestcaseReaction = new JLabel("BC Reaction"); | |
lblBestcaseReaction.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblBestcaseReaction.setHorizontalAlignment(SwingConstants.CENTER); | |
lblBestcaseReaction.setBounds(10, 656, 90, 16); | |
frame.getContentPane().add(lblBestcaseReaction); | |
JTextField txtField1 = new JTextField(); | |
txtField1.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField1.setBounds(103, 654, 200, 22); | |
txtField1.setEditable(false); | |
frame.getContentPane().add(txtField1); | |
JLabel lblLetCommunicationParadigm = new JLabel("LET Communication Paradigm"); | |
lblLetCommunicationParadigm.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13)); | |
lblLetCommunicationParadigm.setBounds(10, 688, 193, 16); | |
frame.getContentPane().add(lblLetCommunicationParadigm); | |
JLabel lblWcReaction = new JLabel("WC Reaction"); | |
lblWcReaction.setHorizontalAlignment(SwingConstants.CENTER); | |
lblWcReaction.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblWcReaction.setBounds(10, 710, 90, 16); | |
frame.getContentPane().add(lblWcReaction); | |
JTextField txtField2 = new JTextField(); | |
txtField2.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField2.setBounds(103, 708, 200, 22); | |
txtField2.setEditable(false); | |
frame.getContentPane().add(txtField2); | |
JLabel lblBcReaction = new JLabel("BC Reaction"); | |
lblBcReaction.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblBcReaction.setHorizontalAlignment(SwingConstants.CENTER); | |
lblBcReaction.setBounds(10, 739, 90, 16); | |
frame.getContentPane().add(lblBcReaction); | |
JTextField txtField3 = new JTextField(); | |
txtField3.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField3.setBounds(103, 737, 200, 22); | |
txtField3.setEditable(false); | |
frame.getContentPane().add(txtField3); | |
JLabel lblTaskChain = new JLabel("Task Chain Age (Direct & Implicit)"); | |
lblTaskChain.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13)); | |
lblTaskChain.setBounds(338, 605, 222, 16); | |
frame.getContentPane().add(lblTaskChain); | |
JLabel lblWcAge = new JLabel("WC Age"); | |
lblWcAge.setHorizontalAlignment(SwingConstants.CENTER); | |
lblWcAge.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblWcAge.setBounds(350, 627, 58, 16); | |
frame.getContentPane().add(lblWcAge); | |
JTextField txtField4 = new JTextField(); | |
txtField4.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField4.setBounds(413, 625, 200, 22); | |
txtField4.setEditable(false); | |
frame.getContentPane().add(txtField4); | |
JLabel lblBcAge = new JLabel("BC Age"); | |
lblBcAge.setHorizontalAlignment(SwingConstants.CENTER); | |
lblBcAge.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblBcAge.setBounds(350, 656, 58, 16); | |
frame.getContentPane().add(lblBcAge); | |
JTextField txtField5 = new JTextField(); | |
txtField5.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField5.setBounds(413, 654, 200, 22); | |
txtField5.setEditable(false); | |
frame.getContentPane().add(txtField5); | |
JLabel lblEarlyReaction = new JLabel("Early Reaction (Direct & Implicit)"); | |
lblEarlyReaction.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13)); | |
lblEarlyReaction.setBounds(338, 688, 232, 16); | |
frame.getContentPane().add(lblEarlyReaction); | |
JLabel lblWcErct = new JLabel("WC E-Rct"); | |
lblWcErct.setHorizontalAlignment(SwingConstants.CENTER); | |
lblWcErct.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblWcErct.setBounds(338, 710, 70, 16); | |
frame.getContentPane().add(lblWcErct); | |
JTextField txtField6 = new JTextField(); | |
txtField6.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField6.setBounds(413, 708, 200, 22); | |
txtField6.setEditable(false); | |
frame.getContentPane().add(txtField6); | |
JLabel lblBcErct = new JLabel("BC E-Rct"); | |
lblBcErct.setHorizontalAlignment(SwingConstants.CENTER); | |
lblBcErct.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblBcErct.setBounds(338, 739, 70, 16); | |
frame.getContentPane().add(lblBcErct); | |
JTextField txtField7 = new JTextField(); | |
txtField7.setHorizontalAlignment(SwingConstants.RIGHT); | |
txtField7.setBounds(413, 737, 200, 22); | |
txtField7.setEditable(false); | |
frame.getContentPane().add(txtField7); | |
JLabel lblDataAge = new JLabel("Data Age"); | |
lblDataAge.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13)); | |
lblDataAge.setBounds(10, 771, 58, 16); | |
frame.getContentPane().add(lblDataAge); | |
JLabel lblContainedLabels = new JLabel("Contained Labels"); | |
lblContainedLabels.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblContainedLabels.setBounds(10, 791, 136, 16); | |
frame.getContentPane().add(lblContainedLabels); | |
list = new List(); | |
list.setBounds(10, 810, 155, 160); | |
frame.getContentPane().add(list); | |
JLabel lblWorstcaseAge = new JLabel("Worst-case Age"); | |
lblWorstcaseAge.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblWorstcaseAge.setBounds(177, 791, 136, 16); | |
frame.getContentPane().add(lblWorstcaseAge); | |
list_1 = new List(); | |
list_1.setBounds(177, 810, 155, 160); | |
frame.getContentPane().add(list_1); | |
JLabel lblBestcaseAge = new JLabel("Best-case Age"); | |
lblBestcaseAge.setFont(new Font("Sitka Small", Font.PLAIN, 13)); | |
lblBestcaseAge.setBounds(344, 791, 136, 16); | |
frame.getContentPane().add(lblBestcaseAge); | |
list_2 = new List(); | |
list_2.setBounds(344, 810, 155, 160); | |
frame.getContentPane().add(list_2); | |
JButton ecSelect = new JButton("Calculate"); | |
ecSelect.addActionListener(new ActionListener() { | |
public void actionPerformed(ActionEvent e) { | |
if (currentModel == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Select an AMALTHEA model first."); | |
return ; | |
} else if (currentECList == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Event-Chain List is empty somehow."); | |
return ; | |
} else if (currentECList.size() == 0) { | |
JOptionPane.showMessageDialog(frame, "ERROR: There is no Event-Chain in this model."); | |
return ; | |
} else if (ecComboBox.getSelectedItem() == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Select an Event-Chain."); | |
return ; | |
} else if (puTaskListHM == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: IA(Integer Array) has not been assigned."); | |
return ; | |
} else if (offloadingMode.getSelection() == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Choose an offloading mode. (Sync / Async)"); | |
return ; | |
} else if (schedulability_flag == false) { | |
String offMode = null; | |
if (SharedConsts.synchronousOffloading == true) { | |
offMode = "Sync"; | |
} else if (SharedConsts.synchronousOffloading == false) { | |
offMode = "Aync"; | |
} | |
String tType = null; | |
if (SharedConsts.timeType.equals(TimeType.WCET)) { | |
tType = "WC"; | |
} else if (SharedConsts.timeType.equals(TimeType.ACET)) { | |
tType = "AC"; | |
} else if (SharedConsts.timeType.equals(TimeType.BCET)) { | |
tType = "BC"; | |
} | |
String iaFeedback = ""; | |
for (int i = 0; i < currentIA.length; i++) { | |
if (i == currentIA.length - 1) { | |
iaFeedback = iaFeedback + currentIA[i]; | |
} else { | |
iaFeedback = iaFeedback + currentIA[i] + ", "; | |
} | |
} | |
JOptionPane.showMessageDialog(frame, "ERROR: The entered IA value is not schedulable with the current configuration.\n\n" | |
+ "Current Integer Arrary: { " + iaFeedback + " }\n\n" | |
+ "Current Configuration: Offloading Mode(" + offMode + "), ExecutionCase(" + tType + ")"); | |
return ; | |
} else if (paradigmMode.getSelection() == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Choose a communication paradigm. (Direct / Implicit)"); | |
return ; | |
} | |
final int thisIndex = ecComboBox.getSelectedIndex(); | |
/* Something was selected before */ | |
if (selectedECIndex != -1) { | |
/* If the selected Event-Chain is the same as before => Do Nothing */ | |
if (selectedECIndex == thisIndex) { | |
if (currentParadigm != null) { | |
ComParadigm changedParadigm = null; | |
if (rdbtnDirect.isSelected()) { | |
changedParadigm = ComParadigm.DIRECT; | |
} else if (rdbtnImplicit.isSelected()) { | |
changedParadigm = ComParadigm.IMPLICIT; | |
} | |
if (currentParadigm.equals(changedParadigm)) { | |
JOptionPane.showMessageDialog(frame, "Same Paradigm & Same Event-Chain."); | |
return ; | |
} | |
for (int i = 0; i < currentTaskChain.size(); i++) { | |
frame.remove(ecLabelArray[i]); | |
frame.remove(ecJTPArray[i]); | |
} | |
} | |
} | |
/* If the selected Event-Chain is different to the previous one => Remove and Do Normal. */ | |
else if (selectedECIndex != thisIndex) { | |
for (int i = 0; i < currentTaskChain.size(); i++) { | |
frame.remove(ecLabelArray[i]); | |
frame.remove(ecJTPArray[i]); | |
} | |
selectedECIndex = thisIndex; | |
} | |
} | |
selectedECIndex = thisIndex; | |
currentEC = currentECList.get(thisIndex); | |
currentTaskChain = e2e.getECTaskList(currentEC); | |
if (currentTaskChain.size() == 0 ) { | |
JOptionPane.showMessageDialog(frame, "ERROR: The selected Event-Chain has no chain-element."); | |
txtField0.setText("Not Available."); | |
txtField1.setText("Not Available."); | |
txtField2.setText("Not Available."); | |
txtField3.setText("Not Available."); | |
txtField4.setText("Not Available."); | |
txtField5.setText("Not Available."); | |
txtField6.setText("Not Available."); | |
txtField7.setText("Not Available."); | |
list.removeAll(); | |
list.add("Not Available."); | |
list_1.removeAll(); | |
list_1.add("Not Available."); | |
list_2.removeAll(); | |
list_2.add("Not Available."); | |
return ; | |
} | |
else if (currentTaskChain.size() > 14) { | |
JOptionPane.showMessageDialog(frame, "ERROR: The selected Event-Chain has more than " + currentTaskChain.size() + " elements. (Limit: 14)\n"); | |
txtField0.setText("Not Available."); | |
txtField1.setText("Not Available."); | |
txtField2.setText("Not Available."); | |
txtField3.setText("Not Available."); | |
txtField4.setText("Not Available."); | |
txtField5.setText("Not Available."); | |
txtField6.setText("Not Available."); | |
txtField7.setText("Not Available."); | |
list.removeAll(); | |
list.add("Not Available."); | |
list_1.removeAll(); | |
list_1.add("Not Available."); | |
list_2.removeAll(); | |
list_2.add("Not Available."); | |
return ; | |
} | |
for (int i = 0; i < currentTaskChain.size(); i++) { | |
final Task task = currentTaskChain.get(i); | |
for (int j = 0; j < puTaskListHM.size(); j++) { | |
java.util.List<Task> puTaskList = puTaskListHM.get(j); | |
if (puTaskList.stream().filter(s -> s.equals(task)).collect(Collectors.toList()).size() != 0) { | |
final ProcessingUnit pu = currentPUList.get(j); | |
ecLabelArray[i] = new JLabel((i+1) + ": " + pu.getName() + " (" + pu.getDefinition().getName() + ")"); | |
ecJTPArray[i] = new JTextField(); | |
ecJTPArray[i].setText(task.getName()); | |
ecJTPArray[i].setEditable(false); | |
if (i < 7) { | |
ecLabelArray[i].setBounds(750, (604+(50*i)), 187, 16); | |
ecJTPArray[i].setBounds(750, (624+(50*i)), 187, 22); | |
} else { | |
ecLabelArray[i].setBounds(950, (604+(50*(i-7))), 187, 16); | |
ecJTPArray[i].setBounds(950, (624+(50*(i-7))), 187, 22); | |
} | |
frame.getContentPane().add(ecLabelArray[i]); | |
frame.getContentPane().add(ecJTPArray[i]); | |
break; | |
} | |
} | |
} | |
/* Calculation Part */ | |
if (currentModel == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Select an AMALTHEA model first."); | |
return ; | |
} else if (ecComboBox.getSelectedItem() == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: Select an Event-Chain."); | |
return ; | |
} else if (currentIA == null) { | |
JOptionPane.showMessageDialog(frame, "ERROR: IA(Integer Array) has not been entered."); | |
return ; | |
} | |
if (list.getItemCount() > 0) { | |
list.removeAll(); | |
list_1.removeAll(); | |
list_2.removeAll(); | |
} | |
/* Sometimes the same task can not be schedulable in the implicit communication due to the LocalCopy cost time */ | |
Time rctWC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
Time rctBC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
Time ageWC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
Time ageBC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
Time eRctWC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
Time eRctBC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
/* PARADIGM */ | |
if (rdbtnDirect.isSelected()) { | |
currentParadigm = ComParadigm.DIRECT; | |
rctWC = e2e.getTCReactionWC(currentEC, currentParadigm, cpurta); | |
rctBC = e2e.getTCReactionBC(currentEC, currentParadigm, cpurta); | |
ageWC = e2e.getTaskChainAge(currentEC, TimeType.WCET, currentParadigm, cpurta); | |
ageBC = e2e.getTaskChainAge(currentEC, TimeType.BCET, currentParadigm, cpurta); | |
eRctWC = e2e.getEarlyReaction(currentEC, TimeType.WCET, currentParadigm, cpurta); | |
eRctBC = e2e.getEarlyReaction(currentEC, TimeType.BCET, currentParadigm, cpurta); | |
} else if (rdbtnImplicit.isSelected()) { | |
currentParadigm = ComParadigm.IMPLICIT; | |
rctWC = e2e.getTCReactionWC(currentEC, currentParadigm, cpurta); | |
rctBC = e2e.getTCReactionBC(currentEC, currentParadigm, cpurta); | |
ageWC = e2e.getTaskChainAge(currentEC, TimeType.WCET, currentParadigm, cpurta); | |
ageBC = e2e.getTaskChainAge(currentEC, TimeType.BCET, currentParadigm, cpurta); | |
eRctWC = e2e.getEarlyReaction(currentEC, TimeType.WCET, currentParadigm, cpurta); | |
eRctBC = e2e.getEarlyReaction(currentEC, TimeType.BCET, currentParadigm, cpurta); | |
} | |
if (rctWC.getValue().equals(BigInteger.ZERO)) { | |
txtField0.setText("Not Schedulable (LocalCopy Cost)"); | |
} else { | |
txtField0.setText("" + rctWC); | |
} | |
if (rctBC.getValue().equals(BigInteger.ZERO)) { | |
txtField1.setText("Not Schedulable (LocalCopy Cost)"); | |
} else { | |
txtField1.setText("" + rctBC); | |
} | |
txtField2.setText("" + e2e.getLetReactionWC(currentEC, cpurta)); | |
txtField3.setText("" + e2e.getLetReactionBC(currentEC, cpurta)); | |
txtField4.setText("" + ageWC); | |
txtField5.setText("" + ageBC); | |
if (eRctWC.getValue().equals(BigInteger.ZERO)) { | |
txtField6.setText("Not Schedulable (LocalCopy Cost)"); | |
} else { | |
txtField6.setText("" + eRctWC); | |
} | |
if (eRctBC.getValue().equals(BigInteger.ZERO)) { | |
txtField7.setText("Not Schedulable (LocalCopy Cost)"); | |
} else { | |
txtField7.setText("" + eRctBC); | |
} | |
final EList<Label> labelList = currentModel.getSwModel().getLabels(); | |
for (int i = 0; i < labelList.size(); i++) { | |
Time datAgeLatWC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
Time datAgeLatBC = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS); | |
datAgeLatWC = e2e.getDataAge(labelList.get(i), currentEC, TimeType.WCET, currentParadigm, cpurta); | |
datAgeLatBC = e2e.getDataAge(labelList.get(i), currentEC, TimeType.BCET, currentParadigm, cpurta); | |
if (datAgeLatWC != null && datAgeLatBC != null) { | |
list.add(labelList.get(i).getName()); | |
list_1.add(datAgeLatWC + ""); | |
list_2.add(datAgeLatBC + ""); | |
} | |
} | |
frame.revalidate(); | |
frame.repaint(); | |
} | |
}); | |
ecSelect.setBounds(356, 569, 90, 25); | |
frame.getContentPane().add(ecSelect); | |
JButton btnNewButton_1 = new JButton("Reset"); | |
btnNewButton_1.addActionListener(new ActionListener() { | |
public void actionPerformed(ActionEvent e) { | |
for (int i = 0; i < currentTaskChain.size(); i++) { | |
ecLabelArray[i].setText(null); | |
frame.remove(ecLabelArray[i]); | |
ecJTPArray[i].setText(null); | |
frame.remove(ecJTPArray[i]); | |
} | |
selectedECIndex = -1; | |
currentParadigm = null; | |
txtField0.setText(""); | |
txtField1.setText(""); | |
txtField2.setText(""); | |
txtField3.setText(""); | |
txtField4.setText(""); | |
txtField5.setText(""); | |
txtField6.setText(""); | |
txtField7.setText(""); | |
paradigmMode.setSelected(null, false); | |
list.removeAll(); | |
list_1.removeAll(); | |
list_2.removeAll(); | |
frame.revalidate(); | |
frame.repaint(); | |
} | |
}); | |
btnNewButton_1.setBounds(445, 569, 70, 25); | |
frame.getContentPane().add(btnNewButton_1); | |
JLabel lblTaskChain_1 = new JLabel("Task Chain >"); | |
lblTaskChain_1.setFont(new Font("Segoe UI Emoji", Font.BOLD, 13)); | |
lblTaskChain_1.setBounds(646, 605, 90, 16); | |
frame.getContentPane().add(lblTaskChain_1); | |
JLabel lblApprta = new JLabel("APP4RTA"); | |
lblApprta.setForeground(Color.DARK_GRAY); | |
lblApprta.setFont(new Font("Snap ITC", Font.ITALIC, 20)); | |
lblApprta.setBounds(1050, 1, 120, 34); | |
frame.getContentPane().add(lblApprta); | |
JSeparator separator = new JSeparator(); | |
separator.setBounds(10, 557, 1160, 2); | |
frame.getContentPane().add(separator); | |
} | |
} |