From 21302b696a5d809e435ac845554f56dc8ca214ec Mon Sep 17 00:00:00 2001
From: Christian Wulf <chw@informatik.uni-kiel.de>
Date: Tue, 4 Nov 2014 06:21:51 +0100
Subject: [PATCH] reduced visibility of PerformanceChecks; fixed bug in
 performance test

---
 .../java/teetime/framework/AbstractStage.java |  4 ++--
 .../framework/signal/StartingSignal.java      | 20 ++++++++++++++++++-
 .../framework/signal/TerminatingSignal.java   | 20 ++++++++++++++++++-
 src/main/java/teetime/stage/Cache.java        |  3 +--
 .../java/teetime/stage/CollectorSink.java     |  4 ++--
 .../stage/ElementDelayMeasuringStage.java     |  4 ++--
 .../ElementThroughputMeasuringStage.java      |  4 ++--
 src/main/java/teetime/stage/Relay.java        |  4 ++--
 src/main/java/teetime/stage/basic/Delay.java  |  4 ++--
 .../stage/basic/distributor/Distributor.java  |  9 ---------
 .../teetime/stage/basic/merger/Merger.java    |  4 ++--
 src/main/java/teetime/stage/io/Printer.java   |  4 ++--
 .../stringBuffer/StringBufferFilter.java      |  6 +++---
 .../ChwHomeComparisonMethodcallWithPorts.java |  8 ++++++--
 .../experiment01/ChwHomePerformanceCheck.java |  2 +-
 .../experiment01/ChwWorkPerformanceCheck.java |  2 +-
 .../experiment09/ChwHomePerformanceCheck.java |  2 +-
 .../experiment09/ChwWorkPerformanceCheck.java |  2 +-
 ...odCallThoughputTimestampAnalysis9Test.java |  2 --
 .../experiment10/ChwHomePerformanceCheck.java |  8 ++++----
 .../experiment10/ChwWorkPerformanceCheck.java |  2 +-
 .../experiment11/ChwHomePerformanceCheck.java |  2 +-
 .../experiment11/ChwWorkPerformanceCheck.java |  2 +-
 .../experiment14/ChwHomePerformanceCheck.java |  2 +-
 .../experiment14/ChwWorkPerformanceCheck.java |  2 +-
 .../experiment16/ChwHomePerformanceCheck.java |  2 +-
 .../experiment16/ChwWorkPerformanceCheck.java |  2 +-
 .../teetime/examples/loopStage/Countdown.java |  4 ++--
 28 files changed, 81 insertions(+), 53 deletions(-)

diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index 33be2f0c..63ef5546 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -117,14 +117,14 @@ public abstract class AbstractStage implements Stage {
 		this.validateOutputPorts(invalidPortConnections);
 	}
 
-	public void onStarting() {
+	public void onStarting() throws Exception {
 		this.cachedInputPorts = this.inputPortList.toArray(new InputPort<?>[0]);
 		this.cachedOutputPorts = this.outputPortList.toArray(new OutputPort<?>[0]);
 
 		this.connectUnconnectedOutputPorts();
 	}
 
-	public void onTerminating() {
+	public void onTerminating() throws Exception {
 		// empty default implementation
 	}
 
diff --git a/src/main/java/teetime/framework/signal/StartingSignal.java b/src/main/java/teetime/framework/signal/StartingSignal.java
index d1b7aa54..77637f97 100644
--- a/src/main/java/teetime/framework/signal/StartingSignal.java
+++ b/src/main/java/teetime/framework/signal/StartingSignal.java
@@ -1,12 +1,30 @@
 package teetime.framework.signal;
 
+import java.util.LinkedList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import teetime.framework.AbstractStage;
 
 public class StartingSignal implements ISignal {
 
+	private static final Logger LOGGER = LoggerFactory.getLogger(StartingSignal.class);
+	private final List<Exception> catchedExceptions = new LinkedList<Exception>();
+
 	@Override
 	public void trigger(final AbstractStage stage) {
-		stage.onStarting();
+		try {
+			stage.onStarting();
+		} catch (Exception e) {
+			catchedExceptions.add(e);
+			LOGGER.error("Exception while sending the start signal", e);
+		}
+	}
+
+	public List<Exception> getCatchedExceptions() {
+		return catchedExceptions;
 	}
 
 }
diff --git a/src/main/java/teetime/framework/signal/TerminatingSignal.java b/src/main/java/teetime/framework/signal/TerminatingSignal.java
index 0aba57ba..081adccd 100644
--- a/src/main/java/teetime/framework/signal/TerminatingSignal.java
+++ b/src/main/java/teetime/framework/signal/TerminatingSignal.java
@@ -1,12 +1,30 @@
 package teetime.framework.signal;
 
+import java.util.LinkedList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import teetime.framework.AbstractStage;
 
 public class TerminatingSignal implements ISignal {
 
+	private static final Logger LOGGER = LoggerFactory.getLogger(TerminatingSignal.class);
+	private final List<Exception> catchedExceptions = new LinkedList<Exception>();
+
 	@Override
 	public void trigger(final AbstractStage stage) {
-		stage.onTerminating();
+		try {
+			stage.onTerminating();
+		} catch (Exception e) {
+			catchedExceptions.add(e);
+			LOGGER.error("Exception while sending the start signal", e);
+		}
+	}
+
+	public List<Exception> getCatchedExceptions() {
+		return catchedExceptions;
 	}
 
 }
diff --git a/src/main/java/teetime/stage/Cache.java b/src/main/java/teetime/stage/Cache.java
index 07b7d289..6fb6f4b7 100644
--- a/src/main/java/teetime/stage/Cache.java
+++ b/src/main/java/teetime/stage/Cache.java
@@ -20,8 +20,7 @@ public class Cache<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		this.logger.debug("Emitting " + this.cachedObjects.size() + " cached elements...");
 		StopWatch stopWatch = new StopWatch();
 		stopWatch.start();
diff --git a/src/main/java/teetime/stage/CollectorSink.java b/src/main/java/teetime/stage/CollectorSink.java
index f3b3875d..39a2c8f8 100644
--- a/src/main/java/teetime/stage/CollectorSink.java
+++ b/src/main/java/teetime/stage/CollectorSink.java
@@ -45,9 +45,9 @@ public class CollectorSink<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		System.out.println("size: " + this.elements.size());
+		super.onTerminating();
 	}
 
 	@Override
diff --git a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
index 452f75e3..2f963dbe 100644
--- a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
+++ b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
@@ -29,9 +29,9 @@ public class ElementDelayMeasuringStage<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.resetTimestamp(System.nanoTime());
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.resetTimestamp(System.nanoTime());
 	}
 
 	private void computeElementDelay(final Long timestampInNs) {
diff --git a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
index ea36801a..ed4626c5 100644
--- a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
+++ b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
@@ -30,9 +30,9 @@ public class ElementThroughputMeasuringStage<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.resetTimestamp(System.nanoTime());
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.resetTimestamp(System.nanoTime());
 	}
 
 	private void computeElementThroughput(final Long timestampInNs) {
diff --git a/src/main/java/teetime/stage/Relay.java b/src/main/java/teetime/stage/Relay.java
index 144b34ea..b5c82fae 100644
--- a/src/main/java/teetime/stage/Relay.java
+++ b/src/main/java/teetime/stage/Relay.java
@@ -25,9 +25,9 @@ public class Relay<T> extends ProducerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.cachedCastedInputPipe = (InterThreadPipe) this.inputPort.getPipe();
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.cachedCastedInputPipe = (InterThreadPipe) this.inputPort.getPipe();
 	}
 
 	public InputPort<T> getInputPort() {
diff --git a/src/main/java/teetime/stage/basic/Delay.java b/src/main/java/teetime/stage/basic/Delay.java
index 6c0ecac5..4682ba64 100644
--- a/src/main/java/teetime/stage/basic/Delay.java
+++ b/src/main/java/teetime/stage/basic/Delay.java
@@ -34,11 +34,11 @@ public class Delay<T> extends AbstractStage {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		while (!this.inputPort.getPipe().isEmpty()) {
 			this.executeWithPorts();
 		}
+		super.onTerminating();
 	}
 
 	public InputPort<T> getInputPort() {
diff --git a/src/main/java/teetime/stage/basic/distributor/Distributor.java b/src/main/java/teetime/stage/basic/distributor/Distributor.java
index b80c8e5e..3e4b59bd 100644
--- a/src/main/java/teetime/stage/basic/distributor/Distributor.java
+++ b/src/main/java/teetime/stage/basic/distributor/Distributor.java
@@ -37,15 +37,6 @@ public class Distributor<T> extends ConsumerStage<T> {
 		this.strategy.distribute((OutputPort<T>[]) this.getOutputPorts(), element);
 	}
 
-	@Override
-	public void onTerminating() {
-		super.onTerminating();
-		// for (OutputPort<T> op : this.outputPortList) {
-		// op.getPipe().close();
-		// System.out.println("End signal sent, size: " + op.getPipe().size());
-		// }
-	}
-
 	public OutputPort<T> getNewOutputPort() {
 		return this.createOutputPort();
 	}
diff --git a/src/main/java/teetime/stage/basic/merger/Merger.java b/src/main/java/teetime/stage/basic/merger/Merger.java
index 870b22b9..6afda057 100644
--- a/src/main/java/teetime/stage/basic/merger/Merger.java
+++ b/src/main/java/teetime/stage/basic/merger/Merger.java
@@ -62,9 +62,9 @@ public class Merger<T> extends AbstractStage {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		this.finishedInputPorts++;
+		super.onTerminating();
 	}
 
 	public IMergerStrategy<T> getStrategy() {
diff --git a/src/main/java/teetime/stage/io/Printer.java b/src/main/java/teetime/stage/io/Printer.java
index 40ee69ee..21936fbc 100644
--- a/src/main/java/teetime/stage/io/Printer.java
+++ b/src/main/java/teetime/stage/io/Printer.java
@@ -86,13 +86,13 @@ public class Printer<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws Exception {
 		super.onStarting();
 		this.initializeStream();
 	}
 
 	@Override
-	public void onTerminating() {
+	public void onTerminating() throws Exception {
 		this.closeStream();
 		super.onTerminating();
 	}
diff --git a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
index 2cefc39d..6e2d9ac4 100644
--- a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
+++ b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
@@ -25,7 +25,7 @@ import teetime.stage.stringBuffer.util.KiekerHashMap;
 
 /**
  * @author Christian Wulf
- * 
+ *
  * @since 1.10
  */
 public class StringBufferFilter<T> extends ConsumerStage<T> {
@@ -44,12 +44,12 @@ public class StringBufferFilter<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws Exception {
+		super.onStarting();
 		for (final AbstractDataTypeHandler<?> handler : this.dataTypeHandlers) {
 			handler.setLogger(this.logger);
 			handler.setStringRepository(this.kiekerHashMap);
 		}
-		super.onStarting();
 	}
 
 	private T handle(final T object) {
diff --git a/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java b/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java
index afd8226e..a0ea8537 100644
--- a/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java
+++ b/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java
@@ -65,8 +65,12 @@ public class ChwHomeComparisonMethodcallWithPorts extends ProfiledPerformanceAss
 		// assertEquals(53, value17, 4.1); // +0
 
 		// since 31.08.2014 (incl.)
-		assertEquals(68, value15, 4.1); // ??
-		assertEquals(75, value17, 4.1); // ??
+		// assertEquals(68, value15, 4.1); // +24
+		// assertEquals(75, value17, 4.1); // +22
+
+		// since 04.11.2014 (incl.)
+		assertEquals(38, value15, 4.1); // -30
+		assertEquals(78, value17, 4.1); // +3
 
 		// below results vary too much, possibly due to the OS' scheduler
 		// assertEquals(RESULT_TESTS_16, (double) test16a.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
diff --git a/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java
index 9c9321d3..3493118d 100644
--- a/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java
index 0f7c9f19..07bdf509 100644
--- a/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java
index 248925bd..cb92c4d7 100644
--- a/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment09;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
+class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java
index 1f5e65eb..ba4eda09 100644
--- a/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment09;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
+class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java b/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
index 4267330d..2fe74dff 100644
--- a/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
+++ b/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
@@ -19,8 +19,6 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import teetime.examples.experiment10.ChwHomePerformanceCheck;
-import teetime.examples.experiment10.ChwWorkPerformanceCheck;
 import teetime.util.ConstructorClosure;
 import teetime.util.TimestampObject;
 import util.test.PerformanceTest;
diff --git a/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java
index 925ab5bb..cb1f74aa 100644
--- a/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment10;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
+class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
@@ -13,9 +13,9 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 	public void check() {
 		super.check();
 
-		double meanSpeedup = (double) test10.quantiles.get(0.5) / test01.quantiles.get(0.5);
+		double medianSpeedup = (double) test10.quantiles.get(0.5) / test01.quantiles.get(0.5);
 
-		System.out.println("meanSpeedup (10): " + meanSpeedup);
+		System.out.println("meanSpeedup (10): " + medianSpeedup);
 
 		// since 26.06.2014 (incl.)
 		// assertEquals(26, value10, 2.1); // +14
@@ -24,6 +24,6 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 		// since 11.08.2014 (incl.)
 		// assertEquals(47, value10, 2.1); // +21
 		// since 31.08.2014 (incl.)
-		assertEquals(51, meanSpeedup, 2.1);
+		assertEquals(51, medianSpeedup, 2.2);
 	}
 }
diff --git a/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java
index 2845935e..bbb49ded 100644
--- a/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment10;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
+class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java
index 6b5d256d..99f8fc66 100644
--- a/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java
index 65049146..8dcfd608 100644
--- a/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java
index 5b34a6d4..9ca9528b 100644
--- a/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment14;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
+class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java
index eeea568d..b8ce7c10 100644
--- a/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment14;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
+class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java
index 29a27cf7..0aacc0b2 100644
--- a/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java
index 8aeae42d..6a61017a 100644
--- a/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public void check() {
diff --git a/src/performancetest/java/teetime/examples/loopStage/Countdown.java b/src/performancetest/java/teetime/examples/loopStage/Countdown.java
index f70e3eb6..adbbeff6 100644
--- a/src/performancetest/java/teetime/examples/loopStage/Countdown.java
+++ b/src/performancetest/java/teetime/examples/loopStage/Countdown.java
@@ -17,9 +17,9 @@ public class Countdown extends ProducerStage<Void> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.countdownInputPort.getPipe().add(this.initialCountdown);
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.countdownInputPort.getPipe().add(this.initialCountdown);
 	}
 
 	@Override
-- 
GitLab