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