Animometer test could report a NaN
authorjonlee@apple.com <jonlee@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 16 Apr 2016 01:02:59 +0000 (01:02 +0000)
committerjonlee@apple.com <jonlee@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 16 Apr 2016 01:02:59 +0000 (01:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=156646

Reviewed by Darin Adler.
Provisionally reviewed by Said Abou-Hallawa.

* Animometer/tests/resources/main.js:
(didFinishInterval): The ramp controller has a first phase where it ramps up the complexity and
reacts based on how well the system handles the load. The assumption was that it would handle at least
1 particle easily. That is not always the case. As a result, an interpolation calculation could
end up setting an upper bound of NaN.

This occurs because we never get out of the first tier, so this._lastTierComplexity is undefined.
Now that we guarantee a minimum complexity of 1, modify the conditional to check for this._lastTierComplexity
before interpolating the upper bound of the first ramp. In the case where the system struggles with
1 particle, set it to currentComplexity.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@199616 268f45cc-cd09-0410-ab3c-d52691b4dbfc

PerformanceTests/Animometer/tests/resources/main.js
PerformanceTests/ChangeLog

index 45a6491..e14ed59 100644 (file)
@@ -413,10 +413,11 @@ RampController = Utilities.createSubclass(Controller,
             this._possibleMinimumComplexity = this._minimumComplexity;
             this._minimumComplexityEstimator.sample(this._minimumComplexity);
 
-            // Sometimes this last tier will drop the frame length well below the threshold
-            // Avoid going down that far since it means fewer measurements are taken in the 60 fps area
-            // Interpolate a maximum complexity that gets us around the lowest threshold
-            if (this._lastTierComplexity != currentComplexity)
+            // Sometimes this last tier will drop the frame length well below the threshold.
+            // Avoid going down that far since it means fewer measurements are taken in the 60 fps area.
+            // Interpolate a maximum complexity that gets us around the lowest threshold.
+            // Avoid doing this calculation if we never get out of the first tier (where this._lastTierComplexity is undefined).
+            if (this._lastTierComplexity && this._lastTierComplexity != currentComplexity)
                 this._maximumComplexity = Math.floor(Utilities.lerp(Utilities.progressValue(this.frameLengthSlowestThreshold, this._lastTierFrameLength, currentFrameLength), this._lastTierComplexity, currentComplexity));
             else {
                 // If the browser is capable of handling the most complex version of the test, use that
index 814537e..f339385 100644 (file)
@@ -1,3 +1,22 @@
+2016-04-15  Jon Lee  <jonlee@apple.com>
+
+        Animometer test could report a NaN
+        https://bugs.webkit.org/show_bug.cgi?id=156646
+
+        Reviewed by Darin Adler.
+        Provisionally reviewed by Said Abou-Hallawa.
+
+        * Animometer/tests/resources/main.js:
+        (didFinishInterval): The ramp controller has a first phase where it ramps up the complexity and
+        reacts based on how well the system handles the load. The assumption was that it would handle at least
+        1 particle easily. That is not always the case. As a result, an interpolation calculation could
+        end up setting an upper bound of NaN.
+
+        This occurs because we never get out of the first tier, so this._lastTierComplexity is undefined.
+        Now that we guarantee a minimum complexity of 1, modify the conditional to check for this._lastTierComplexity
+        before interpolating the upper bound of the first ramp. In the case where the system struggles with
+        1 particle, set it to currentComplexity.
+
 2016-04-09  Jon Lee  <jonlee@apple.com>
 
         Update Animometer to accommodate different screens