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 2009/12/16 01:02:47 UTC
svn commit: r891076 - in /jakarta/jmeter/trunk/src:
components/org/apache/jmeter/visualizers/ core/org/apache/jmeter/visualizers/
Author: sebb
Date: Wed Dec 16 00:02:46 2009
New Revision: 891076
URL: http://svn.apache.org/viewvc?rev=891076&view=rev
Log:
Remove cache of samples from SamplingStatCalculator and move into new subclass CachingStatCalculator.
Only a few visualisers actually need the cache, which can take lots of memory.
Aggregate Report now uses far less memory.
Added:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/CachingStatCalculator.java (with props)
Modified:
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/Graph.java
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/GraphVisualizer.java
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SplineModel.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/SamplingStatCalculator.java
Modified: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/Graph.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/Graph.java?rev=891076&r1=891075&r2=891076&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/Graph.java (original)
+++ jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/Graph.java Wed Dec 16 00:02:46 2009
@@ -51,7 +51,7 @@
private boolean wantMedian = true;
- private SamplingStatCalculator model;
+ private CachingStatCalculator model;
private static final int width = 2000;
@@ -69,17 +69,9 @@
/**
* Constructor for the Graph object.
*/
- public Graph(SamplingStatCalculator model) {
+ public Graph(CachingStatCalculator model) {
this();
- setModel(model);
- }
-
- /**
- * Sets the Model attribute of the Graph object.
- */
- private void setModel(Object model) {
- this.model = (SamplingStatCalculator) model;
- repaint();
+ this.model = model;
}
/**
Modified: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/GraphVisualizer.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/GraphVisualizer.java?rev=891076&r1=891075&r2=891076&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/GraphVisualizer.java (original)
+++ jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/GraphVisualizer.java Wed Dec 16 00:02:46 2009
@@ -58,7 +58,7 @@
private NumberFormat nf = NumberFormat.getInstance(); // OK, because used in synchronised method
- private SamplingStatCalculator model;
+ private CachingStatCalculator model;
private JTextField maxYField = null;
@@ -94,7 +94,7 @@
* Constructor for the GraphVisualizer object.
*/
public GraphVisualizer() {
- model = new SamplingStatCalculator("Graph");
+ model = new CachingStatCalculator("Graph");
graph = new Graph(model);
init();
}
Modified: jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SplineModel.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SplineModel.java?rev=891076&r1=891075&r2=891076&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SplineModel.java (original)
+++ jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SplineModel.java Wed Dec 16 00:02:46 2009
@@ -37,7 +37,7 @@
//@GuardedBy("this")
private Spline3 dataCurve = null;
- final SamplingStatCalculator samples;
+ final CachingStatCalculator samples;
//@GuardedBy("this")
private GraphListener listener;
@@ -46,7 +46,7 @@
private String name;
public SplineModel() {
- samples = new SamplingStatCalculator("Spline");
+ samples = new CachingStatCalculator("Spline");
}
public synchronized void setListener(GraphListener vis) {
Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/CachingStatCalculator.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/CachingStatCalculator.java?rev=891076&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/CachingStatCalculator.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/CachingStatCalculator.java Wed Dec 16 00:02:46 2009
@@ -0,0 +1,65 @@
+/*
+ * 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.visualizers;
+
+import java.util.List;
+import java.util.Vector;
+
+import org.apache.jmeter.samplers.SampleResult;
+
+/**
+ * Provides storage of samples in addition to calculations
+ */
+public class CachingStatCalculator extends SamplingStatCalculator {
+
+ private final List<Sample> storedValues = new Vector<Sample>();
+
+ public CachingStatCalculator(String string) {
+ super(string);
+ }
+
+ public List<Sample> getSamples() {
+ return storedValues;
+ }
+
+ public Sample getSample(int index) {
+ synchronized( storedValues ){
+ if (index < storedValues.size()) {
+ return storedValues.get(index);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void clear() {
+ super.clear();
+ storedValues.clear();
+ }
+ /**
+ * Records a sample.
+ *
+ */
+ @Override
+ public Sample addSample(SampleResult res) {
+ final Sample sample = super.addSample(res);
+ storedValues.add(sample);
+ return sample;
+ }
+}
Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/CachingStatCalculator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/CachingStatCalculator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/SamplingStatCalculator.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/SamplingStatCalculator.java?rev=891076&r1=891075&r2=891076&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/SamplingStatCalculator.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/SamplingStatCalculator.java Wed Dec 16 00:02:46 2009
@@ -18,15 +18,10 @@
package org.apache.jmeter.visualizers;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
-import java.util.Vector;
import org.apache.jmeter.samplers.SampleResult;
-import org.apache.jorphan.logging.LoggingManager;
import org.apache.jorphan.math.StatCalculatorLong;
-import org.apache.log.Logger;
/**
* Aggegate sample data container. Just instantiate a new instance of this
@@ -35,61 +30,30 @@
*
*/
public class SamplingStatCalculator {
- private static final Logger log = LoggingManager.getLoggerForClass();
-
private final StatCalculatorLong calculator = new StatCalculatorLong();
- private final List<Sample> storedValues = new Vector<Sample>();
-
private double maxThroughput;
private long firstTime;
private String label;
- /**
- * @deprecated only for use by test code
- */
- @Deprecated
- public SamplingStatCalculator() {// Don't (can't) use this...
- log.warn("Constructor only intended for use in testing"); // $NON-NLS-1$
+ private Sample currentSample;
+
+ public SamplingStatCalculator(){ // Only for use by test code
+ this("");
}
- /**
- * Use this constructor.
- */
public SamplingStatCalculator(String label) {
this.label = label;
init();
}
- /**
- * Essentially a copy function
- *
- * @param stat
- */
- public SamplingStatCalculator(SamplingStatCalculator stat) {
- this(stat.label);
- addSamples(stat);
- }
-
private void init() {
firstTime = Long.MAX_VALUE;
calculator.clear();
- storedValues.clear();
maxThroughput = Double.MIN_VALUE;
- }
-
- public void addSamples(SamplingStatCalculator ssc) {
- calculator.addAll(ssc.calculator);
- synchronized( storedValues )
- {
- storedValues.addAll(ssc.storedValues);
- Collections.sort(storedValues);
- }
- if (firstTime > ssc.firstTime) {
- firstTime = ssc.firstTime;
- }
+ currentSample = new Sample();
}
/**
@@ -101,13 +65,7 @@
}
public Sample getCurrentSample() {
- synchronized( storedValues )
- {
- if (storedValues.size() == 0) {
- return new Sample();
- }
- return storedValues.get(storedValues.size() - 1);
- }
+ return currentSample;
}
/**
@@ -227,26 +185,11 @@
rbool = res.isSuccessful();
}
- synchronized( storedValues ){
- int count = storedValues.size() + 1;
- Sample s =
- new Sample( null, rtime, cmean, cstdv, cmedian, cpercent, throughput, eCount, rbool, count, endTime );
- storedValues.add( s );
- return s;
- }
- }
-
- public List<Sample> getSamples() {
- return storedValues;
- }
-
- public Sample getSample(int index) {
- synchronized( storedValues ){
- if (index < storedValues.size()) {
- return storedValues.get(index);
- }
- return null;
- }
+ int count = calculator.getCount();
+ Sample s =
+ new Sample( null, rtime, cmean, cstdv, cmedian, cpercent, throughput, eCount, rbool, count, endTime );
+ currentSample = s;
+ return s;
}
private long getEndTime(SampleResult res) {
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org