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>