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: notifications-unsubscr...@jakarta.apache.org For additional commands, e-mail: notifications-h...@jakarta.apache.org