summaryrefslogtreecommitdiff
path: root/sources/simulator/VSSimulationPanel.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/simulator/VSSimulationPanel.java')
-rw-r--r--sources/simulator/VSSimulationPanel.java72
1 files changed, 54 insertions, 18 deletions
diff --git a/sources/simulator/VSSimulationPanel.java b/sources/simulator/VSSimulationPanel.java
index f0d3d75..89fd0ad 100644
--- a/sources/simulator/VSSimulationPanel.java
+++ b/sources/simulator/VSSimulationPanel.java
@@ -26,6 +26,7 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
private volatile boolean isFinished = false;
private volatile boolean isResetted = false;
private volatile boolean showLamport = false;
+ private volatile boolean showVectorTime = false;
private volatile long pauseTime;
private volatile long startTime;
private volatile long time;
@@ -39,9 +40,10 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
private static final int SEPLINE_WIDTH = 2;
private static final int XOFFSET = 50;
private static final int YOFFSET = 30;
- private static final int YOUTER_SPACEING = 10;
+ private static final int YOUTER_SPACEING = 15;
private static final int YSEPLINE_SPACEING = 20;
private static final int TEXT_SPACEING = 10;
+ private static final int ROW_HEIGHT = 14;
/* Constats, which have to get calculated once after start */
private Color processlineColor;
@@ -226,7 +228,7 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
}
public VSProcess createProcess(int i) {
- VSProcess process = new VSProcess(prefs, this, logging, i+1);
+ VSProcess process = new VSProcess(prefs, this, logging);
processes.add(process);
logging.logg(prefs.getString("lang.process.new") + "; " + process);
@@ -293,24 +295,52 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
g.drawLine(xPos, yStart, xPos, yEnd);
g.drawString(localTime+"ms", xPos + 2, yStart + TEXT_SPACEING);
- if (showLamport) {
- int last = -1;
- final int distance = 20;
- final VSLamport[] lamportStamps = process.getLamportArray();
- for (VSLamport lamport : lamportStamps) {
- int xPos_ = (int) getTimeXPosition(lamport.getTime());
- if (last >= 0) {
- int diff = xPos_ - last;
- if (diff < distance)
- xPos_ += distance - diff;
+ if (showLamport)
+ paintTime(g, process.getLamportTimeArray(), process, yStart, 25);
+ else if (showVectorTime)
+ paintTime(g, process.getVectorTimeArray(), process, yStart, 20 * numProcesses);
+
+ for (int i = 0; i < 5; ++i)
+ yPoints[i] += paintProcessesOffset;
+ }
+ }
+
+ private void paintTime(final Graphics2D g, final VSTime times[], final VSProcess process,
+ final int yStart, final int distance) {
+
+ final int lastPos[] = { -1, -1, -1, -1 };
+
+ for (VSTime time : times) {
+ int xPos = (int) getTimeXPosition(time.getGlobalTime());
+ int bestRow[] = { -1, -1 };
+
+ for (int i = 0; i < 4; ++i) {
+ if (lastPos[i] != -1) {
+ int diff = xPos - lastPos[i];
+ if (diff > distance) {
+ bestRow[0] = i;
+ bestRow[1] = -1;
+ break;
+ } else if (bestRow[0] == -1) {
+ bestRow[0] = i;
+ bestRow[1] = diff;
+ } else if (diff > bestRow[1]) {
+ bestRow[0] = i;
+ bestRow[1] = diff;
}
- g.drawString(""+lamport.getLamportTime(), xPos_ + 2, yStart + 3 * TEXT_SPACEING);
- last = xPos_;
+ } else {
+ bestRow[0] = i;
+ bestRow[1] = -1;
+ break;
}
}
- for (int i = 0; i < 5; ++i)
- yPoints[i] += paintProcessesOffset;
+ final int row = bestRow[0];
+ if (bestRow[1] != -1)
+ xPos += distance - bestRow[1];
+
+ g.drawString(time.toString(), xPos + 2, yStart + 3 * TEXT_SPACEING + row * ROW_HEIGHT);
+ lastPos[row] = xPos;
}
}
@@ -324,7 +354,8 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
final int xStringPos = paintSecondlinesLine[0] - 5;
g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos1);
- g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos2);
+ if (!showVectorTime && !showLamport)
+ g.drawString(i+"s", xStringPos, paintSecondlinesYStringPos2);
}
if (i > paintSecondlinesSeconds) {
@@ -529,6 +560,11 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
repaint();
}
+ public void showVectorTime(boolean showVectorTime) {
+ this.showVectorTime = showVectorTime;
+ repaint();
+ }
+
public void sendMessage(VSMessage message) {
VSTask task = null;
VSProcess sendingProcess = message.getSendingProcess();
@@ -554,7 +590,7 @@ public class VSSimulationPanel extends JPanel implements Runnable, MouseMotionLi
synchronized (messageLines) {
messageLines.add(new VSMessageLine(receiverProcess,
sendingProcess.getGlobalTime(), deliverTime, outageTime,
- sendingProcess.getNum(), receiverProcess.getNum()));
+ sendingProcess.getProcessID(), receiverProcess.getProcessID()));
}
}
}