You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2006/05/08 00:04:13 UTC

svn commit: r404863 - /jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java

Author: sebb
Date: Sun May  7 15:04:12 2006
New Revision: 404863

URL: http://svn.apache.org/viewcvs?rev=404863&view=rev
Log:
Improved delay calculation. No need to synch delay.

Modified:
    jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java

Modified: jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java?rev=404863&r1=404862&r2=404863&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java Sun May  7 15:04:12 2006
@@ -33,7 +33,7 @@
  * 
  */
 public class ConstantThroughputTimer extends AbstractTestElement implements Timer, TestListener, TestBean {
-	private static final long serialVersionUID = 2;
+	private static final long serialVersionUID = 3;
 
 	private static final Logger log = LoggingManager.getLoggerForClass();
 
@@ -95,14 +95,20 @@
 	 * 
 	 * @see org.apache.jmeter.timers.Timer#delay()
 	 */
-	public synchronized long delay() {
+	public long delay() {
 		long currentTime = System.currentTimeMillis();
-		long currentTarget = previousTime == 0 ? currentTime : previousTime;
-		previousTime = currentTarget + calculateDelay();
+
+        /* 
+         * If previous time is zero, then target will be in the past.
+         * This is what we want, so first sample is run without a delay.
+        */
+        long currentTarget = previousTime  + calculateDelay();
 		if (currentTime > currentTarget) {
 			// We're behind schedule -- try to catch up:
+            previousTime = currentTime;
 			return 0;
 		}
+        previousTime = currentTarget;
 		return currentTarget - currentTime;
 	}
 
@@ -110,6 +116,7 @@
 	 * @param currentTime
 	 * @return new Target time
 	 */
+    // TODO - is this used?
 	protected long calculateCurrentTarget(long currentTime) {
 		return currentTime + calculateDelay();
 	}
@@ -117,14 +124,11 @@
 	// Calculate the delay based on the mode
 	private long calculateDelay() {
 		long offset = 0;
+        // N.B. we fetch the throughput each time, as it may vary during a test
 		long rate = (long) (MILLISEC_PER_MIN / getThroughput());
 		switch (modeInt) {
 		case 1: // Total number of threads
-			offset = (
-			// previousTime == 0 ? //TODO - why is this needed?
-					// (JMeterContextService.getContext().getThreadNum() + 1)
-					// :
-					JMeterContextService.getNumberOfThreads()) * rate;
+			offset = JMeterContextService.getNumberOfThreads() * rate;
 			break;
 		case 2: // Active threads in this group
 			offset = JMeterContextService.getContext().getThread().getThreadGroup().getNumberOfThreads() * rate;



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org