Author: sebb
Date: Wed Sep 21 00:48:08 2011
New Revision: 1173443
URL: http://svn.apache.org/viewvc?rev=1173443&view=rev
Log:
Bug 51855 - Parent samples may have slightly inaccurate elapsed times
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
jakarta/jmeter/trunk/test/src/org/apache/jmeter/samplers/TestSampleResult.java
jakarta/jmeter/trunk/xdocs/changes.xml
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java?rev=1173443&r1=1173442&r2=1173443&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
Wed Sep 21 00:48:08 2011
@@ -538,7 +538,7 @@ public class SampleResult implements Ser
subResult.setThreadName(tn); // TODO is this really necessary?
// Extend the time to the end of the added sample
- setEndTime(Math.max(getEndTime(), subResult.getEndTime()));
+ setEndTime(Math.max(getEndTime(), subResult.getEndTime() +
nanoTimeOffset - subResult.nanoTimeOffset)); // Bug 51855
// Include the byte count for the added sample
setBytes(getBytes() + subResult.getBytes());
addRawSubResult(subResult);
Modified:
jakarta/jmeter/trunk/test/src/org/apache/jmeter/samplers/TestSampleResult.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/test/src/org/apache/jmeter/samplers/TestSampleResult.java?rev=1173443&r1=1173442&r2=1173443&view=diff
==============================================================================
---
jakarta/jmeter/trunk/test/src/org/apache/jmeter/samplers/TestSampleResult.java
(original)
+++
jakarta/jmeter/trunk/test/src/org/apache/jmeter/samplers/TestSampleResult.java
Wed Sep 21 00:48:08 2011
@@ -210,22 +210,29 @@ public class TestSampleResult extends Te
long overallTime = parent.currentTimeInMillis() - beginTest;
- // Check the sample times
- final long fudge1 = 15;
long sumSamplesTimes = parentElapsed + child1Elapsed +
child2Elapsed;
- if (parentElapsedTotal + fudge1 < sumSamplesTimes) { // Add fudge
factor
- fail("Total: " + parentElapsedTotal + " " + fudge1 + " <
sum(samples): "+ sumSamplesTimes);
- }
+
/*
- * The granularity of System.currentTimeMillis() - plus the fact
that the nanoTime()
- * offset is now calculated for each sampleResult - means that
there can be some
- * minor variation in the value returned by
SampleResult#currentTimeInMillis().
- *
- * Allow for this by adding a fudge factor
- */
- long fudge2 = 13;
- if (parentElapsedTotal > overallTime + fudge2) {
- fail("Total: "+parentElapsedTotal+" > overall time: "+
overallTime + " + " + fudge2);
+ * Parent elapsed total should be no smaller than the sum of the
individual samples.
+ * It may be greater by the timer granularity.
+ */
+
+ long diff = parentElapsedTotal - sumSamplesTimes;
+ long maxDiff = nanoTime ? 1 : 16; // TimeMillis has granularity of
10-20
+ if (diff < 0 || diff > maxDiff) {
+ fail("ParentElapsed: " + parentElapsedTotal + " - " + "
sum(samples): " + sumSamplesTimes
+ + " = " + diff + " not in [0," + maxDiff + "];
nanotime=" + nanoTime);
+ }
+
+ /**
+ * The overall time to run the test must be no less than,
+ * and may be greater (but not much greater) than the parent
elapsed time
+ */
+
+ diff = overallTime - parentElapsedTotal;
+ if (diff < 0 || diff > maxDiff) {
+ fail("TestElapsed: " + overallTime + " - " + " ParentElapsed:
" + parentElapsedTotal
+ + " = " + diff + " not in [0," + maxDiff + "];
nanotime="+nanoTime);
}
// Check that calculator gets the correct statistics from the
sample
@@ -236,6 +243,7 @@ public class TestSampleResult extends Te
assertEquals(1d / (parentElapsedTotal / 1000d),
calculator.getRate(),0.0001d); // Allow for some margin of error
// Check that the throughput uses the time elapsed for the sub
results
assertFalse(1d / (parentElapsed / 1000d) <= calculator.getRate());
+ System.out.print(nanoTime? 'T' : 'F');
}
// TODO some more invalid sequence tests needed
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1173443&r1=1173442&r2=1173443&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Sep 21 00:48:08 2011
@@ -130,6 +130,7 @@ This can be overridden by setting the JM
<li>Bug 47921 - Variables not released for GC after JMeterThread exits.</li>
<li>Bug 51839 - "... end of run" printed prematurely</li>
<li>Bug 51847 - Some Junit tests are Locale sensitive and fail if Locale is
different from US</li>
+<li>Bug 51855 - Parent samples may have slightly inaccurate elapsed times</li>
</ul>
<!-- ==================================================== -->
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]