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 ms...@apache.org on 2002/08/24 06:27:44 UTC

cvs commit: jakarta-jmeter/src/core/org/apache/jmeter/threads ListenerNotifier.java JMeterThread.java

mstover1    2002/08/23 21:27:44

  Modified:    src/core/org/apache/jmeter/engine StandardJMeterEngine.java
               src/core/org/apache/jmeter/threads JMeterThread.java
  Added:       src/core/org/apache/jmeter/threads ListenerNotifier.java
  Log:
  Making SampleListener notification into single threaded model, so no need to synchronize in visualizer methods.
  
  Revision  Changes    Path
  1.5       +8 -3      jakarta-jmeter/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
  
  Index: StandardJMeterEngine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- StandardJMeterEngine.java	23 Aug 2002 22:51:44 -0000	1.4
  +++ StandardJMeterEngine.java	24 Aug 2002 04:27:43 -0000	1.5
  @@ -68,6 +68,7 @@
   import org.apache.jmeter.testelement.TestPlan;
   import org.apache.jmeter.threads.JMeterThread;
   import org.apache.jmeter.threads.JMeterThreadMonitor;
  +import org.apache.jmeter.threads.ListenerNotifier;
   import org.apache.jmeter.threads.TestCompiler;
   import org.apache.jmeter.threads.ThreadGroup;
   import org.apache.jmeter.util.ListedHashTree;
  @@ -91,6 +92,7 @@
   	ListedHashTree test;
   	SearchByClass testListeners;
   	String host = null;
  +	ListenerNotifier notifier;
   
   	/************************************************************
   	 *  !ToDo (Constructor description)
  @@ -154,6 +156,8 @@
   			{
   				notifyTestListenersOfStart();
   			}
  +			notifier = new ListenerNotifier();
  +			notifier.start();
   			while(iter.hasNext())
   			{
   				ThreadGroup group = (ThreadGroup)iter.next();
  @@ -162,7 +166,7 @@
   				{
   					ListedHashTree threadGroupTree = searcher.getSubTree(group);
   					threadGroupTree.add(group,testLevelElements);
  -					threads[i] = new JMeterThread(cloneTree(threadGroupTree),this);
  +					threads[i] = new JMeterThread(cloneTree(threadGroupTree),this,notifier);
   					threads[i].setInitialDelay((int)(((float)(group.getRampUp() * 1000) /
   							(float)group.getNumThreads()) * (float)i));
   					threads[i].setThreadName(group.getName()+"-"+(i+1));
  @@ -227,6 +231,7 @@
   
   	protected void notifyTestListenersOfEnd()
   	{
  +		notifier.stop();
   		Iterator iter = testListeners.getSearchResults().iterator();
   		while(iter.hasNext())
   		{
  
  
  
  1.4       +6 -9      jakarta-jmeter/src/core/org/apache/jmeter/threads/JMeterThread.java
  
  Index: JMeterThread.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/threads/JMeterThread.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JMeterThread.java	23 Aug 2002 22:51:45 -0000	1.3
  +++ JMeterThread.java	24 Aug 2002 04:27:44 -0000	1.4
  @@ -94,12 +94,13 @@
   	String threadName;
   	JMeterVariables threadVars;
   	Collection threadListeners;
  +	ListenerNotifier notifier;
   	
   	/****************************************
   	 * !ToDo (Constructor description)
   	 ***************************************/
   	public JMeterThread() {}
  -	public JMeterThread(ListedHashTree test, JMeterThreadMonitor monitor) {
  +	public JMeterThread(ListedHashTree test, JMeterThreadMonitor monitor,ListenerNotifier note) {
   		this.monitor = monitor;
   		threadVars = new JMeterVariables();
   		testTree = test;
  @@ -108,6 +109,7 @@
   		SearchByClass threadListenerSearcher = new SearchByClass(ThreadListener.class);
   		test.traverse(threadListenerSearcher);
   		threadListeners = threadListenerSearcher.getSearchResults();
  +		notifier = note;
   	}
   
   	public void setThreadName(String threadName)
  @@ -209,12 +211,7 @@
   	private void notifyListeners(List listeners, SampleResult result) {
   		SampleEvent event =
   			new SampleEvent(result, (String) controller.getProperty(TestElement.NAME));
  -		Iterator iter = listeners.iterator();
  -		while (iter.hasNext()) {
  -			SampleListener lis = (SampleListener)iter.next();
  -			SampleListener item = lis;
  -			item.sampleOccurred(event);
  -		}
  +		notifier.addLast(event,listeners);
   	}
   	public void setInitialDelay(int delay) {
   		initialDelay = delay;
  
  
  
  1.1                  jakarta-jmeter/src/core/org/apache/jmeter/threads/ListenerNotifier.java
  
  Index: ListenerNotifier.java
  ===================================================================
  package org.apache.jmeter.threads;
  import java.util.Iterator;
  import java.util.LinkedList;
  import java.util.List;
  
  import org.apache.jmeter.samplers.SampleEvent;
  import org.apache.jmeter.samplers.SampleListener;
  /**
   * @author Administrator
   *
   * To change this generated comment edit the template variable "typecomment":
   * Window>Preferences>Java>Templates.
   */
  public class ListenerNotifier extends LinkedList implements Runnable
  {
  	/**
  	 * @see java.lang.Runnable#run()
  	 */
  	boolean running;
  	boolean isStopped;
  	
  	public ListenerNotifier()
  	{
  		super();
  		running = true;
  		isStopped = true;
  	}
  	
  	public void run()
  	{
  		Iterator iter;
  		while(running || this.size() > 0)
  		{
  			SampleEvent res = (SampleEvent)this.removeFirst();
  			if(res != null)
  			{
  				List listeners = (List)this.removeFirst();
  				iter = listeners.iterator();
  				while(iter.hasNext())
  				{
  					((SampleListener)iter.next()).sampleOccurred(res);
  				}
  			}
  			Thread.yield();
  		}
  		isStopped = true;
  	}
  	
  	public boolean isStopped()
  	{
  		return isStopped;
  	}
  	
  	public synchronized void addLast(SampleEvent item,List listeners)
  	{
  		super.addLast(item);
  		super.addLast(listeners);
  	}
  	
  	public synchronized Object removeFirst()
  	{
  		try
  		{
  			return super.removeFirst();
  		}
  		catch (RuntimeException e)
  		{
  			return null;
  		}
  	}
  	
  	public void stop()
  	{
  		running = false;
  	}
  	
  	public void start()
  	{
  		Thread noteThread = new Thread(this);
  		noteThread.start();
  		isStopped = false;
  	}
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>