mstover1    2004/12/13 16:37:13

  Modified:    src/core/org/apache/jmeter/threads JMeterContextService.java
               src/components/org/apache/jmeter/timers
                        ConstantThroughputTimer.java
                        ConstantThroughputTimerResources.properties
                        ConstantThroughputTimerResources_ja.properties
                        ConstantThroughputTimerBeanInfo.java
  Log:
  Synchronizing thread count access in ContextService
  Adding a legacy option to the ConstantThroughput Timer.
  
  Revision  Changes    Path
  1.10      +5 -5      
jakarta-jmeter/src/core/org/apache/jmeter/threads/JMeterContextService.java
  
  Index: JMeterContextService.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/threads/JMeterContextService.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- JMeterContextService.java 13 Dec 2004 21:43:00 -0000      1.9
  +++ JMeterContextService.java 14 Dec 2004 00:37:13 -0000      1.10
  @@ -63,17 +63,17 @@
          }
       }
       
  -    static public void incrNumberOfThreads()
  +    static synchronized void incrNumberOfThreads()
       {
          numberOfThreads++;
       }
       
  -    static public void decrNumberOfThreads()
  +    static synchronized void decrNumberOfThreads()
       {
          numberOfThreads--;
       }
       
  -    static public int getNumberOfThreads()
  +    static public synchronized int getNumberOfThreads()
       {
          return numberOfThreads;
       }
  
  
  
  1.20      +41 -6     
jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java
  
  Index: ConstantThroughputTimer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- ConstantThroughputTimer.java      13 Dec 2004 21:43:00 -0000      1.19
  +++ ConstantThroughputTimer.java      14 Dec 2004 00:37:13 -0000      1.20
  @@ -35,7 +35,7 @@
   public class ConstantThroughputTimer extends AbstractTestElement implements 
Timer, TestListener,
         TestBean
   {
  -
  +    private static final long serialVersionUID = 1;
      private static final Logger log = LoggingManager.getLoggerForClass();
   
      /**
  @@ -43,7 +43,23 @@
       * timer will be calculated so that the next request happens at this time.
       */
      private long previousTime = 0;
  +   
  +   private boolean legacyMode = true;
   
  +/**
  + * @return Returns the legacyMode.
  + */
  +public boolean isLegacyMode()
  +{
  +    return legacyMode;
  +}
  +/**
  + * @param legacyMode The legacyMode to set.
  + */
  +public void setLegacyMode(boolean legacyMode)
  +{
  +    this.legacyMode = legacyMode;
  +}
      /**
       * Desired throughput, in samples per minute.
       */
  @@ -85,11 +101,7 @@
      public synchronized long delay()
      {
         long currentTime = System.currentTimeMillis();
  -      long currentTarget = 
  -            (previousTime == 0) ? currentTime
  -            + ((JMeterContextService.getContext().getThreadNum() + 1) * 
(long) (60000.0 / getThroughput()))
  -            : previousTime
  -                  + (JMeterContextService.getNumberOfThreads() * (long) 
(60000.0 / getThroughput()));
  +      long currentTarget = calculateCurrentTarget(currentTime);
         previousTime = currentTarget;
         if (currentTime > currentTarget)
         {
  @@ -100,6 +112,29 @@
      }
   
      /**
  + * @param currentTime
  + * @return
  + */
  +protected long calculateCurrentTarget(long currentTime)
  +{
  +    long currentTarget = currentTime;
  +    if(previousTime == 0)
  +    {
  +        currentTarget = currentTime + (
  +                     (legacyMode) ? (long) (60000.0 / getThroughput()) :
  +                         (JMeterContextService.getContext().getThreadNum() + 
1) * (long) (60000.0 / getThroughput())
  +                     );
  +    }
  +    else
  +    {
  +        currentTarget = currentTime + (
  +                     (legacyMode) ? (long) (60000.0 / getThroughput()) :
  +                         (JMeterContextService.getNumberOfThreads()) * 
(long) (60000.0 / getThroughput())
  +                     );
  +    }
  +    return currentTarget;
  +}
  +/**
       * Provide a description of this timer class.
       * 
       * TODO: Is this ever used? I can't remember where. Remove if it isn't --
  
  
  
  1.3       +2 -0      
jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimerResources.properties
  
  Index: ConstantThroughputTimerResources.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimerResources.properties,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ConstantThroughputTimerResources.properties       16 Jan 2004 02:56:09 
-0000      1.2
  +++ ConstantThroughputTimerResources.properties       14 Dec 2004 00:37:13 
-0000      1.3
  @@ -2,3 +2,5 @@
   delay.displayName=Delay before each affected sampler
   throughput.displayName=Target throughput (in samples per minute)
   throughput.shortDescription=Maximum number of samples you want to obtain per 
minute, per thread, from all affected samplers.
  +legacyMode.displayName=Legacy Mode
  +legacyMode.shortDescription=The Constant Throughput Timer used to delay each 
thread as though it was the only thread in the test.  Now, it calculates the 
delay taking into account the number of threads in the test.
  \ No newline at end of file
  
  
  
  1.3       +2 -0      
jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimerResources_ja.properties
  
  Index: ConstantThroughputTimerResources_ja.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimerResources_ja.properties,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ConstantThroughputTimerResources_ja.properties    20 Jan 2004 01:27:30 
-0000      1.2
  +++ ConstantThroughputTimerResources_ja.properties    14 Dec 2004 00:37:13 
-0000      1.3
  @@ -1,3 +1,5 @@
   #Stored by I18NEdit, may be edited!
   
displayName=\u5B9A\u6570\u30B9\u30EB\u30FC\u30D7\u30C3\u30C8\u30BF\u30A4\u30DE
   
throughput.displayName=\u30BF\u30FC\u30B2\u30C3\u30C8\u30B9\u30EB\u30FC\u30D7\u30C3\u30C8(\u30B5\u30F3\u30D7\u30EB\u6570/\u30DF\u30EA\u79D2)
  +legacyMode.displayName=Legacy Mode
  +legacyMode.shortDescription=The Constant Throughput Timer used to delay each 
thread as though it was the only thread in the test.  Now, it calculates the 
delay taking into account the number of threads in the test.
  
  
  
  1.6       +9 -3      
jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimerBeanInfo.java
  
  Index: ConstantThroughputTimerBeanInfo.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/timers/ConstantThroughputTimerBeanInfo.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ConstantThroughputTimerBeanInfo.java      11 Mar 2004 01:21:03 -0000      
1.5
  +++ ConstantThroughputTimerBeanInfo.java      14 Dec 2004 00:37:13 -0000      
1.6
  @@ -33,10 +33,16 @@
       {
           super(ConstantThroughputTimer.class);
           
  -        createPropertyGroup("delay", new String[] { "throughput" });
  +        createPropertyGroup("delay", new String[] { "throughput", 
"legacyMode" });
   
           PropertyDescriptor p= property("throughput");
           p.setValue(NOT_UNDEFINED, Boolean.TRUE);
           p.setValue(DEFAULT, new Double(0.0));
  +        
  +        p = property("legacyMode");
  +        p.setValue(NOT_UNDEFINED,Boolean.TRUE);
  +        p.setValue(DEFAULT, Boolean.FALSE);
  +        p.setValue(NOT_OTHER,Boolean.TRUE);
  +        p.setValue(NOT_EXPRESSION,Boolean.TRUE);
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to