You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2011/11/24 22:18:24 UTC
svn commit: r1205982 - in
/jmeter/trunk/src/components/org/apache/jmeter/timers: SyncTimer.java
SyncTimer.java.tmp
Author: pmouawad
Date: Thu Nov 24 21:18:24 2011
New Revision: 1205982
URL: http://svn.apache.org/viewvc?rev=1205982&view=rev
Log:
temporary move, restoring the history of SyncTimer
Added:
jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java (with props)
jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java.tmp
Added: jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java?rev=1205982&view=auto
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java (added)
+++ jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java Thu Nov 24 21:18:24 2011
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.jmeter.timers;
+
+import java.io.Serializable;
+import java.util.concurrent.BrokenBarrierException;
+
+import org.apache.jmeter.engine.event.LoopIterationEvent;
+import org.apache.jmeter.testbeans.TestBean;
+import org.apache.jmeter.testelement.AbstractTestElement;
+import org.apache.jmeter.testelement.TestListener;
+import org.apache.jmeter.testelement.ThreadListener;
+import org.apache.jmeter.threads.JMeterContextService;
+
+/**
+ * The purpose of the SyncTimer is to block threads until X number of threads
+ * have been blocked, and then they are all released at once. A SyncTimer can
+ * thus create large instant loads at various points of the test plan.
+ *
+ */
+public class SyncTimer extends AbstractTestElement implements Timer, Serializable, TestBean, TestListener, ThreadListener {
+ private static final long serialVersionUID = 2;
+
+ private BarrierWrapper barrier;
+
+ private int groupSize;
+
+ // Ensure transient object is created by the server
+ private Object readResolve(){
+ createBarrier();
+ return this;
+ }
+
+ /**
+ * @return Returns the numThreads.
+ */
+ public int getGroupSize() {
+ return groupSize;
+ }
+
+ /**
+ * @param numThreads
+ * The numThreads to set.
+ */
+ public void setGroupSize(int numThreads) {
+ this.groupSize = numThreads;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public long delay() {
+ if(getGroupSize()>=0) {
+ int arrival = 0;
+ try {
+ arrival = this.barrier.await();
+ } catch (InterruptedException e) {
+ return 0;
+ } catch (BrokenBarrierException e) {
+ return 0;
+ } finally {
+ if(arrival == 0) {
+ barrier.reset();
+ }
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * We have to control the cloning process because we need some cross-thread
+ * communication if our synctimers are to be able to determine when to block
+ * and when to release.
+ */
+ @Override
+ public Object clone() {
+ SyncTimer newTimer = (SyncTimer) super.clone();
+ newTimer.barrier = barrier;
+ return newTimer;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testEnded() {
+ this.testEnded(null);
+ }
+
+ /**
+ * Reset timerCounter
+ */
+ public void testEnded(String host) {
+ createBarrier();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testStarted() {
+ testStarted(null);
+ }
+
+ /**
+ * Reset timerCounter
+ */
+ public void testStarted(String host) {
+ createBarrier();
+ }
+
+ public void testIterationStart(LoopIterationEvent event) {
+ // NOOP
+ }
+
+ /**
+ *
+ */
+ private void createBarrier() {
+ if(getGroupSize() == 0) {
+ // Lazy init
+ this.barrier = new BarrierWrapper();
+ } else {
+ this.barrier = new BarrierWrapper(getGroupSize());
+ }
+ }
+
+ public void threadStarted() {
+ int numThreadsInGroup = JMeterContextService.getContext().getThreadGroup().getNumThreads();
+ if(getGroupSize() == 0) {
+ // Unique Barrier creation ensured by synchronized setup
+ this.barrier.setup(numThreadsInGroup);
+ }
+ }
+
+ public void threadFinished() {
+ // NOOP
+ }
+}
\ No newline at end of file
Propchange: jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java.tmp
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java.tmp?rev=1205982&view=auto
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java.tmp (added)
+++ jmeter/trunk/src/components/org/apache/jmeter/timers/SyncTimer.java.tmp Thu Nov 24 21:18:24 2011
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.jmeter.timers;
+
+import java.io.Serializable;
+import java.util.concurrent.BrokenBarrierException;
+
+import org.apache.jmeter.engine.event.LoopIterationEvent;
+import org.apache.jmeter.testbeans.TestBean;
+import org.apache.jmeter.testelement.AbstractTestElement;
+import org.apache.jmeter.testelement.TestListener;
+import org.apache.jmeter.testelement.ThreadListener;
+import org.apache.jmeter.threads.JMeterContextService;
+
+/**
+ * The purpose of the SyncTimer is to block threads until X number of threads
+ * have been blocked, and then they are all released at once. A SyncTimer can
+ * thus create large instant loads at various points of the test plan.
+ *
+ */
+public class SyncTimer extends AbstractTestElement implements Timer, Serializable, TestBean, TestListener, ThreadListener {
+ private static final long serialVersionUID = 2;
+
+ private BarrierWrapper barrier;
+
+ private int groupSize;
+
+ // Ensure transient object is created by the server
+ private Object readResolve(){
+ createBarrier();
+ return this;
+ }
+
+ /**
+ * @return Returns the numThreads.
+ */
+ public int getGroupSize() {
+ return groupSize;
+ }
+
+ /**
+ * @param numThreads
+ * The numThreads to set.
+ */
+ public void setGroupSize(int numThreads) {
+ this.groupSize = numThreads;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public long delay() {
+ if(getGroupSize()>=0) {
+ int arrival = 0;
+ try {
+ arrival = this.barrier.await();
+ } catch (InterruptedException e) {
+ return 0;
+ } catch (BrokenBarrierException e) {
+ return 0;
+ } finally {
+ if(arrival == 0) {
+ barrier.reset();
+ }
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * We have to control the cloning process because we need some cross-thread
+ * communication if our synctimers are to be able to determine when to block
+ * and when to release.
+ */
+ @Override
+ public Object clone() {
+ SyncTimer newTimer = (SyncTimer) super.clone();
+ newTimer.barrier = barrier;
+ return newTimer;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testEnded() {
+ this.testEnded(null);
+ }
+
+ /**
+ * Reset timerCounter
+ */
+ public void testEnded(String host) {
+ createBarrier();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void testStarted() {
+ testStarted(null);
+ }
+
+ /**
+ * Reset timerCounter
+ */
+ public void testStarted(String host) {
+ createBarrier();
+ }
+
+ public void testIterationStart(LoopIterationEvent event) {
+ // NOOP
+ }
+
+ /**
+ *
+ */
+ private void createBarrier() {
+ if(getGroupSize() == 0) {
+ // Lazy init
+ this.barrier = new BarrierWrapper();
+ } else {
+ this.barrier = new BarrierWrapper(getGroupSize());
+ }
+ }
+
+ public void threadStarted() {
+ int numThreadsInGroup = JMeterContextService.getContext().getThreadGroup().getNumThreads();
+ if(getGroupSize() == 0) {
+ // Unique Barrier creation ensured by synchronized setup
+ this.barrier.setup(numThreadsInGroup);
+ }
+ }
+
+ public void threadFinished() {
+ // NOOP
+ }
+}
\ No newline at end of file