2016-09-19  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Remove the x2 computation of row sizes with indefinite heights
        https://bugs.webkit.org/show_bug.cgi?id=162150

        Reviewed by Darin Adler.

        Added a new test case which checks the layout performance of grids inside other grids, i.e,
        grids acting both as grid container and grid item.

        * Layout/nested-grid.html: Added.

2016-09-09  Simon Fraser  <simon.fraser@apple.com>

        Perf test Animation/css-accelerated-animation.html failing
        https://bugs.webkit.org/show_bug.cgi?id=161795

        Skip Animation/css-accelerated-animation.html since this only works as a MobileSafari
        perf test.

        * Skipped:

2016-09-08  Simon Fraser  <simon.fraser@apple.com>

        Add a content-animation test with accelerated CSS animations
        https://bugs.webkit.org/show_bug.cgi?id=161776

        Reviewed by Dean Jackson.

        Add a test that measures the frame rate of accelerated CSS animations.

        This is like css-animation.html (which animates 'left' and 'top') but animates
        transforms instead. In order to get animation in X and Y we make two nested elements
        and set transformX() on one, and transformY() on the other.

        * Animation/css-accelerated-animation.html: Added.

2016-08-23  Saam Barati  <sbarati@apple.com>

        It should be easy to run ES6SampleBench from the jsc shell
        https://bugs.webkit.org/show_bug.cgi?id=161085

        Reviewed by Yusuke Suzuki.

        This patch makes ES6 sample bench runnable through the `jsc` shell.
        To do that, you need to be in the PerformanceTests/ES6SampleBench
        directory and run `jsc cli.js`. To make this work, the benchmark
        is now aware of being run in two modes: via the browser, and via
        the shell. Each entry point will set a variable `isInBrowser`,
        and the benchmark will do different things based on if that
        variable is true or false.

        * ES6SampleBench/Air/benchmark.js:
        * ES6SampleBench/Air/stress-test.js:
        * ES6SampleBench/Basic/benchmark.js:
        (runBenchmark):
        * ES6SampleBench/Basic/stress-test.js:
        * ES6SampleBench/air_benchmark.js:
        * ES6SampleBench/basic_benchmark.js:
        * ES6SampleBench/cli.js: Added.
        (return.doRun):
        (makeBenchmarkRunner):
        * ES6SampleBench/driver.js:
        (Driver):
        (Driver.prototype._recomputeSummary):
        (Driver.prototype._iterate.window.setTimeout):
        (Driver.prototype._iterate):
        (Driver.prototype._updateIterations):
        * ES6SampleBench/glue.js:
        (reportResult):
        * ES6SampleBench/index.html:
        * ES6SampleBench/results.js:
        (Results):
        (Results.prototype.reportRunning):
        (Results.prototype.reportDone):
        (Results.prototype.reportError):
        * ES6SampleBench/stats.js:
        (Stats):
        (Stats.prototype.toString):
        (Stats.prototype._update):

2016-08-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add an option to run the MotionMark tests with classic tile size (512x512)
        https://bugs.webkit.org/show_bug.cgi?id=160371

        Reviewed by Darin Adler.

        Setting the body to large size (3000x3000) and overflow to scroll forces
        the classic tile size (512x512). This option does not affect the canvas
        tests because the canvas is displayed on one tile regardless of its size.

        * Animometer/developer.html:
        * Animometer/resources/debug-runner/animometer.css:
        (body.showing-test-container.tiles-big):
        (body.showing-test-container.tiles-classic):
        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.startBenchmark):

2016-06-29  Filip Pizlo  <fpizlo@apple.com>

        Generators violate bytecode liveness validation
        https://bugs.webkit.org/show_bug.cgi?id=159279

        Reviewed by Yusuke Suzuki.

        Add Basic to our test harness.

        Also made some cosmetic changes to the benchmark harness.

        * ES6SampleBench/Basic/basic-tests.yaml: Added.
        * ES6SampleBench/Basic/stress-test.js: Added.
        (preciseTime):
        * ES6SampleBench/driver.js:
        (Driver):
        (Driver.prototype.start):
        (Driver.prototype.reportError):
        * ES6SampleBench/glue.js:
        * ES6SampleBench/index.html:

2016-06-28  Filip Pizlo  <fpizlo@apple.com>

        ES6SampleBench should have a harness
        https://bugs.webkit.org/show_bug.cgi?id=159246

        Reviewed by Saam Barati.
        
        This adds a simple web harness for ES6SampleBench. It runs Air and Basic 10 times for 200
        iterations each and reports three metrics:
        
        First iteration: the time it takes for the first iteration to run. This is the first
        iteration after the benchmark is loaded into the iframe, so it's representative of what
        would happen if one of these workloads only ran for a short time.
        
        Worst 2%: of the last 199 iterations, the average of the worst 2% iterations. If code like
        any of these workloads was used in an important event handler, you'd want that code to run
        well in the worst case in addition to having great throughput.
        
        Steady state: the total of the last 199 iterations. This is representative of what would
        happen if you ran code like this for a long time.
        
        The total score is the geomean of the firstIteration/worstCase/steadyState numbers of the
        two benchmarks.
        
        The harness does statistics using Student's T-distribution confidence intervals.

        * ES6SampleBench/Basic/benchmark.js:
        (Benchmark):
        * ES6SampleBench/air_benchmark.js: Added.
        * ES6SampleBench/basic_benchmark.js: Added.
        * ES6SampleBench/driver.js: Added.
        (Driver):
        (Driver.prototype.addBenchmark):
        (Driver.prototype.start):
        (Driver.prototype.reportResult):
        (Driver.prototype.reportError):
        (Driver.prototype._recomputeSummary.Geomean):
        (Driver.prototype._recomputeSummary.Geomean.prototype.add):
        (Driver.prototype._recomputeSummary.Geomean.prototype.get result):
        (Driver.prototype._recomputeSummary):
        (Driver.prototype._iterate):
        (Driver.prototype._updateIterations):
        * ES6SampleBench/glue.js: Added.
        * ES6SampleBench/index.html: Added.
        * ES6SampleBench/results.js: Added.
        (Results):
        (Results.prototype.get benchmark):
        (Results.prototype.reset):
        (Results.prototype.reportRunning):
        (Results.prototype.reportDone):
        (Results.prototype.reportResult.averageAbovePercentile):
        (Results.prototype.reportResult):
        (Results.prototype.reportError):
        * ES6SampleBench/stats.js: Added.
        (Stats):
        (Stats.prototype.reset):
        (Stats.prototype.add):
        (Stats.prototype.get numIterations):
        (Stats.prototype.valueForIteration):
        (Stats.get result.tDist):
        (Stats.prototype.get result):
        (Stats.prototype.toString):
        (Stats.prototype._update):
        * ES6SampleBench/style.css: Added.
        (body):
        (body, th, tr):
        (h1, h2, h3, h4):
        (h1):
        (h2):
        (h3):
        (hr):
        (address):
        (img):
        (.underline):
        (ol.loweralpha):
        (ol.upperalpha):
        (ol.lowerroman):
        (ol.upperroman):
        (ol.arabic):
        (.banner-link:link, .banner-link:visited):
        (:link, :visited):
        (h4 :link, h4 :visited, h5 :link, h5 :visited, h6 :link, h6 :visited):
        (.anchor:link, .anchor:visited):
        (* > .anchor:link, * > .anchor:visited):
        (span:hover .anchor):
        (a.forbidden, span.forbidden):
        (a.missing:hover):
        (a.closed:link, a.closed:visited, span.closed):
        (pre):
        (div.code):
        (div.code pre):
        (dt):
        (dd):
        (dd:last-child):
        (.site-logo):
        (.site-logo .tagline):
        (table):
        (#contents):
        (p):
        (p:last-child):
        (th):
        (td):

2016-06-28  Jon Lee  <jonlee@apple.com>

        Update focus test
        https://bugs.webkit.org/show_bug.cgi?id=159242
        rdar://problem/27070007

        Reviewed by Dean Jackson.
        Provisionally reviewed by Said Abou-Hallawa.

        Move previous test to dom suite, and update the test for better reporting of frame rate, although
        it uses a different rendering path.

        * Animometer/resources/debug-runner/tests.js: Add to dom suite.
        * Animometer/tests/dom/focus.html: Copied from PerformanceTests/Animometer/tests/master/focus.html.
        * Animometer/tests/dom/resources/focus.js: Copied from PerformanceTests/Animometer/tests/master/resources/focus.js.
        * Animometer/tests/master/focus.html: Remove center element.
        * Animometer/tests/master/resources/focus.js: Use narrower size range with smaller particles. Remove the
        container elements. Inline getBlurValue and getOpacityValue since they are only called once.

2016-06-28  Filip Pizlo  <fpizlo@apple.com>

        Move Air.js and Basic into ES6SampleBench

        Rubber stamped by Geoffrey Garen.
        
        We want to group our ES6 benchmarks together, and eventually, we want to give them a
        common harness.

        * Air.js: Removed.
        * Air.js/README.md: Removed.
        * Air.js/airjs-tests.yaml: Removed.
        * Air.js/all.js: Removed.
        * Air.js/allocate_stack.js: Removed.
        * Air.js/arg.js: Removed.
        * Air.js/basic_block.js: Removed.
        * Air.js/benchmark.js: Removed.
        * Air.js/code.js: Removed.
        * Air.js/custom.js: Removed.
        * Air.js/frequented_block.js: Removed.
        * Air.js/insertion_set.js: Removed.
        * Air.js/inst.js: Removed.
        * Air.js/liveness.js: Removed.
        * Air.js/make_dist.sh: Removed.
        * Air.js/opcode.js: Removed.
        * Air.js/payload-airjs-ACLj8C.js: Removed.
        * Air.js/payload-gbemu-executeIteration.js: Removed.
        * Air.js/payload-imaging-gaussian-blur-gaussianBlur.js: Removed.
        * Air.js/payload-typescript-scanIdentifier.js: Removed.
        * Air.js/reg.js: Removed.
        * Air.js/stack_slot.js: Removed.
        * Air.js/stress-test.js: Removed.
        * Air.js/strip-hash.rb: Removed.
        * Air.js/symbols.js: Removed.
        * Air.js/test.html: Removed.
        * Air.js/test.js: Removed.
        * Air.js/tmp.js: Removed.
        * Air.js/tmp_base.js: Removed.
        * Air.js/util.js: Removed.
        * Basic: Removed.
        * Basic/ast.js: Removed.
        * Basic/basic.js: Removed.
        * Basic/benchmark.js: Removed.
        * Basic/caseless_map.js: Removed.
        * Basic/lexer.js: Removed.
        * Basic/number.js: Removed.
        * Basic/parser.js: Removed.
        * Basic/random.js: Removed.
        * Basic/state.js: Removed.
        * Basic/test.html: Removed.
        * Basic/test.js: Removed.
        * Basic/util.js: Removed.
        * ES6SampleBench: Added.
        * ES6SampleBench/Air: Copied from PerformanceTests/Air.js.
        * ES6SampleBench/Basic: Copied from PerformanceTests/Basic.
        * Skipped:

2016-06-24  Filip Pizlo  <fpizlo@apple.com>

        Add a ES6 generator benchmark
        https://bugs.webkit.org/show_bug.cgi?id=159101

        Rubber stamped by Keith Miller.
        
        This adds a Basic interpreter loosely based on ECMA-55:
        
        http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-55,%201st%20Edition,%20January%201978.pdf
        
        It includes a lexer that is a generator, a parser that uses regular expressions, and an AST
        walk interpreter where the walking functions for statements are generators that call each
        other with yield*. This enables the interpreter to look like an AST walk even though it can
        yield at INPUT and PRINT statements.
        
        This also uses for-of, classes, Map, and WeakMap. It also uses deprecated-but-awesome RegExp
        features like RegExp.lastMatch and RegExp.rightContext. I did it that way because this is
        how I've always written lexers in dynamic languages; see offlineasm's lex() method in
        parser.rb for example.
        
        The benchmark runs a handful of simple Basic programs. The longest-running one computes
        prime numbers.
        
        Includes a command-line and web harness. On my machine it runs in 2-3 seconds.

        * Basic: Added.
        * Basic/ast.js: Added.
        (Basic.NumberApply):
        (Basic.Variable):
        (Basic.Const):
        (Basic.NumberPow):
        (Basic.NumberMul):
        (Basic.NumberDiv):
        (Basic.NumberNeg):
        (Basic.NumberAdd):
        (Basic.NumberSub):
        (Basic.StringVar):
        (Basic.Equals):
        (Basic.NotEquals):
        (Basic.LessThan):
        (Basic.GreaterThan):
        (Basic.LessEqual):
        (Basic.GreaterEqual):
        (Basic.GoTo):
        (Basic.GoSub):
        (Basic.Def):
        (Basic.Let):
        (Basic.If):
        (Basic.Return):
        (Basic.Stop):
        (Basic.On):
        (sideState.shouldStop):
        (Basic.For):
        (Basic.Next):
        (Basic.Print):
        (Basic.Input):
        (Basic.Read):
        (Basic.Restore):
        (Basic.Dim):
        (Basic.Randomize):
        (Basic.End):
        (Basic.Program):
        * Basic/basic.js: Added.
        (prepare):
        (simulate):
        * Basic/benchmark.js: Added.
        (Benchmark):
        (Benchmark.prototype.runIteration.expect):
        (Benchmark.prototype.runIteration):
        (runBenchmark):
        * Basic/caseless_map.js: Added.
        (CaselessMap):
        * Basic/lexer.js: Added.
        (lex.consumeWhitespace):
        (lex.consume):
        (lex):
        * Basic/lexer_test.js: Added.
        * Basic/number.js: Added.
        (NumberValue):
        (NumberValue.prototype.get value):
        (NumberValue.prototype.apply):
        (NumberValue.prototype.leftApply):
        (NumberValue.prototype.assign):
        (NumberArray.):
        (NumberArray):
        (NumberArray.prototype.apply):
        (NumberArray.prototype.leftApply):
        (NumberFunction):
        (NumberFunction.prototype.apply):
        (NumberFunction.prototype.leftApply):
        (NativeFunction):
        (NativeFunction.prototype.apply):
        (NativeFunction.prototype.leftApply):
        * Basic/parser.js: Added.
        (parse):
        (parse.pushToken):
        (parse.peekToken):
        (parse.consumeKind):
        (parse.consumeToken):
        (parse.parseVariable):
        (parse.parseNumericExpression.parsePrimary):
        (parse.parseNumericExpression.parseFactor):
        (parse.parseNumericExpression.parseTerm):
        (parse.parseNumericExpression):
        (parse.parseConstant):
        (parse.parseStringExpression):
        (parse.isStringExpression):
        (parse.parseRelationalExpression):
        (parse.parseNonNegativeInteger):
        (parse.parseGoToStatement):
        (parse.parseGoSubStatement):
        (parse.parseStatement):
        (parse.parseStatements):
        * Basic/random.js: Added.
        (createRNG):
        (createRNGWithFixedSeed):
        (createRNGWithRandomSeed):
        * Basic/state.js: Added.
        (State):
        (State.prototype.getValue):
        (State.prototype.getSideState):
        (State.prototype.abort):
        (State.prototype.validate):
        * Basic/test.html: Added.
        * Basic/test.js: Added.
        * Basic/util.js: Added.
        (this.performance.performance.now.currentTime):
        (else.this.preciseTime.currentTime):
        (else.currentTime):
        * Skipped: Make sure that we don't run Basic yet.

2016-06-21  Jon Lee  <jonlee@apple.com>

        Update canvas size when benchmark begins
        https://bugs.webkit.org/show_bug.cgi?id=159010

        Reviewed by Dean Jackson.

        Previously we would evaluate the media queries and assign the canvas size to the test
        on body.onload. Instead, do it once the user starts the benchmark.

        * Animometer/resources/debug-runner/animometer.js: Move benchmarkController.determineCanvasSize()
        to benchmarkController._startBenchmark.
        * Animometer/resources/runner/animometer.js: Ditto.

2016-06-21  Jon Lee  <jonlee@apple.com>

        Add new timestamp option
        https://bugs.webkit.org/show_bug.cgi?id=159006

        Reviewed by Dean Jackson.

        Add a new option to take timestamps from the rAF callback.

        * Animometer/developer.html: Added option.
        * Animometer/tests/resources/main.js:
        (Benchmark): Fall back to using the rAF timestamp if performance.now()
        is not available.
        (Benchmark._animateLoop): Update how timestamp is set. Prefer to use
        local var instead of accessing private var.

2016-06-21  Jon Lee  <jonlee@apple.com>

        Improvements to Animometer benchmark
        https://bugs.webkit.org/show_bug.cgi?id=157738

        Reviewed by Dean Jackson.
        Provisionally reviewed by Said Abou-Hallawa.

        Update tests.

        * Animometer/tests/master/text.html: Ensure only three text sizes for
        the three canvases.
        * Animometer/tests/master/focus.html: Reduce the text size to fit with smaller
        particle sizes.
        * Animometer/tests/master/resources/focus.js: Remove the quadratic distribution for
        particle sizes, and make it linear. Reduce the size variance. Shuffle the math to
        reduce some calculations per frame. Fix the placement of the particles which might
        otherwise be culled.
        * Animometer/tests/master/resources/image-data.js: Reduce the particle size
        to encourage larger scores.

2016-06-21  Jon Lee  <jonlee@apple.com>

        Improvements to Animometer benchmark
        https://bugs.webkit.org/show_bug.cgi?id=157738

        Reviewed by Dean Jackson.
        Provisionally reviewed by Said Abou-Hallawa.

        Include confidence interval for the final score, and store the canvas
        size in the serialization so that it is accurately shown in results.

        * Animometer/developer.html: Add a "confidence" div.
        * Animometer/index.html: Ditto. Convert "mean" to "confidence".
        * Animometer/resources/debug-runner/animometer.js: Look at options, and
        if the configuration is included, update the body class based on it
        (similar to what we do when we first load the page). That way, if you
        drag-and-drop previous results in, that configuration is reflected in
        the dashboard. Show the full confidence interval.

        * Animometer/resources/debug-runner/animometer.css:
        * Animometer/resources/debug-runner/animometer.js: Style update.
        * Animometer/resources/runner/animometer.css:

        * Animometer/resources/runner/animometer.js:
        (_processData): Propagate the confidence interval values out and calculate
        the lower and upper bounds. For now, shortcut the aggregate calculation,
        since we only go through one iteration.
        (this._processData.calculateScore): Propagate the confidence interval out
        to be next to the score. Depending on the controller these values are
        calculated differently.
        (this._processData._getResultsProperty): Convenience function.
        (this._processData.get score): Refactor.
        (this._processData.get scoreLowerBound): Get the aggregate lower bound.
        (this._processData.get scoreUpperBound): Get the aggregate upper bound.
        (window.sectionsManager.setSectionScore):
        (window.benchmarkController._startBenchmark): When the benchmark starts, note
        the canvas size and add it to options. That way it will be automatically be
        serialized.
        (window.benchmarkController.showResults): Include the maximum deviation
        percentage.
        * Animometer/resources/runner/lines.svg: Make the background line up with the
        skew.
        * Animometer/resources/runner/tests.js:
        (Headers.details.text): Refactor.
        * Animometer/resources/statistics.js:
        (Statistics.largestDeviationPercentage): Convenience function to calculate
        the deviation percentage on either end and return the largest deviation.
        * Animometer/resources/strings.js:

        Allow specifying a regression profile to use instead of taking the one
        with the lowest error.

        Address an issue in the focus test when the regression calculated ends
        up overestimating the change point, causing a cascade of tougher
        ramps. The reason behind this is that at max complexity of an initial
        ramp, the frame length is very high, and it influences the second
        segment of the piecewise regression strongly, causing it to be very
        steep. As a result, the first segment, expected to be flat, ends up
        covering a higher range of complexity. That makes the change point
        much higher than it should be. To avoid this, we will add a sanity
        check on the maximum value of the ramp. If the regression's projected
        value at the maximum complexity of the current ramp is very slow (less
        than 20 fps), 1) reduce the maximum complexity by 20%, and 2) do not
        include the regression's change point in the change point estimator.
        That estimator is used as the midpoint of the next ramp, and including
        the change point from a poor regression can bake in the error. The
        controller already knows how to adjust for ramps that are too easy for
        the system.

        * Animometer/resources/runner/animometer.js:
        (this._processData.findRegression): Takes a preferred profile and gives that to
        Regression.
        (this._processData.calculateScore): With the ramp controller, take the profile
        of the ramp that was used the most when calculating the ramp's regression. That
        profile is what is used for the test's score.
        * Animometer/resources/statistics.js:
        (Regression.Utilities.createClass): Update to take an options object which can
        specify a profile to calculate with. Otherwise it will continue to use both and
        select the one with the lower error.
        (_calculateRegression): Fix an issue where we claim 0 error if the regression
        calculation fails due to divide-by-zero. Instead reject that regression calculation
        by giving it Number.MAX_VALUE.
        * Animometer/resources/strings.js: New strings for marking a regression as flat
        or slope.
        * Animometer/tests/resources/main.js:
        (RampController): Rename the thresholds for clarity. Add a threshold that, if
        exceeded, will lower the maximum complexity of the next ramp.
        (tune): Relax the cdf check to consider whether the interval definitely falls in
        the desired frame length threshold.
        (processSamples): Include the profile in the ramp.

        Update ramp controller test. Increase the length of the test to 30 seconds, and extend
        the interval to 120 ms during sampling. Improve the estimation of the ramp parameters.

        * Animometer/developer.html: Change default to 30 seconds, and don't show the progress bar
        by default.
        * Animometer/resources/runner/animometer.js: Change default to 30 seconds.
        * Animometer/tests/resources/main.js: A number of improvements to the ramp controller, in
        the order in which they appear in the patch:

        - With a longer test length use longer ramps with longer intervals to get more data at each
        complexity. Keep the 100 ms interval length during the ramp up phase since we don't need to
        spend more time there to find the right order of magnitude, but increase it during the
        ramps to 120 ms.
        - The ramp linearly interpolates the complexity to render based on its timestamp, but it would
        never sample the minimum complexity. Instead of lerping max to min complexity from time
        0 to t where t is the ramp length, instead lerp from 0 to (t - intervalSampleLength) so that
        we can have at least one interval sample at the min complexity for that ramp.
        - Some regression calculations only come out with one line segment rather than the two
        we expect. This could be due to a noisy ramp or the ramp's range is too narrow. If that's the
        case, influence the minimum complexity of the next ramp towards the lowest bound of 1, so that
        we ensure that at least part of the ramp is covering a complexity range that the system can
        handle at full 60.
        - Remove an assignment to interpolatedFrameLength since that is never subsequently used.

        Update the format used to serialize the results for analysis.

        Each data point used to have named properties for fields like complexity and frame rate.
        In addition the serialized numbers had rounding errors that took up many characters.
        Update the format by introducing a new data container called SampleData, which contains a
        field map. The map maps a string to an array index. Each data point is an array, so, to
        get a stat, use the field map to get the array index into the data point. This allows future
        versions to track other data, and reduces the size of the output string by two-thirds.

        * Animometer/resources/extensions.js:
        (Utilities.toFixedNumber): Add convenience function that truncates the number to a fixed
        precision, and converts it back to a number.
        (SampleData): New class that contains sample data and a field map that maps properties to
        an array index.
        (get length): Number of data points.
        (addField): Add a field to the field map.
        (push): Add a data point.
        (sort): Sort the data.
        (slice): Return new SampleData object with sliced data.
        (forEach): Iterate over the data with provided function.
        (createDatum):
        (getFieldInDatum): Returns the data point associated with the field name by looking it up
        in the field map in the datum provided, which can be the datum object itself (an array) or
        an index into the data member variable.
        (setFieldInDatum): Sets the data point associated with the field name.
        (at): Returns the data point at the provided index.
        (toArray): Serializes the data where the field map serves as property names for each point.

        * Animometer/resources/debug-runner/graph.js:
        (updateGraphData): Remove unused _testData. Convert the data to the old array format for the
        graph to use, since the old format was much easier to work with when displaying the graphs.
        (onGraphTypeChanged): For some controllers, no alternative score or mean is provided.
        * Animometer/resources/runner/animometer.css:
        * Animometer/resources/runner/animometer.js: Refactor to use SampleData. Update JSON output
        to only go to 3 digits of precision for purposes of reducing the data size.
        * Animometer/resources/strings.js: Add new strings to put into the field maps.
        * Animometer/tests/resources/main.js: Refactor to use SampleData.

        * Animometer/developer.html:
        * Animometer/index.html: Restructure results table for both pages. Add charset attribute to
        tests.js include.
        * Animometer/resources/debug-runner/animometer.css: Clear out styles from release runner.
        * Animometer/resources/debug-runner/graph.js:
        (onGraphTypeChanged): Update score and mean if bootstrap results are available from the
        controller, since not all controllers do bootstrapping.
        * Animometer/resources/debug-runner/tests.js: Update header text.
        * Animometer/resources/runner/animometer.css: Include confidence interval in results.
        * Animometer/resources/runner/animometer.js:
        (ResultsTable._addHeader): Header contents can be HTML, so use innerHTML instead.
        (ResultsTable._addBody): Add tbody element.
        (ResultsTable._addTest): Allow a data cell to invoke a JS function to get its contents.
        (window.benchmarkController.showResults): Add table that includes tests' confidence intervals.
        * Animometer/resources/runner/tests.js:
        (Headers.details.text): Add new details table that includes bootstrap confidence interval.
        The interval can be asymmetric, but for simplicity, report the maximum deviation percentage
        on either side of the bootstrap median.
        * Animometer/resources/statistics.js:
        (bootstrap): Include the confidence percentage in the return object.

        Report canvas size in results.

        * Animometer/developer.html: Add markup to indicate whether a small, medium, or large
        canvas was used.
        * Animometer/index.html: Ditto.
        * Animometer/resources/debug-runner/animometer.js: Call determineCanvasSize().
        * Animometer/resources/runner/animometer.css: Update styles to set the canvas based on the
        body class size.
        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.initialize): Update styles to set the canvas based on the
        body class size.
        (window.benchmarkController.determineCanvasSize): Run various media queries and set the body
        class based on the size of the device.

        * Animometer/developer.html: Refactor to include the main CSS file, and redo
        the layout so that it doesn't rely on flexbox.
        * Animometer/resources/debug-runner/animometer.css:
        * Animometer/resources/debug-runner/animometer.js:
        (updateDisplay): Since various parts of the script alter the body class, we can't
        replace the className directly. Instead, remove all display-based values and then add
        the one that was selected.
        * Animometer/resources/debug-runner/graph.js:
        (updateGraphData): To set the size of the graph, use window.innerHeight.
        * Animometer/resources/runner/animometer.js:
        (window.sectionsManager.showSection): Since various parts of the script alter the body
        class, we can't replace the className directly. Remove all of the section classes
        individually and then add the one desired.
        * Animometer/tests/resources/stage.css: Remove -apple-system as a font to use in the
        stage.

2016-06-12  Filip Pizlo  <fpizlo@apple.com>

        Fix round-down goof in Air.js's ShuffleCustom.forEachArg
        https://bugs.webkit.org/show_bug.cgi?id=158674

        Reviewed by Michael Saboff.
        
        x / 3 * 3 is not how you round down to multiples of 3 in JavaScript. You need to do
        Math.floor(x / 3) * 3 instead.
        
        This is a benign change, because having extra arguments to a Shuffle is not something we
        actually take advantage of yet. But I think it's best to match the original C++ code's
        intent.

        * Air.js/custom.js:
        (const.ShuffleCustom.forEachArg):

2016-06-11  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, skip Air.js. It got unskipped when I renamed it from JSAir.

        * Skipped:

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        Make it easy to package Air.js
        https://bugs.webkit.org/show_bug.cgi?id=158652

        Reviewed by Benjamin Poulain.
        
        If you want to give Air.js to someone, you can now do:
        
        cd PerformanceTests/Air.js
        ./make_dist.sh
        
        This will create Air.js.tar.gz and a directory called Air.js. If you want to send someone
        the benchmark, just send either of those things and tell them to look at index.html.
        
        You may have to edit make_dist.sh for wherever you have Markdown.pl. You can get that from
        https://daringfireball.net/projects/markdown/

        * Air.js/make_dist.sh: Added.
        * Air.js/test.html:

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, make the link to test.html into an actual link.

        * Air.js/README.md:

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        Fix some text in Air.js/README.md
        https://bugs.webkit.org/show_bug.cgi?id=158650

        Reviewed by Benjamin Poulain.
        
        I read the text again and found bugs:
        
        - We never actually say how to run the benchmark. This change adds a blurb about how to run
          it.

        - We both say that allocateStack is responsible for the bulk of the running time and that
          we haven't measured where the bulk of the time is spent. This changes the text to say that
          it was a goal to make allocateStack be the hottest part of the benchmark, but that we did
          not measure this.

        * Air.js/README.md:

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        Air.js should have some documentation
        https://bugs.webkit.org/show_bug.cgi?id=158648

        Reviewed by Keith Miller.
        
        I want to be able to point people at a document if they want to know more about this
        benchmark.

        * Air.js/README.md: Added.

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        Rename JSAir to Air.js.

        Rubber stamped by Mark Lam.

        * Air.js: Copied from PerformanceTests/JSAir.
        * Air.js/airjs-tests.yaml: Copied from PerformanceTests/JSAir/jsair-tests.yaml.
        * Air.js/benchmark.js: Copied from PerformanceTests/JSAir/benchmark.js.
        (Benchmark):
        * Air.js/jsair-tests.yaml: Removed.
        * Air.js/payload-airjs-ACLj8C.js: Copied from PerformanceTests/JSAir/payload-jsair-ACLj8C.js.
        * Air.js/payload-jsair-ACLj8C.js: Removed.
        * Air.js/stress-test.js: Copied from PerformanceTests/JSAir/stress-test.js.
        * Air.js/test.html: Copied from PerformanceTests/JSAir/test.html.
        * Air.js/test.js: Copied from PerformanceTests/JSAir/test.js.
        * JSAir: Removed.
        * JSAir/all.js: Removed.
        * JSAir/allocate_stack.js: Removed.
        * JSAir/arg.js: Removed.
        * JSAir/basic_block.js: Removed.
        * JSAir/benchmark.js: Removed.
        * JSAir/code.js: Removed.
        * JSAir/custom.js: Removed.
        * JSAir/frequented_block.js: Removed.
        * JSAir/insertion_set.js: Removed.
        * JSAir/inst.js: Removed.
        * JSAir/jsair-tests.yaml: Removed.
        * JSAir/liveness.js: Removed.
        * JSAir/opcode.js: Removed.
        * JSAir/payload-gbemu-executeIteration.js: Removed.
        * JSAir/payload-imaging-gaussian-blur-gaussianBlur.js: Removed.
        * JSAir/payload-jsair-ACLj8C.js: Removed.
        * JSAir/payload-typescript-scanIdentifier.js: Removed.
        * JSAir/reg.js: Removed.
        * JSAir/stack_slot.js: Removed.
        * JSAir/stress-test.js: Removed.
        * JSAir/strip-hash.rb: Removed.
        * JSAir/symbols.js: Removed.
        * JSAir/test.html: Removed.
        * JSAir/test.js: Removed.
        * JSAir/tmp.js: Removed.
        * JSAir/tmp_base.js: Removed.
        * JSAir/util.js: Removed.

2016-06-10  Filip Pizlo  <fpizlo@apple.com>

        JSC Stress Test failing: jsair-tests.yaml/test.js.ftl-eager-no-cjit
        https://bugs.webkit.org/show_bug.cgi?id=158571

        Reviewed by Keith Miller.
        
        Introduce a different harness for run-jsc-stress-tests, which runs for a minimum of 10
        iterations and then tries to do any number of "bonus" iterations until it's been running for
        two seconds. Since this is the sort of test that isn't really meant to stress anything in
        particular, I think it's OK if it is time-limited in this way. The worst case is that some
        of its failures will be flaky, but I think that they would have been flaky anyway given the
        complexity of the test.

        * JSAir/benchmark.js:
        (Benchmark):
        (Benchmark.prototype.runIteration):
        (benchmark): Deleted.
        * JSAir/jsair-tests.yaml:
        * JSAir/stress-test.js: Added.
        (preciseTime):
        * JSAir/test.html:
        * JSAir/test.js:

2016-06-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, teach the perf bots not to run JSAir.

        * Skipped:

2016-06-08  Filip Pizlo  <fpizlo@apple.com>

        Use more ES6 features in JSAir
        https://bugs.webkit.org/show_bug.cgi?id=158497

        Reviewed by Keith Miller.
        
        This improves JSAir with the following ES6 features suggested by JoePeck:
        
        - String interpolation.
        - Destructuring inside PatchCustom.
        - Default arguments.
        
        All of these things are on hot paths.
        
        Note that I didn't use string interpolation everywhere that I could, only in those places
        where it made the code more readable. In Ruby, I used the style that if the interpolation
        expression has any non-trivial stuff (like a ternary operator, a chain of calls, or embedded
        strings) then it's better to use regular strcat. I think that's what I carried over to here.
        
        Note that the previous change (Add result validation to JSAir) also made the Proxy code not
        dead, though it's not necessarily on the hot path. The Proxy isn't called into frequently
        but it's used from a function that is otherwise hot, so if calling into the Proxy prevents
        that function from being optimized then it will hurt so good.
        
        I also reenabled tail calls in a few places.
        
        This change doesn't seem to change the performance of the benchmark for us. That's expected
        since these ES6 features are cheap. Note that this claim doesn't include Proxy, which was
        added in a separate change and that change did make the benchmark overall more expensive.

        * JSAir/allocate_stack.js:
        (allocateStack):
        * JSAir/arg.js:
        (Arg.createBitImm64):
        (Arg.createAddr):
        (Arg.createStack):
        (Arg.logScale):
        (Arg.createIndex):
        * JSAir/basic_block.js:
        (BasicBlock.get headerString):
        (BasicBlock.prototype.get if):
        (BasicBlock):
        * JSAir/benchmark.js:
        (benchmark):
        * JSAir/code.js:
        (Code):
        (Code.prototype.addBlock):
        (Code.prototype.addStackSlot):
        (Code.prototype.newTmp):
        (Code.prototype.get size):
        (Code.prototype.get blocks):
        (Code.prototype.get stackSlots):
        (Code.prototype.tmps):
        (Code.prototype.get callArgAreaSize):
        (Code.prototype.toString):
        * JSAir/custom.js:
        (const.PatchCustom.forEachArg):
        * JSAir/inst.js:
        (Inst):
        * JSAir/reg.js:
        (Reg.prototype.toString):
        * JSAir/util.js:
        (symbolName):
        (lowerSymbolName):

2016-06-07  Filip Pizlo  <fpizlo@apple.com>

        Add result validation to JSAir
        https://bugs.webkit.org/show_bug.cgi?id=158493

        Reviewed by Saam Barati.
        
        This adds the ability to hash a Code in a way that matches the C++ code's hashing of Code.
        This allows us to check if the Code that JSAir sees is the code that C++ saw. We use this to
        check the Code before and after allocateStack, and compare against hashes we got from C++.
        
        Doing this uncovered bugs. roundUpToMultipleOf wasn't doing anything. allocateStack was not
        allocating things correctly because I was concatting a Set to an Array, which doesn't really
        work. Now these bugs are fixed.
        
        The checking step adds to the running time so I reduced the number of iterations. The
        benchmark spends a decent amount of its time computing Code hashes; I think it's around 1/3
        total. This is probably OK. It's better to verify the results even if the running time is
        not all in the "core" of the algorithm.
        
        Also add a run-jsc-stress-tests yaml file to allow this to run as a test.

        * JSAir/allocate_stack.js:
        * JSAir/arg.js:
        (Arg.createImm):
        (Arg.createBigImm):
        (Arg.createBitImm):
        (Arg.createBitImm64):
        (Arg.createWidth):
        (Arg.createSpecial):
        (Arg.prototype.get kind):
        (Arg.prototype.get isTmp):
        (Arg.prototype.get isImm):
        (Arg.prototype.get isSomeImm):
        (Arg.prototype.get isSomeBigImm):
        (Arg.prototype.get isCondition):
        (Arg.prototype.get isWidth):
        (Arg.prototype.get isSpecial):
        (Arg.prototype.get isAlive):
        (Arg.prototype.get tmp):
        (Arg.prototype.get value):
        (Arg.prototype.get lowValue):
        (Arg.prototype.get highValue):
        (Arg.prototype.get base):
        (Arg.prototype.get isGP):
        (Arg.prototype.get isFP):
        (Arg.prototype.isValidForm):
        (Arg.prototype.get isInvertible):
        (Arg.kindCode):
        (Arg.prototype.hash):
        (Arg.prototype.toString):
        (Arg):
        * JSAir/basic_block.js:
        (BasicBlock.get successorBlocks):
        * JSAir/benchmark.js:
        (benchmark):
        * JSAir/code.js:
        (Code.prototype.setFrameSize):
        (Code.prototype.hash):
        (Code.prototype.toString):
        (Code):
        * JSAir/inst.js:
        (Inst.prototype.get hasNonArgEffects):
        (Inst.prototype.hash):
        (Inst.prototype.toString):
        (Inst):
        * JSAir/jsair-tests.yaml: Added.
        * JSAir/opcode.js:
        (Inst_forEachArg):
        (Inst_hasNonArgEffects):
        (opcodeCode):
        * JSAir/payload-gbemu-executeIteration.js:
        (createPayloadGbemuExecuteIteration):
        * JSAir/payload-imaging-gaussian-blur-gaussianBlur.js:
        (createPayloadImagingGaussianBlurGaussianBlur):
        * JSAir/payload-jsair-ACLj8C.js:
        (createPayloadJSAirACLj8C):
        * JSAir/payload-typescript-scanIdentifier.js:
        (createPayloadTypescriptScanIdentifier):
        * JSAir/reg.js:
        (Reg.prototype.get isReg):
        (Reg.prototype.hash):
        (Reg.prototype.toString):
        * JSAir/stack_slot.js:
        (StackSlot.prototype.setOffsetFromFP):
        (StackSlot.prototype.hash):
        (StackSlot.prototype.toString):
        * JSAir/symbols.js:
        (relCondCode):
        (resCondCode):
        (doubleCondCode):
        * JSAir/test.html:
        * JSAir/tmp.js:
        (Tmp.prototype.get isReg):
        (Tmp.prototype.hash):
        (Tmp.prototype.toString):
        * JSAir/util.js:
        (roundUpToMultipleOf):
        (symbolName):

2016-06-07  Filip Pizlo  <fpizlo@apple.com>

        Implement Air::allocateStack() in ES6 to see how much of a bad idea that is
        https://bugs.webkit.org/show_bug.cgi?id=158318

        Reviewed by Saam Barati.
        
        This adds a new benchmark for us to play with called JSAir. It's a complete ES6
        implementation of Air's allocateStack() phase along with all of Air needed to run that
        phase. This includes things like stack slots, registers, temporaries, basic blocks,
        instructions, and all of the code for iterating over, inspecting, and modifying those
        things.
        
        To make this work, JSC can now dump Air just before allocateStack() in the form of JS code
        that creates a Code object that matches exactly what C++ Air saw. This benchmark comprises
        four Air IRs:
        
        - Octane/gbemu's largest function, executeIteration.
        - Kraken/imaging-gaussian-blur's largest function in OSR entry mode, gaussuanBlur.
        - Octane/typescript's largest function that is actually hot, scanIdentifier.
        - JSAir's largest hot function, which is anonymous, so we call it by its hash (ACLj8C).
        
        This runs in about 2 seconds on my machine in JSC trunk. It includes both a commandline
        harness and a web harness. JSAir is almost exactly 100x slower in ES6 in WebKit than the
        C++ Air::allocateStack() phase on which it is based.
        
        JSAir uses the following ES6 features:
        
        - Symbol.
        - for-of.
        - arrow functions.
        - Map/Set.
        - let/const.
        - classes.
        
        All of these things are used in anger and should end up on the hot path. There is also code
        that uses Proxies, but it ends up being dead.
        
        We can improve this even more:
        I still need to add result validation: https://bugs.webkit.org/show_bug.cgi?id=158493
        I want to make it use more ES6 features: https://bugs.webkit.org/show_bug.cgi?id=158497
        
        * JSAir: Added.
        * JSAir/all.js: Added.
        * JSAir/allocate_stack.js: Added.
        (allocateStack.attemptAssignment):
        (allocateStack.assign):
        (allocateStack.interfere):
        (allocateStack.):
        (allocateStack):
        * JSAir/arg.js: Added.
        (Arg):
        (Arg.isAnyUse):
        (Arg.isColdUse):
        (Arg.isWarmUse):
        (Arg.cooled):
        (Arg.isEarlyUse):
        (Arg.isLateUse):
        (Arg.isAnyDef):
        (Arg.isEarlyDef):
        (Arg.isLateDef):
        (Arg.isZDef):
        (Arg.typeForB3Type):
        (Arg.widthForB3Type):
        (Arg.conservativeWidth):
        (Arg.minimumWidth):
        (Arg.bytes):
        (Arg.widthForBytes):
        (Arg.createTmp):
        (Arg.fromReg):
        (Arg.createImm):
        (Arg.createBigImm):
        (Arg.createBitImm):
        (Arg.createBitImm64):
        (Arg.createAddr):
        (Arg.createStack):
        (Arg.createCallArg):
        (Arg.createStackAddr):
        (Arg.isValidScale):
        (Arg.logScale):
        (Arg.createIndex):
        (Arg.createRelCond):
        (Arg.createResCond):
        (Arg.createDoubleCond):
        (Arg.createWidth):
        (Arg.prototype.get kind):
        (Arg.prototype.get isTmp):
        (Arg.prototype.get isImm):
        (Arg.prototype.get isBigImm):
        (Arg.prototype.get isBitImm):
        (Arg.prototype.get isBitImm64):
        (Arg.prototype.get isSomeImm):
        (Arg.prototype.get isAddr):
        (Arg.prototype.get isStack):
        (Arg.prototype.get isCallArg):
        (Arg.prototype.get isIndex):
        (Arg.prototype.get isMemory):
        (Arg.prototype.get isStackMemory):
        (Arg.prototype.get isRelCond):
        (Arg.prototype.get isResCond):
        (Arg.prototype.get isDoubleCond):
        (Arg.prototype.get isCondition):
        (Arg.prototype.get isWidth):
        (Arg.prototype.get isAlive):
        (Arg.prototype.get tmp):
        (Arg.prototype.get value):
        (Arg.prototype.get base):
        (Arg.prototype.get hasOffset):
        (Arg.prototype.get offset):
        (Arg.prototype.get stackSlot):
        (Arg.prototype.get index):
        (Arg.prototype.get scale):
        (Arg.prototype.get logScale):
        (Arg.prototype.get width):
        (Arg.prototype.get isGPTmp):
        (Arg.prototype.get isFPTmp):
        (Arg.prototype.get isGP):
        (Arg.prototype.get isFP):
        (Arg.prototype.get hasType):
        (Arg.prototype.get type):
        (Arg.prototype.isType):
        (Arg.prototype.isCompatibleType):
        (Arg.prototype.get isGPR):
        (Arg.prototype.get gpr):
        (Arg.prototype.get isFPR):
        (Arg.prototype.get fpr):
        (Arg.prototype.get isReg):
        (Arg.prototype.get reg):
        (Arg.isValidImmForm):
        (Arg.isValidBitImmForm):
        (Arg.isValidBitImm64Form):
        (Arg.isValidAddrForm):
        (Arg.isValidIndexForm):
        (Arg.prototype.isValidForm):
        (Arg.prototype.forEachTmpFast):
        (Arg.prototype.usesTmp):
        (Arg.prototype.forEachTmp):
        (Arg.prototype.is):
        (Arg.prototype.as):
        (Arg.prototype.forEachFast):
        (Arg.prototype.forEach):
        (Arg.extract):
        (Arg.forEachFast):
        (Arg.forEach):
        (Arg.prototype.get condition):
        (Arg.prototype.get isInvertible):
        (Arg.prototype.toString):
        * JSAir/basic_block.js: Added.
        (BasicBlock):
        (BasicBlock.prototype.get index):
        (BasicBlock.prototype.get size):
        (BasicBlock.prototype.Symbol.iterator):
        (BasicBlock.prototype.at):
        (BasicBlock.get last):
        (BasicBlock.get insts):
        (BasicBlock.get numSuccessors):
        (BasicBlock.get successors):
        (BasicBlock.get successorBlocks.):
        (BasicBlock.get successorBlocks):
        (BasicBlock.set get numPredecessors):
        (BasicBlock.get predecessors):
        (BasicBlock.get frequency):
        (BasicBlock.get headerString):
        (BasicBlock.get footerString):
        * JSAir/benchmark.js: Added.
        (benchmark):
        * JSAir/code.js: Added.
        (Code):
        (Code.prototype.addBlock):
        (Code.prototype.addStackSlot):
        (Code.prototype.newTmp):
        (Code.prototype.get size):
        (Code.prototype.at):
        (Code.prototype.Symbol.iterator):
        (Code.prototype.get blocks):
        (Code.prototype.get stackSlots):
        (Code.prototype.tmps):
        (Code.prototype.get callArgAreaSize):
        (Code.prototype.requestCallArgAreaSize):
        (Code.prototype.get frameSize):
        (Code.prototype.setFrameSize):
        (Code.prototype.toString):
        * JSAir/custom.js: Added.
        (const.ShuffleCustom.forEachArg):
        (const.ShuffleCustom.hasNonArgNonControlEffects):
        (const.PatchCustom.forEachArg):
        (const.PatchCustom.hasNonArgNonControlEffects):
        (const.CCallCustom.forEachArg):
        (const.CCallCustom.hasNonArgNonControlEffects):
        (const.ColdCCallCustom.forEachArg):
        (const.ColdCCallCustom.hasNonArgNonControlEffects):
        * JSAir/frequented_block.js: Added.
        (FrequentedBlock):
        (FrequentedBlock.prototype.toString):
        * JSAir/insertion_set.js: Added.
        (Insertion):
        (Insertion.prototype.get index):
        (Insertion.prototype.get element):
        (Insertion.prototype.lessThan):
        (InsertionSet):
        (InsertionSet.prototype.appendInsertion):
        (InsertionSet.prototype.append):
        (InsertionSet.prototype.execute):
        * JSAir/inst.js: Added.
        (Inst):
        (Inst.prototype.append):
        (Inst.prototype.clear):
        (Inst.prototype.get opcode):
        (Inst.prototype.get args):
        (Inst.prototype.visitArg):
        (Inst.prototype.forEachTmpFast):
        (Inst.prototype.forEachArg):
        (Inst.prototype.forEachTmp):
        (Inst.prototype.forEach):
        (Inst.forEachDef):
        (Inst.forEachDefWithExtraClobberedRegs):
        (Inst.prototype.get hasNonArgEffects):
        (Inst.prototype.toString):
        * JSAir/liveness.js: Added.
        (Liveness):
        (Liveness.prototype.get thing):
        (Liveness.prototype.get code):
        (Liveness.prototype.get liveAtHead):
        (Liveness.prototype.get liveAtTail):
        (Liveness.prototype.localCalc.LocalCalc):
        (Liveness.prototype.localCalc.LocalCalc.prototype.get liveSet):
        (Liveness.prototype.localCalc.LocalCalc.prototype.execute):
        (Liveness.prototype.localCalc):
        * JSAir/opcode.js: Added.
        (Inst_forEachArg):
        (Inst_hasNonArgEffects):
        * JSAir/payload-gbemu-executeIteration.js: Added.
        (createPayloadGbemuExecuteIteration):
        * JSAir/payload-imaging-gaussian-blur-gaussianBlur.js: Added.
        (createPayloadImagingGaussianBlurGaussianBlur):
        * JSAir/payload-jsair-ACLj8C.js: Added.
        (createPayloadJSAirACLj8C):
        * JSAir/payload-typescript-scanIdentifier.js: Added.
        (createPayloadTypescriptScanIdentifier):
        * JSAir/reg.js: Added.
        (Reg):
        (Reg.fromReg):
        (Reg.prototype.get index):
        (Reg.prototype.get type):
        (Reg.prototype.get name):
        (Reg.prototype.get isCalleeSave):
        (Reg.prototype.get isReg):
        (Reg.prototype.toString):
        (Reg.extract):
        (Reg.forEachFast):
        (Reg.forEach):
        (newGPR):
        (Reg.gprs.Reg.fprs.Reg.calleeSaveGPRs.Reg.calleeSaveFPRs.Reg.calleeSaves):
        * JSAir/stack_slot.js: Added.
        (StackSlot):
        (StackSlot.prototype.get byteSize):
        (StackSlot.prototype.get kind):
        (StackSlot.prototype.get isLocked):
        (StackSlot.prototype.get isSpill):
        (StackSlot.prototype.get index):
        (StackSlot.prototype.ensureSize):
        (StackSlot.prototype.get alignment):
        (StackSlot.prototype.get offsetFromFP):
        (StackSlot.prototype.setOffsetFromFP):
        (StackSlot.prototype.toString):
        (StackSlot.extract):
        (StackSlot.forEachFast):
        (StackSlot.forEach):
        * JSAir/symbols.js: Added.
        * JSAir/test.html: Added.
        * JSAir/test.js: Added.
        * JSAir/tmp.js: Added.
        (Tmp):
        (Tmp.fromReg):
        (Tmp.prototype.get index):
        (Tmp.prototype.get type):
        (Tmp.prototype.get isReg):
        (Tmp.prototype.toString):
        (Tmp.extract):
        (Tmp.forEachFast):
        (Tmp.forEach):
        * JSAir/tmp_base.js: Added.
        (TmpBase.prototype.get isGP):
        (TmpBase.prototype.get isFP):
        (TmpBase.prototype.get isGPR):
        (TmpBase.prototype.get isFPR):
        (TmpBase.prototype.get reg):
        (TmpBase.prototype.get gpr):
        (TmpBase.prototype.get fpr):
        (TmpBase):
        * JSAir/util.js: Added.
        (isRepresentableAsInt32):
        (addIndexed):
        (roundUpToMultipleOf):
        (symbolName):
        (mergeIntoSet):
        (nonEmptyRangesOverlap):
        (rangesOverlap):
        (removeAllMatching):
        (swap):
        (bubble):
        (bubbleSort):
        (currentTime):
        (else.currentTime):

2016-05-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Allow JSBench to use precise time
        https://bugs.webkit.org/show_bug.cgi?id=158050

        Reviewed by Geoffrey Garen.

        * JSBench/amazon-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-firefox-win/urm.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-firefox/urm.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/amazon-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-firefox/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/facebook-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-firefox/uem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/google-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/harness.js:
        (runBenchmark.window.currentTimeInMS):
        (runBenchmark.else.window.currentTimeInMS):
        * JSBench/twitter-chrome-win/rem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-firefox/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/twitter-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-chrome-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-chrome/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-firefox-win/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-firefox/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):
        * JSBench/yahoo-safari/urem.js:
        (else.window.performance.window.performance.now.currentTimeInMS):
        (else.else.typeof.preciseTime.string_appeared_here.currentTimeInMS):
        (else.else.currentTimeInMS):
        (onload.cb):
        (onload):

2016-05-25  Geoffrey Garen  <ggaren@apple.com>

        replaceable own properties seem to ignore replacement after property caching
        https://bugs.webkit.org/show_bug.cgi?id=158091

        Reviewed by Darin Adler.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::doMallocOp):
        * MallocBench/MallocBench/Interpreter.h:
        * MallocBench/MallocBench/fastMallocLog.63316.ops: Added.
        * MallocBench/MallocBench/jetstream.cpp: Added.
        (benchmark_jetstream):
        * MallocBench/MallocBench/jetstream.h: Added.

2016-05-25  Keith Miller  <keith_miller@apple.com>

        Unreviewed, add JSBench to the skipped list for now since it doesn't
        work currently.

        * Skipped:

2016-05-17  Keith Miller  <keith_miller@apple.com>
        We should have JSBench in PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=157952

        Rubber-stamped by Saam Barati.

        There are some slight changes to the layout of the test directory
        to make it work nicely with run-jsc-benchmarks. Before JSBench
        had each of the browser specific sub-tests in a sub-directory.
        These have been flattened e.g. amazon/safari/ has become
        amazon-safari/.

        * JSBench/amazon-chrome-win/urem.html: Added.
        * JSBench/amazon-chrome-win/urem.js: Added.
        * JSBench/amazon-chrome/urem.html: Added.
        * JSBench/amazon-chrome/urem.js: Added.
        * JSBench/amazon-firefox-win/urm.html: Added.
        * JSBench/amazon-firefox-win/urm.js: Added.
        * JSBench/amazon-firefox/urm.html: Added.
        * JSBench/amazon-firefox/urm.js: Added.
        * JSBench/amazon-safari/urem.html: Added.
        * JSBench/amazon-safari/urem.js: Added.
        * JSBench/browsercheck.js: Added.
        * JSBench/facebook-chrome-win/urem.html: Added.
        * JSBench/facebook-chrome-win/urem.js: Added.
        * JSBench/facebook-chrome/urem.html: Added.
        * JSBench/facebook-chrome/urem.js: Added.
        * JSBench/facebook-firefox-win/urem.html: Added.
        * JSBench/facebook-firefox-win/urem.js: Added.
        * JSBench/facebook-firefox/urem.html: Added.
        * JSBench/facebook-firefox/urem.js: Added.
        * JSBench/facebook-safari/urem.html: Added.
        * JSBench/facebook-safari/urem.js: Added.
        * JSBench/google-chrome-win/urem.html: Added.
        * JSBench/google-chrome-win/urem.js: Added.
        * JSBench/google-chrome/urem.html: Added.
        * JSBench/google-chrome/urem.js: Added.
        * JSBench/google-firefox-win/urem.html: Added.
        * JSBench/google-firefox-win/urem.js: Added.
        * JSBench/google-firefox/uem.html: Added.
        * JSBench/google-firefox/uem.js: Added.
        * JSBench/google-safari/urem.html: Added.
        * JSBench/google-safari/urem.js: Added.
        * JSBench/harness.html: Added.
        * JSBench/harness.js: Added.
        * JSBench/harness.py: Added.
        * JSBench/index.html: Added.
        * JSBench/reload.html: Added.
        * JSBench/twitter-chrome-win/rem.html: Added.
        * JSBench/twitter-chrome-win/rem.js: Added.
        * JSBench/twitter-chrome/urem.html: Added.
        * JSBench/twitter-chrome/urem.js: Added.
        * JSBench/twitter-firefox-win/urem.html: Added.
        * JSBench/twitter-firefox-win/urem.js: Added.
        * JSBench/twitter-firefox/urem.html: Added.
        * JSBench/twitter-firefox/urem.js: Added.
        * JSBench/twitter-safari/urem.html: Added.
        * JSBench/twitter-safari/urem.js: Added.
        * JSBench/yahoo-chrome-win/urem.html: Added.
        * JSBench/yahoo-chrome-win/urem.js: Added.
        * JSBench/yahoo-chrome/urem.html: Added.
        * JSBench/yahoo-chrome/urem.js: Added.
        * JSBench/yahoo-firefox-win/urem.html: Added.
        * JSBench/yahoo-firefox-win/urem.js: Added.
        * JSBench/yahoo-firefox/urem.html: Added.
        * JSBench/yahoo-firefox/urem.js: Added.
        * JSBench/yahoo-safari/urem.html: Added.
        * JSBench/yahoo-safari/urem.js: Added.

2016-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        run-benchmark's results should contain Animometer's debug output
        https://bugs.webkit.org/show_bug.cgi?id=157941

        Reviewed by Stephanie Lewis.

        Made developer.html support the JSON generated by run-benchmark which stores everything under debugOutput.

        * Animometer/resources/debug-runner/animometer.js:
        (Utilities.initialize): Unwrap debugOutput in the case run-benchmark's result JSON is used.

2016-05-18  Timothy Hatcher  <timothy@apple.com>

        Make Animometer work in all browsers
        https://bugs.webkit.org/show_bug.cgi?id=157855
        rdar://problem/26338521

        Reviewed by Jon Lee.

        * Animometer/resources/runner/logo.svg: Use a symbol instead
        of putting the id on the root svg. This works in all browsers.

2016-05-07  Timothy Hatcher  <timothy@apple.com>

        Update Animometer design
        https://bugs.webkit.org/show_bug.cgi?id=157449

        Reviewed by Darin Adler.

        * Animometer/developer.html: Stop including runner/animometer.css.
        * Animometer/index.html: Udpated elements to fit new styles.

        * Animometer/resources/debug-runner/animometer.css:
        Copy the old runner/animometer.css to here so the debug runner is unaffected.

        * Animometer/resources/runner/animometer.css:
        New styles for the design. Drop flex box for broad browser support.

        * Animometer/resources/runner/animometer.js:
        (ResultsTable.clear): Use textContent.
        (window.sectionsManager.showSection): Add class to the body.
        (window.sectionsManager.setSectionScore): Use textContent, not innerHTML.

        * Animometer/resources/runner/crystal.svg: Added.
        * Animometer/resources/runner/lines.svg: Added.
        * Animometer/resources/runner/logo.svg: Added.

        * Animometer/resources/runner/tests.js: Shorten test name and title case them.

2016-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Unprefix CSS Grid Layout properties
        https://bugs.webkit.org/show_bug.cgi?id=157137

        Reviewed by Simon Fraser.

        Remove "-webkit" prefix from all the grid layout properties,
        including the display value.
        Update the source code to remove the prefix where it was used too.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-stretched-data.html:

2016-04-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Misc improvements to MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=157004

        Reviewed by Darin Adler.

        * MallocBench/run-malloc-benchmarks: Added --memory and --memory_warning
        modes for focused memory testing.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::printReport): Clarified output.

        (Benchmark::currentMemoryBytes): Added compressed memory because top
        does the same. (It always happens to zero in the benchmarks we run. But
        this is good for sanity.)

        * MallocBench/MallocBench/CommandLine.cpp: Moved up to 8 runs to reduce
        variance.

        * MallocBench/MallocBench/alloc_free.cpp:
        (benchmark_alloc_free): Cycle a single allocation in order to stress
        the effect of merging on calls to madvise.

        * MallocBench/MallocBench/big.cpp:
        (benchmark_big): Graduated to 8kB-128kB because medium tests up to 8 and
        our large allocator doesn't kick in until 64kB.

        * MallocBench/MallocBench/medium.cpp:
        (benchmark_medium): Test all the way down to 1kB because our large
        allocator used to service 1kB allocations and 1kB is an interesting
        middle size where memory is unusually large but allocation throughput
        still matters.

        * MallocBench/MallocBench/stress.cpp:
        (benchmark_stress): Reduced the churn count to match stress_aligned
        because this test was taking too long to complete.

        * MallocBench/MallocBench/stress_aligned.cpp:
        (benchmark_stress_aligned): Our new large allocator can handle even
        more absurdly large values.

2016-04-25  Simon Fraser  <simon.fraser@apple.com>

        Add a content animation test that uses SVG animation.
        https://bugs.webkit.org/show_bug.cgi?id=156827

        * Animation/svg-animation.html: Added.
        * Skipped:

2016-04-22  Simon Fraser  <simon.fraser@apple.com>

        Skip two content animation tests which are only meant for iOS testing.

        * Animation/css-animation.html: Added.
        * Animation/raf-animation.html: Added.

        * Skipped:

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827

        Add two files missing from the previous commit.

        * Animation/css-animation.html: Added.
        * Animation/raf-animation.html: Added.

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827

        Reviewed by Stephanie Lewis.

        Two new files for the content-animation suite.

        After patching for use in the benchmark, these tests are a little different to other benchmarks.
        The test content itself does not collect performance data; the tests spit out a boilerplate JSON
        result with a placeholder for framerate, which is collected in native code.

        When run as a benchmark, test completion involves a couple of bounces between the test and MobileSafari.
        Test completion is initiated by a setTimeout() in the test, at which point location.hash is set to "#done".
        MobileSafari detects that, and asynchronously dumps performance data. Once this is complete, MobileSafari
        changes the URL has to "#submit", which triggers the XHR to the test relay that indicates the test is
        complete.

        * Animation/css-animation.html: Added.
        * Animation/raf-animation.html: Added.

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
        https://bugs.webkit.org/show_bug.cgi?id=156449

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

        * Animometer/index.html: Wrap button in a container to add padding at the bottom.
        * Animometer/resources/debug-runner/animometer.css:
        (@media screen and (min-device-width: 1800px)): Deleted.
        (@media screen and (min-width: 1800px)): Cannot use min-device-width since it may match incorrectly.
        (screen and (max-device-height: 414px) and (orientation: landscape)): Some devices swap device width
        and height with orientation change.
        * Animometer/resources/runner/animometer.css: Similar.
        (screen and (min-device-width: 1024px) and (orientation: landscape)):
        (screen and (max-device-height: 414px) and (orientation: landscape)):
        (.frame-container): On smaller iPhones, adding 1px prevents the navigation bars from appearing.
        (@media screen and (min-device-width: 768px) and (max-device-width: 1024px)): Deleted.
        (@media (min-device-height: 768px) and (max-device-height: 1024px)): Target iPad Airs and similar.
        (@media screen and (min-device-width: 1024px) and (max-device-width: 1366px)): Deleted.
        (@media screen and (max-device-width: 1024px) and (min-device-height: 1366px)): Target iPad Pro.
        (#results footer): Add padding below the button for testing again.
        * Animometer/tests/master/multiply.html: Remove the center text.
        * Animometer/tests/master/resources/text.js: Update the test so that in every frame the text moves.
        * Animometer/tests/master/text.html: Update the text sizing depending on the size of the device.

2016-04-08  Jon Lee  <jonlee@apple.com>

        Have Animometer benchmark always start with complexity of 1
        https://bugs.webkit.org/show_bug.cgi?id=156432

        Reviewed by Ryosuke Niwa.

        * Animometer/tests/resources/main.js: Update the default Controller and RampController to
        set its minimum complexities to 1 instead of 0.

2016-04-08  Jon Lee  <jonlee@apple.com>

        Fix SVG benchmark test
        https://bugs.webkit.org/show_bug.cgi?id=156410

        Reviewed by Dean Jackson.

        * Animometer/resources/extensions.js: Update Point.zero to be a static Point.
        * Animometer/tests/simple/resources/tiled-canvas-image.js:
        (Stage.call._setupTiles): Refactor.
        * Animometer/tests/master/resources/particles.js:
        (Particle.prototype.reset): Use Point.center.
        (complexity): We are not using a gradient background anymore, so remove the +1.
        * Animometer/tests/master/resources/svg-particles.js: Update to use SVG transform
        instead of CSS transform.

2016-04-06  Jon Lee  <jonlee@apple.com>

        Update master benchmark with SVG test
        https://bugs.webkit.org/show_bug.cgi?id=156273

        Reviewed by Dean Jackson.
        Provisionally reviewed by Said Abou-Hallawa.

        Switch masks tests for SVG path test.

        * Animometer/resources/debug-runner/tests.js: Move mask test here.
        * Animometer/resources/runner/tests.js: Add SVG test here.
        * Animometer/tests/dom/particles.html: Renamed from PerformanceTests/Animometer/tests/master/particles.html.
        * Animometer/tests/dom/resources/dom-particles.js: Renamed from PerformanceTests/Animometer/tests/master/resources/dom-particles.js.

        * Animometer/tests/master/resources/particles.js: Add minPosition for bounds checking. Prevents particle from being
        partially obscured.
        * Animometer/tests/master/resources/svg-particles.js: Added.
        (Particle): The particle is either a path object or a rect using a path as a clip. The
        same path is used either way. For each particle create a linear gradient with a random
        rotation.
        (SVGParticlesStage): Look in #shapes to see how many different kinds of paths are available.
        This makes the test more generic in case other shapes need to be tested.
        * Animometer/tests/master/svg-particles.html: Added. Have two defs, one that houses each
        particle's gradient, and one that holds the shape templates.

2016-03-27  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] REGRESSION(r188793): It made 200 layout tests and Bindings/event-target-wrapper.html performance test fail
        https://bugs.webkit.org/show_bug.cgi?id=148470 

        Reviewed by Darin Adler.

        * Skipped: Unskip the Bindings/event-target-wrapper test.

2016-03-23  Jon Lee  <jonlee@apple.com>

        Update focus and leaves tests
        https://bugs.webkit.org/show_bug.cgi?id=155825

        Reviewed by Simon Fraser.

        Particles would improperly disappear, before they were fully off stage. Update the calculation.
        * Animometer/tests/dom/resources/leaves.js:
        * Animometer/tests/master/resources/leaves.js:

        * Animometer/tests/master/focus.html: Update the center element styling.
        * Animometer/tests/master/resources/focus.js:
        (FocusElement.Utilities.createClass): Give enough space in the container for each particle for the blur
        to spread. It should be about 3x more space than the blur radius on each side.
        (Stage.call.initialize): Ditto for the center element.

2016-03-23  Jon Lee  <jonlee@apple.com>

        Update support for other platforms
        https://bugs.webkit.org/show_bug.cgi?id=155824

        Reviewed by Simon Fraser.

        * Animometer/resources/debug-runner/animometer.css: Remove extraneous media query. All of it should
        be handled in the release stylesheet.
        * Animometer/resources/debug-runner/animometer.js: Add support for browsers that return an HTMLCollection
        when retrieving radio elements with a name, instead of the selected value.
        * Animometer/resources/runner/animometer.css: Adjust the queries for devices of varying widths.
        (.frame-container): Move overflow:hidden to #stage.
        * Animometer/tests/master/resources/stage.css: Consolidate into tests/resources/stage.css.
        * Animometer/tests/resources/stage.css:
        (body): Remove overflow:hidden.
        (#stage): Set overflow:hidden here.
        (#center-text): Moved from master/resources/stage.css.

        Update stylesheet hrefs.
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/master/focus.html:
        * Animometer/tests/master/leaves.html:
        * Animometer/tests/master/multiply.html:
        * Animometer/tests/master/particles.html:
        * Animometer/tests/master/text.html: Adjust text size to fit in the device screen.

2016-03-23  Jon Lee  <jonlee@apple.com>

        Make the benchmark require device to be in landscape orientation
        https://bugs.webkit.org/show_bug.cgi?id=155822
        rdar://problem/25258650

        Reviewed by Ryosuke Niwa.

        Check that the device is in landscape orientation. If not, disable the button to start it,
        and show a warning message.

        * Animometer/developer.html: Add a message about how the browser should be set up. Include a
        warning message that appears if the orientation is incorrect on mobile devices.
        * Animometer/index.html: Ditto.

        * Animometer/resources/debug-runner/animometer.css: Migrate the .hidden rule into the release
        stylesheet. Update the style to accommodate the new UI.
        * Animometer/resources/runner/animometer.css:

        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.initialize): Add the orientation listener is needed.
        (window.benchmarkController.addOrientationListenerIfNecessary): Only mobile devices need this. Check
        to see for support of window.orientation.
        (window.benchmarkController._orientationChanged): Toggle the warning based on whether we match the
        landscape query. Set a state variable, which is needed for the debug harness. Call updateStartButtonState.
        (window.benchmarkController.updateStartButtonState):
        * Animometer/resources/debug-runner/animometer.js: Change _updateStartButtonState to return
        a boolean about whether at least one test is selected. That will be used in
        benchmarkController.updateStartButtonState(). Move the load event listener to the release version.
        (window.benchmarkController.updateStartButtonState): Override the release version, and also check
        that at least one test is selected.

2016-03-22  Geoffrey Garen  <ggaren@apple.com>

        MallocBench: consolidate regression testing for aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=155762

        Reviewed by Michael Saboff.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/memalign.cpp: Removed.
        * MallocBench/MallocBench/memalign.h: Removed. The stress_aligned test
        covers this and much more.

        * MallocBench/MallocBench/stress_aligned.cpp:
        (benchmark_stress_aligned): Include specific tests for extreme sizes
        and alignments.

2016-03-21  Jon Lee  <jonlee@apple.com>

        Update benchmark tests
        https://bugs.webkit.org/show_bug.cgi?id=155723

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

        Add quadratic and bezier segments to the canvas path test.

        * Animometer/resources/runner/tests.js: Some of the query strings are unnecessary.
        Rename the test.
        * Animometer/tests/master/resources/canvas-stage.js:
        (tune): Update to be able to take an array of possible constructors. Choose one randomly.
        * Animometer/tests/master/resources/canvas-tests.js:
        (CanvasLinePoint.Utilities.createClass): Move the point selection out to a separate
        function called randomPoint() for reuse. Move X_LOOPS, Y_LOOPS, and offsets into the
        class definition.
        (randomPoint): Scale the grid down a little bit so that the lines along the edge of the
        canvas are not cut off when the stroke size is thick.
        (CanvasQuadraticSegment): Added.
        (CanvasBezierSegment): Added.
        (SimpleCanvasStage): Pass in an array of the different segment types. Since line segments
        are short compared to the curved ones, make it twice as likely to render a line segment.
        (SimpleCanvasStage.animate): Update the drawing code so that we render all line segments.

        Add a helper method that selects a random element from an array.

        * Animometer/tests/resources/main.js:
        (Stage.randomElementInArray): Select a random element from the provided array.

        * Animometer/tests/bouncing-particles/resources/bouncing-tagged-images.js: Refactor.
        * Animometer/tests/dom/resources/leaves.js: Ditto.
        * Animometer/tests/master/resources/dom-particles.js: Ditto.
        * Animometer/tests/master/resources/image-data.js: Ditto.
        * Animometer/tests/master/resources/leaves.js: Ditto.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Ditto.

        Add canvas tests that includes all stroke and fill paths. This makes it possible to avoid having to
        include the full simple canvas suite for perf testing.

        * Animometer/resources/debug-runner/tests.js: Add new tests. Move the canvas test into the Canvas
        suite.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Add a CanvasStroke and CanvasFill particle
        that random selects an object to render.

        * Animometer/resources/debug-runner/tests.js: Move 3D suite before basic canvas suite.
        When updating the perf bot script, we will include the suites up to this one, but exclude
        the basic canvas suite.

        Move compositing transforms test to HTML suite and remove the empty Miscellaneous suite.

        * Animometer/resources/debug-runner/tests.js:
        * Animometer/tests/dom/compositing-transforms.html: Renamed from PerformanceTests/Animometer/tests/misc/compositing-transforms.html.
        * Animometer/tests/dom/resources/compositing-transforms.js: Renamed from PerformanceTests/Animometer/tests/misc/resources/compositing-transforms.js.

        Clean up miscellaneous test suite. Add a canvas ellipse test, and remove the other
        canvas tests.

        * Animometer/resources/debug-runner/tests.js: Add ellipse tests to the simple suite.
        * Animometer/tests/misc/canvas-electrons.html: Removed.
        * Animometer/tests/misc/canvas-stars.html: Removed.
        * Animometer/tests/misc/resources/canvas-electrons.js: Removed.
        * Animometer/tests/misc/resources/canvas-stars.js: Removed.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Add ellipse primitives.

        Merge text tests together into one.

        * Animometer/resources/runner/tests.js: Remove international.html.
        * Animometer/tests/master/international.html: Removed.
        * Animometer/tests/master/resources/text.js:
        (animate): Update styling. Manually calculate gradients for the shadow particles.
        Reduce the step size for y direction to avoid cutting text off at the margins. Increase
        step for x since there will be a little more room.
        * Animometer/tests/master/text.html: Add more translations and lay it out in a table.

2016-03-20  Jon Lee  <jonlee@apple.com>

        Add a link to show debug data
        https://bugs.webkit.org/show_bug.cgi?id=155724

        Reviewed by Simon Fraser.

        * Animometer/developer.html: Attach the onclick handler to the score.
        * Animometer/index.html: Ditto.

2016-03-18  Dean Jackson  <dino@apple.com>

        Add a basic WebGL test to Animometer
        https://bugs.webkit.org/show_bug.cgi?id=155475
        <rdar://problem/25156860>

        Reviewed by Simon Fraser and Jon Lee.

        Add a pretty simple WebGL test to Animometer
        which tries to draw a number of animated triangles.
        The result still needs a bit of tuning.

        * Animometer/resources/debug-runner/tests.js: Add a new
        Suite for "3D" tests.
        * Animometer/tests/3d/resources/webgl.js: Added.
        * Animometer/tests/3d/webgl.html: Added.

2016-03-18  Jon Lee  <jonlee@apple.com>

        Add support for statically linking to a specific test
        https://bugs.webkit.org/show_bug.cgi?id=155631

        Rubber-stamped by Darin Adler.

        * Animometer/developer.html: Update to call restartBenchmark instead so that it works for
        both the preset and the manually set test sessions.
        * Animometer/resources/debug-runner/animometer.css:
        (.tree .link): Style the "link" UI.
        * Animometer/resources/debug-runner/animometer.js: Move updateDisplay from suitesManager
        to optionsManager since this is a visual option and has nothing to do with the suites
        settings. Update the construction of the test UI by including a "link" after each test.
        Clicking on that link brings up a JS prompt with a URL and a query string with the current
        parameters of the controller, and selected test. Pasting this URL into the location bar will
        automatically start running the selected test.
        (suitesManager.suitesFromQueryString): Iterate through the Suites and tests and find the one
        that matches the provided parameters. Returns an object similar to the form in
        suitesManager.updateLocalStorageFromUI.
        (benchmarkController.initialize): After settings up the events and options, try parsing the
        query string and running the benchmark immediately. Otherwise, fall back to the form.
        (benchmarkController.startBenchmark): Store the options and suites into member variables for
        reuse in restartBenchmark.
        (benchmarkController.startBenchmarkImmediatelyIfEncoded): Convert the query string to an object.
        If that's successful, find the suite and test referenced in the query string. Start the benchmark if
        the search for the test succeeded.
        * Animometer/resources/extensions.js:
        (Utilities.stripNonASCIICharacters): Helper method to convert the name of the suite and test
        into a query-string-friendly version.
        (Utilities.convertObjectToQueryString): Helper method to convert an object to query string
        format.
        (Utilities.convertQueryStringToObject): Helper method to convert query string into an object
        with properties and values.

2016-03-16  Jon Lee  <jonlee@apple.com>

        Add a new benchmark test
        https://bugs.webkit.org/show_bug.cgi?id=155570

        Reviewed by Simon Fraser.

        New Leaves test includes various image sizes and opacity.

        * Animometer/resources/debug-runner/tests.js: Add it to the HTML test suite.
        * Animometer/tests/dom/leaves.html: Added.
        * Animometer/tests/dom/resources/leaves.js: Added. Override the
        (Particle.call.reset): Uses a range of sizes, and opacity.
        (Particle.call.animate): Opacity goes up then down. When it hits 0, reset the particle.
        (Particle.call.move): Set transform and opacity.
        * Animometer/tests/master/resources/leaves.js: Get rid of the closure so that it
        can be used in this test. Update the relative path so that it works in both the master
        and dom test suite.

2016-03-15  Simon Fraser  <simon.fraser@apple.com>

        Add developer Animometer test that bounces P3-tagged images
        https://bugs.webkit.org/show_bug.cgi?id=155511

        Reviewed by Tim Horton.
        
        Add a test for rendering performance of tagged images. The 5 images are tagged
        with the Display P3 colorspace.

        * Animometer/resources/debug-runner/tests.js:
        * Animometer/tests/bouncing-particles/bouncing-tagged-images.html: Added.
        * Animometer/tests/bouncing-particles/resources/bouncing-tagged-images.js: Added.
        * Animometer/tests/bouncing-particles/resources/image1.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image2.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image3.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image4.jpg: Added.
        * Animometer/tests/bouncing-particles/resources/image5.jpg: Added.

2016-03-09  Jon Lee  <jonlee@apple.com>

        Enhance existing Animometer tests
        https://bugs.webkit.org/show_bug.cgi?id=155261

        Reviewed by Simon Fraser.

        * Animometer/tests/master/resources/canvas-tests.js: Add a gradient to
        the filled circles. To expose more of the gradient, add another circle.
        (SimpleCanvasStage.call.animate): For each frame, create a gradient with
        undulating stop points and colors. Fill the circles twice; once with
        the solid color, and once with the gradient.

        * Animometer/tests/master/resources/dom-particles.js: Refactor the
        emission variables into a separate stage for this test. Add a colorOffset
        variable to make the colors of each particle slightly different, since
        the ramp controller can add large numbers of particles all at once, which
        would otherwise get all the same color.
        * Animometer/tests/master/resources/particles.js:
        (initialize): Remove the code specific to the SVG mask test.

        * Animometer/tests/master/resources/image-data.js:
        (initialize): Remove unused local variable.
        * Animometer/tests/master/resources/multiply.js:
        (initialize): Make the test harder by adding more total particles.

2016-03-09  Jon Lee  <jonlee@apple.com>

        Add text tests
        https://bugs.webkit.org/show_bug.cgi?id=155257

        Reviewed by Simon Fraser.

        * Animometer/resources/extensions.js:
        (UnitBezier.Utilities.createClass): Add a class that computes Bezier points
        assuming that two of the control points are at (0,0) and (1,1). Taken from
        WebCore/platform/graphics/UnitBezier.h
        * Animometer/resources/runner/tests.js: Add a test for English text and one
        for international text.
        * Animometer/tests/master/international.html: Added.
        * Animometer/tests/master/resources/text.js: Added. The test assumes there is
        #template div which it will copy. The copies are placed behind the template, and
        are set with different colors each frame. They are moved around with CSS transform.
        * Animometer/tests/master/text.html: Added.

        Remove the other text tests, since these ones cover the same techniques.
        * Animometer/tests/text/layering-text.html: Removed.
        * Animometer/tests/text/resources/layering-text.js: Removed.
        * Animometer/tests/text/resources/text-boxes.js: Removed.
        * Animometer/tests/text/text-boxes.html: Removed.
        * Animometer/resources/debug-runner/tests.js:

2016-03-09  Jon Lee  <jonlee@apple.com>

        Add a new image test
        https://bugs.webkit.org/show_bug.cgi?id=155232

        Reviewed by Dean Jackson.
        Provisionally reviewed by Said Abou-Hallawa.

        The image test renders PNGs and moves them with translate and rotate
        transforms. Each particle has a lifetime, and when the lifetime ends or
        the particle goes offscreen, it resets itself somewhere on the stage.

        * Animometer/resources/debug-runner/tests.js: Remove the CSS bouncing PNG
        images test, because this one tests the same technique.
        * Animometer/resources/runner/tests.js: Added here as "Leaves".
        * Animometer/tests/master/leaves.html: Added.
        * Animometer/tests/master/resources/particles.js: Refactor out the parts
        specific to the DOM particles test. Consequently make velocity a public
        member.
        (initialize): The options parameter is never used, so remove it.
        (animate): Remove unused local variable.
        * Animometer/tests/master/resources/leaves.js: Maintains a focal point that
        moves back and forth across the canvas. That point affects the velocity
        of the particles. When the focal point is on the leftmost side, it is
        between [-6, -2], and set in reset(). When the focal point is on the rightmost
        side, it will be from [2, 6].
        * Animometer/tests/master/resources/dom-particles.js: Move JS specific to
        this test here from particles.js.

        New images.
        * Animometer/tests/master/resources/compass100.png: Added.
        * Animometer/tests/master/resources/console100.png: Added.
        * Animometer/tests/master/resources/contribute100.png: Added.
        * Animometer/tests/master/resources/debugger100.png: Added.
        * Animometer/tests/master/resources/inspector100.png: Added.
        * Animometer/tests/master/resources/layout100.png: Added.
        * Animometer/tests/master/resources/performance100.png: Added.
        * Animometer/tests/master/resources/script100.png: Added.
        * Animometer/tests/master/resources/shortcuts100.png: Added.
        * Animometer/tests/master/resources/standards100.png: Added.
        * Animometer/tests/master/resources/storage100.png: Added.
        * Animometer/tests/master/resources/styles100.png: Added.
        * Animometer/tests/master/resources/timeline100.png: Added.

2016-03-03  Jon Lee  <jonlee@apple.com>

        Add ability to retrieve raw data from release harness
        https://bugs.webkit.org/show_bug.cgi?id=155026

        Reviewed by Simon Fraser.

        * Animometer/developer.html: Remove the special UI in the debug
        harness.
        * Animometer/resources/runner/animometer.css: Add styles for the
        overlay.
        * Animometer/resources/runner/animometer.js: Let 'j' show the JSON
        results, but only if the overlay doesn't exist. Add 'esc' key to dismiss
        the overlay.
        (window.benchmarkController.selectResults): Cycle the cases around
        so that the first 's' press selects both the benchmark score and
        the individual test scores.
        * Animometer/resources/debug-runner/animometer.css: Remove
        unneeded rules.
        * Animometer/resources/debug-runner/animometer.js: Make the same
        call to handleKeyPress.

2016-03-03  Jon Lee  <jonlee@apple.com>

        Make sure multiply test particles have at least some opacity
        https://bugs.webkit.org/show_bug.cgi?id=155027

        Reviewed by Simon Fraser.

        * Animometer/tests/master/resources/multiply.js:
        (initialize): Have the elements spin a little faster to make it
        more obvious when the system is being stressed.
        (_addTile):
        (animate): Make sure each element being animated has at least 1%
        opacity.

2016-03-03  Jon Lee  <jonlee@apple.com>

        Update image test
        https://bugs.webkit.org/show_bug.cgi?id=154962

        Rubber-stamped by Darin Adler.

        * Animometer/tests/master/image-data.html: Make each canvas have a compositing layer.
        * Animometer/tests/master/resources/image-data.js:
        (initialize): Update to load multiple images serially.
        (_loadImage):
        (tune): Use display instead of visibility. When showing an element anew, move it somewhere else.
        (_createTestElement): Set up the element, refactor out placement of element to _refreshElement.
        (_refreshElement): Place element in a tile grid.
        (animate):
        (_getRandomNeighboringPixelIndex): Use a more conservative distribution to make the effect last a little longer.
        * Animometer/tests/master/resources/compass.svg: Added.
        * Animometer/tests/master/resources/console.svg: Added.
        * Animometer/tests/master/resources/contribute.svg: Added.
        * Animometer/tests/master/resources/debugger.svg: Added.
        * Animometer/tests/master/resources/inspector.svg: Added.
        * Animometer/tests/master/resources/layout.svg: Added.
        * Animometer/tests/master/resources/performance.svg: Added.
        * Animometer/tests/master/resources/script.svg: Added.
        * Animometer/tests/master/resources/shortcuts.svg: Added.
        * Animometer/tests/master/resources/standards.svg: Added.
        * Animometer/tests/master/resources/storage.svg: Added.
        * Animometer/tests/master/resources/styles.svg: Added.
        * Animometer/tests/master/resources/timeline.svg: Added.

2016-03-02  Jon Lee  <jonlee@apple.com>

        Add some new controllers, and refine tests
        https://bugs.webkit.org/show_bug.cgi?id=154914

        Reviewed by Simon Fraser.

        Improve tests.

        * Animometer/tests/master/focus.html: Move each particle into a layer. Put the particle
        in a container element. Expand the container element by the max blur radius, and clip
        overflow. This way, when the blur is applied, it avoids causing layer resizes.
        * Animometer/tests/master/resources/focus.js:
        (FocusElement.Utilities.createClass): Create a container element, and put the particle
        inside.
        (hide): Set display:none.
        (show): Set display:block.
        (animate): Apply filters to the container element.
        (FocusStage.call.initialize): Instead of inserting and removing elements from the DOM,
        keep them in the stage, but set the display style instead. Use this._offsetIndex to
        keep track of which elements are displayed.
        (FocusStage.call.animate): Move some calculations around to avoid doing unneeded math.
        (FocusStage.call.getBlurValue): Make sure elements are always blurred.
        (FocusStage.call.getOpacityValue): Make sure elements have some opacity.
        * Animometer/tests/master/resources/multiply.js: Have the particles on the edge of the
        stage appear less black when the complexity gets large enough.
        (tune): Have this._distanceFactor calculate the factor. Avoid calculating square root each
        frame.

2016-03-02  Jon Lee  <jonlee@apple.com>

        Add some new controllers, and refine tests
        https://bugs.webkit.org/show_bug.cgi?id=154914

        Reviewed by Simon Fraser.

        Add a controller that centers around 30 fps instead of 60 fps.

        * Animometer/developer.html: Add a new option.
        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/resources/runner/animometer.js:
        (this._processData.findRegression): When calculating the complexity-frameLength regression,
        check the controller, and use a 30 fps baseline if needed.
        * Animometer/resources/statistics.js:
        (Regression.Utilities.createClass): Update to allow clients to specify the baseline
        frame length.
        * Animometer/tests/resources/main.js:
        (tune): Override some of the constants in RampController. Move those constants out for
        easier reading.

        Add a fixed controller, with no step.

        * Animometer/developer.html: Add a controller that takes no step.
        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/tests/resources/main.js:
        (Rotater.Utilities.createClass):

        Switch to ramp controller as default.

        * Animometer/developer.html: Increase the test length to 20 seconds.
        * Animometer/resources/debug-runner/animometer.js: Rename the "adjustment" field to "controller"
        since that is a more accurate description.
        * Animometer/resources/debug-runner/graph.js:
        * Animometer/resources/runner/animometer.js: Update preferences for release suite.

2016-02-26  Jon Lee  <jonlee@apple.com>

        Address Dean's comments in 154673.

        * Animometer/developer.html:
        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/resources/debug-runner/graph.js:

2016-02-25  Jon Lee  <jonlee@apple.com>

        Update animation benchmark and tests
        https://bugs.webkit.org/show_bug.cgi?id=154673

        Reviewed by Dean Jackson.

        Update test visuals.

        * Animometer/tests/master/resources/canvas-tests.js:
        (CanvasLineSegment.Utilities.createClass): Line segments near the edge of the stage get clipped.
        Update circle position and radius to minimize impact.
        * Animometer/tests/master/resources/particles.js: Get rid of rotating gradient background, and
        have 3 locations for emitting particles.
        * Animometer/tests/master/resources/multiply.js: Update distance metric so that fringe tiles get
        more color.
        (initialize): Fix some of the math for laying out the tiles.
        (animate): When a tile isn't used, set visibility: hidden.

2016-02-24  Jon Lee  <jonlee@apple.com>

        Update animation benchmark and tests
        https://bugs.webkit.org/show_bug.cgi?id=154673

        Reviewed by Dean Jackson.

        Update the ramp controller.

        The controller refines the complexity interval to test across.

        * Animometer/resources/statistics.js: Add functions that estimate cumulative distribution function.
        (Regression): For the flat regression, force the first segment to be at 60 fps.
        (valueAt): Add convenience function to return interpolated value based on the regression used.
        (_calculateRegression): Include the number of points included for both segments, and the piecewise
        errors.
        * Animometer/tests/resources/math.js: Make the Kalman estimator subclass Experiment, and allow it
        to be reset.

        * Animometer/tests/resources/main.js: Initialize the tier such that it starts at 10^0 = 1.
        Increase the number of ramps. Maintain three FPS thresholds-- the frame rate of interest, a limit
        on the lowest FPS we care to go for later interpolation, and a minimum FPS threshold we want to
        aim for each ramp. Also keep three estimators: a running average of the change point, a minimum
        boundary for each ramp, and an estimator for all the frames within an interval. The first two
        are used to determine the parameters of the next ramp, and the latter allows us to refine the
        parameters.
        (update): During the tier phase, it is possible that the highest complexity possible for a test
        won't stress the system enough to trigger stopping the tier phase and transitioning to the ramps.
        If the complexity doesn't change when going to the next tier, we've maxed the test out, and move
        on. When the tier phase completed, turn off Controller.frameLengthEstimator, which estimates the
        FPS at each tier.
        (tune): At each interval, look at the confidence distribution of being on the 60 FPS side or the
        slow side. If the slowest FPS we achieve at the ramp's maximum complexity is not at least
        _fpsRampSlowThreshold, then increase the maximum complexity. If we ever achieve 60 FPS, increase
        the ramp's minimum complexity to that level. If, at an even lower complexity, a glitch causes the
        FPS to drop, we reset the minimum complexity.

        Have the bootstrap calculation occur between tests. Clean up harness.

        * Animometer/resources/debug-runner/animometer.js: Run bootstrap after a test has
        completed to avoid doing all of it at the end before showing the results. Clean up
        parameters being passed around.
        * Animometer/resources/debug-runner/tests.js:
        (text):
        * Animometer/resources/runner/animometer.js:
        (this._processData.calculateScore): Save the results to the same object holding the data.
        (this._processData._processData): In the case where a file is dragged, calculate the score
        serially. Grab the results object and move it to the results variable and remove it from
        the data object. This avoids serializing the results into the JSON.
        (this._processData.findRegression): Include the samples used for bootstrapping. Reduce the
        resample size to shorten the wait.
        * Animometer/resources/runner/benchmark-runner.js:
        * Animometer/resources/statistics.js:
        (bootstrap): Update how bootstrapData is sorted. In some regression results the mix of
        floats and integers causes an alphabetical sort to occur.
        * Animometer/resources/strings.js:

        Add meta charset so that encodings between harness and test match.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/master/focus.html:
        * Animometer/tests/master/image-data.html:
        * Animometer/tests/master/multiply.html:
        * Animometer/tests/master/particles.html:
        * Animometer/tests/misc/canvas-electrons.html:
        * Animometer/tests/misc/canvas-stars.html:
        * Animometer/tests/misc/compositing-transforms.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/simple/tiled-canvas-image.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

        Update test harness reporting.

        * Animometer/developer.html: Add missing meta charset.
        * Animometer/index.html: Remove unnecessary utf-8 declaration.
        * Animometer/resources/debug-runner/animometer.css: Add convenience classes for
        formatting the results table.
        * Animometer/resources/debug-runner/animometer.js: Adjust which stats are shown.
        * Animometer/resources/debug-runner/tests.js: Display bootstrapping statistics.
        * Animometer/resources/strings.js: Move strings not used by the release harness.

        Switch to a pseudo-random number generator.

        * Animometer/resources/statistics.js: Add a Pseudo class, with a simple
        pseudo-random number generator.
        (_calculateRegression): Reset the generator before running bootstrap.
        (bootstrap): Deleted.

        Replace Math.random with Pseudo.random.
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/master/resources/focus.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/resources/main.js:

        Use bootstrapping to get confidence interval in the breakpoint.

        For the ramp controller, calculate the piecewise regression, and then use
        bootstrapping in order to find the 95% confidence interval. Use the raw data.

        * Animometer/developer.html: Default to the complexity graph. Add a legend
        checkbox to toggle visibility of the bootstrap score and histogram.
        * Animometer/resources/debug-runner/animometer.css: Make some more space to show
        the old raw and average scores in the legend. Add new styles for the data.
        * Animometer/resources/debug-runner/graph.js:
        (_addRegressionLine): Allow passing an array for the variance bar tied to the
        regression line. Now |stdev| is |range|.
        (createComplexityGraph): Add bootstrap median, and overlay a histogram of
        the bootstrap samples. Switch raw samples from circles to X's.
        (onComplexityGraphOptionsChanged): Allow toggling of the bootstrap data.
        (onGraphTypeChanged): Move the regressions for the raw and average samples to the
        legend. In the subtitle use the bootstrap median, and include the 95% confidence
        interval.
        * Animometer/resources/runner/animometer.js:
        (this._processData.findRegression): Factor out the code that determines which
        samples to include when calculating the piecewise regression. For series that have
        many samples, or a wider range of recorded complexities, throw away the 2.5%
        lowest and highest samples before calculating the regression. Keep all samples
        if the number of samples to regress is small or the range of complexities is
        narrow.
        (this._processData._calculateScore): Factor out regression calculation to
        findRegression(). Bootstrap the change point of the regression. The score is the
        median.
        * Animometer/resources/statistics.js:
        (_calculateRegression): Correct an issue in the calculation of the regression, where
        the denominator can be 0.
        (bootstrap): Template for bootstrapping. Create a bootstrap sample array, Create
        re-samples by random selection with replacement. Return the 95% confidence samples,
        the bootstrap median, mean, and the data itself.
        * Animometer/resources/strings.js: Add bootstrap.
        * Animometer/tests/resources/main.js:
        (processSamples): Don't prematurely cut the sample data.

        Fix graph drawing.

        * Animometer/resources/debug-runner/animometer.js: Add spacing in the JSON output.
        Multiple tests output a lot of JSON and can hang when selecting JSON with no whitespace.
        * Animometer/resources/debug-runner/animometer.css:
        (#complexity-graph .series.raw circle): Update the color.
        * Animometer/resources/debug-runner/graph.js: Use the FPS axis instead of the
        complexity axis, which can vary in domain. For determining the complexity domain,
        only use samples after samplingTimeOffset.

        Allow dropping results JSON.

        * Animometer/developer.html: Add a button.
        * Animometer/resources/debug-runner/animometer.css:
        * Animometer/resources/debug-runner/animometer.js: Read the data and go straight
        to the dashboard. With JSON output, write out only the options and the raw data.

        Teach the harness to evaluate the samples and determine the test score.

        This will allow us to update how the score is calculated separately from the samples recorded.
        This also prepares the harness to be able to accept JSON of prior runs.

        * Animometer/resources/strings.js: Clean up and remove unneeded strings and reduce some of the
        hierarchy.
        * Animometer/resources/debug-runner/tests.js: Update to use the new strings.

        * Animometer/tests/resources/main.js: Allow all controllers to show a complexity-FPS graph.
        (_processComplexitySamples): Factor out some of the sample processing done in the ramp
        controller for the benefit of the other controllers. |complexitySamples| contains a list of
        samples. Sort the samples by complexity. Optionally remove the top x% of samples.
        Group them, and calculate distribution of samples within the same complexity, and add those as
        new entries into |complexityAverageSamples|.
        (Controller.processSamples): Move the code responsible for determining the complexity and FPS
        scores out to ResultsDashboard. The structure of the data returned by the controller is:

        {
            controller: [time-regression, time-regression, ...], // optional, data specific to controller
            marks: [...],
            samples: {                    // all of the sample data
                controller: [...],
                complexity: [...],        // processed from controller samples
                complexityAverage: [...], // processed from complexity samples
            }
        }

        (AdaptiveController.processSamples): Adding the target frame length is no longer necessary; we
        now pass the test options to the graph.
        (Regression): Move to statistics.js.
        * Animometer/resources/statistics.js: Move Regression to here. Add a check if the sampling range
        only contains one sample, since we cannot calculate a regression from one sample point.

        Teach the test harness to evaluate the data.
        * Animometer/resources/runner/animometer.js:
        (ResultsDashboard): Store the options used to run the test and the computed results/score separately
        from the data. The results are stored as:

        {
            score: /* geomean of iteration score */,
            iterationsResults: [
                {
                    score: /* geomean of tests */,
                    testsResults: {
                        suiteName: {
                            testName: {
                                controller: {
                                    average:
                                    concern:
                                    stdev:
                                    percent:
                                },
                                frameLength: { ... },
                                complexity: {
                                    complexity:
                                    stdev:
                                    segment1:
                                    segment2:
                                },
                                complexityAverage: { ... }
                            },
                            testName: { ... },
                        },
                        ... next suite ...
                    }
                },
                { ...next iteration... }
            ]
        }

        * Animometer/resources/debug-runner/animometer.js: Pass options around instead of relying
        on what was selected in the form. This will later allow for dropping previous results, and
        using those runs' options when calculating scores.
        (ResultsTable._addGraphButton): Simplify button action by using attached test data.
        * Animometer/resources/debug-runner/graph.js: Refactor to use the data.

        Consolidate JS files, and move statistics out to a separate JS.

        Preparation for having the Controller only handle recording and storage of the samples,
        and leave the evaluation of the test score out to the harness. Move Experiment to
        a new statistics.js, where Regression will also eventually go. Get rid of algorithm.js
        and move it to utilities.js since the Heap is used only for Experiments.

        * Animometer/tests/resources/algorithm.js: Removed. Heap is in utilities.js.
        * Animometer/tests/resources/sampler.js: Removed. Experiment is in statistics.js,
        Sampler in main.js.
        * Animometer/tests/resources/main.js: Move Sampler here.
        * Animometer/resources/statistics.js: Added. Move Statistics and Experiment here.
        * Animometer/resources/extensions.js: Move Heap here. Attach static method to create
        a max or min heap to Heap, instead of a new Algorithm object.

        Update JS files.
        * Animometer/developer.html:
        * Animometer/index.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/master/focus.html:
        * Animometer/tests/master/image-data.html:
        * Animometer/tests/master/multiply.html:
        * Animometer/tests/master/particles.html:
        * Animometer/tests/misc/canvas-electrons.html:
        * Animometer/tests/misc/canvas-stars.html:
        * Animometer/tests/misc/compositing-transforms.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/simple/tiled-canvas-image.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

        Fix the cursor in the graph analysis when the min
        complexity is not 0.

        * Animometer/resources/debug-runner/graph.js:
        (_addRegression):
        (createComplexityGraph):

2016-02-23  Geoffrey Garen  <ggaren@apple.com>

        Fix some issues in MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=154600

        Reviewed by Oliver Hunt.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Make nimlang.ops
        a part of the build so that it copies to the right place for execution.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::Interpreter): Don't try to open .ops files for writing
        because we're only going to read and we might need extra permissions to
        write.

        (Interpreter::~Interpreter): Give more context when opening a file fails
        to help with debugging.

        * MallocBench/MallocBench/stress.cpp:
        (benchmark_stress): Reduce iterations to complete in less than 10 seconds.

2016-02-23  Michael Saboff  <msaboff@apple.com>

        Unreviewed change to revert extraneous changes made part of change set 196955.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::doMallocOp):
        (Interpreter::Thread::switchTo):
        (writeData): Deleted.

2016-02-19  Michael Saboff  <msaboff@apple.com>

        MallocBench: Added recording for nimlang website, new recording details and added new options
        https://bugs.webkit.org/show_bug.cgi?id=154485

        Reviewed by Geoff Garen.

        Added new capabilities to MallocBench.  These include:
            Added a recording of http://nim-lang.org/docs/lib.html.
            Added thread id to the recording and the ability to playback switching threads in MallocBench
            Added aligned allocations to recordings and the ability to playback
            Added --use-thread-id option to honor recorded thread ids
            Added --detailed-report to output remaining allocations by size after playback
            Added --no-warmup to not run the warm up iteration

        Changed the way that options are passed down to the benchmarks.  Instead of passing individual
        boolean or numeric option values, just pass a reference the CommandLine itself.  Each benchmark
        can access the options that are appropriate.  The Benchmark class also uses the options for
        is parallel, run counts and warm up.

        Added thread id and aligned malloc to the Op by noticing that structure padding and Opcode allowed
        for another 32 bits of data.  Breaking that unused 32 bits into a 16 bit thread id value and a
        16 bit log base 2 of the alignment for aligned malloc allowed for existing recordings to playback
        without any incompatibilities.

        Threaded operation is simulated by creating threads as needed.  As long as the next Op's thread id
        is the same as the last, operation continues as normal.  When the next Op has a different thread id,
        we switch to that thread using the shared Op stream to continue playing back.  There is a mutex to
        assure that only one thread is really running at a time and a condition variable used to wait
        that the current thread id matches each block thread's thread id.  This doesn't simulate true
        concurrent threading, but is instead plays back Ops recorded for multiple thread faithfully.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        (deallocateHeap):
        (Benchmark::Benchmark):
        (Benchmark::runOnce):
        (Benchmark::run):
        * MallocBench/MallocBench/Benchmark.h:
        (Benchmark::isValid):
        * MallocBench/MallocBench/CommandLine.cpp:
        (CommandLine::printUsage):
        * MallocBench/MallocBench/CommandLine.h:
        (CommandLine::isValid):
        (CommandLine::benchmarkName):
        (CommandLine::isParallel):
        (CommandLine::useThreadID):
        (CommandLine::detailedReport):
        (CommandLine::warmUp):
        (CommandLine::heapSize):
        (CommandLine::runs):
        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::Interpreter):
        (Interpreter::run):
        (Interpreter::readOps):
        (Interpreter::doOnSameThread):
        (Interpreter::switchToThread):
        (Interpreter::detailedReport):
        (compute2toPower):
        (writeData):
        (Interpreter::doMallocOp):
        (Interpreter::Thread::Thread):
        (Interpreter::Thread::stop):
        (Interpreter::Thread::~Thread):
        (Interpreter::Thread::runThread):
        (Interpreter::Thread::waitToRun):
        (Interpreter::Thread::switchTo):
        * MallocBench/MallocBench/Interpreter.h:
        (Interpreter::Thread::isMainThread):
        * MallocBench/MallocBench/alloc_free.cpp: Added.
        (benchmark_alloc_free):
        * MallocBench/MallocBench/alloc_free.h: Added.
        * MallocBench/MallocBench/balloon.cpp:
        (benchmark_balloon):
        * MallocBench/MallocBench/balloon.h:
        * MallocBench/MallocBench/big.cpp:
        (benchmark_big):
        * MallocBench/MallocBench/big.h:
        * MallocBench/MallocBench/churn.cpp:
        (benchmark_churn):
        * MallocBench/MallocBench/churn.h:
        * MallocBench/MallocBench/facebook.cpp:
        (benchmark_facebook):
        * MallocBench/MallocBench/facebook.h:
        * MallocBench/MallocBench/flickr.cpp:
        (benchmark_flickr):
        (benchmark_flickr_memory_warning):
        * MallocBench/MallocBench/flickr.h:
        * MallocBench/MallocBench/fragment.cpp:
        (validate):
        (benchmark_fragment):
        (benchmark_fragment_iterate):
        * MallocBench/MallocBench/fragment.h:
        * MallocBench/MallocBench/list.cpp:
        (benchmark_list_allocate):
        (benchmark_list_traverse):
        * MallocBench/MallocBench/list.h:
        * MallocBench/MallocBench/main.cpp:
        (main):
        * MallocBench/MallocBench/medium.cpp:
        (benchmark_medium):
        * MallocBench/MallocBench/medium.h:
        * MallocBench/MallocBench/memalign.cpp:
        (test):
        (benchmark_memalign):
        * MallocBench/MallocBench/memalign.h:
        * MallocBench/MallocBench/message.cpp:
        (benchmark_message_one):
        (benchmark_message_many):
        * MallocBench/MallocBench/message.h:
        * MallocBench/MallocBench/nimlang.cpp: Added.
        (benchmark_nimlang):
        * MallocBench/MallocBench/nimlang.h: Added.
        * MallocBench/MallocBench/nimlang.ops: Added.
        * MallocBench/MallocBench/realloc.cpp:
        (benchmark_realloc):
        * MallocBench/MallocBench/realloc.h:
        * MallocBench/MallocBench/reddit.cpp:
        (benchmark_reddit):
        (benchmark_reddit_memory_warning):
        * MallocBench/MallocBench/reddit.h:
        * MallocBench/MallocBench/stress.cpp:
        (deallocate):
        (benchmark_stress):
        * MallocBench/MallocBench/stress.h:
        * MallocBench/MallocBench/stress_aligned.cpp:
        (benchmark_stress_aligned):
        * MallocBench/MallocBench/stress_aligned.h:
        * MallocBench/MallocBench/theverge.cpp:
        (benchmark_theverge):
        (benchmark_theverge_memory_warning):
        * MallocBench/MallocBench/theverge.h:
        * MallocBench/MallocBench/tree.cpp:
        (benchmark_tree_allocate):
        (benchmark_tree_traverse):
        (benchmark_tree_churn):
        * MallocBench/MallocBench/tree.h:
        * MallocBench/run-malloc-benchmarks:

2016-02-11  Jon Lee  <jonlee@apple.com>

        Fix a missing refactoring.

        * Animometer/tests/master/resources/multiply.js:
        (animate): Move to Utilities.lerp.
        (_lerp): Deleted.

2016-02-10  Jon Lee  <jonlee@apple.com>

        Add new benchmark tests.
        https://bugs.webkit.org/show_bug.cgi?id=154063

        Provisionally reviewed by Said Abou-Hallawa.

        Add tests for get/put image data, filters, opacity, and css transforms.

        * Animometer/resources/runner/benchmark-runner.js:
        (_runBenchmarkAndRecordResults): Update the body background color to match that of
        the stage.
        (this._runNextIteration): Clear the background color style for the results page.
        * Animometer/resources/runner/tests.js:
        * Animometer/tests/master/focus.html: Added.
        * Animometer/tests/master/image-data.html: Added.
        * Animometer/tests/master/multiply.html: Added.
        * Animometer/tests/master/resources/focus.js: Added.
        * Animometer/tests/master/resources/image-data.js: Added.
        * Animometer/tests/master/resources/multiply.js: Added.
        * Animometer/tests/master/resources/stage.css: Move common styles out.
        * Animometer/tests/resources/main.js: Update Stage.randomBool to use Math.random.
        Add Stage.randomSign for randomly setting a direction. Add the notion of the
        current timestamp of the test to Benchmark, since some animations cycle through
        colors and rely on an incremental counter like the time.

2016-02-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add internal benchmark tests for CSS mix-blend-modes and filters
        https://bugs.webkit.org/show_bug.cgi?id=154058

        Provisionally reviewed by Jon Lee.

        * Animometer/resources/debug-runner/tests.js: Include the new tests in the
        "HTML suite" of the debug runner.

        * Animometer/resources/extensions.js:
        (Utilities.browserPrefix):
        (Utilities.setElementPrefixedProperty): Utility functions to allow setting
        prefixed style properties.

        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        Set the mix-blend-mode and the filter to some random values if the options
        of the test requested that.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (parseShapeParameters): Parse the url options "blend" and "filter" and set
        the corresponding flags.

        * Animometer/tests/resources/main.js:
        (randomStyleMixBlendMode):
        (randomStyleFilter): Return random mix-blend-mode and filter.

2016-02-08  Jon Lee  <jonlee@apple.com>

        Add a ramp controller
        https://bugs.webkit.org/show_bug.cgi?id=154028

        Provisionally reviewed by Said Abou-Hallawa.

        Enhance the graph to include a complexity-fps graph, in addition
        to the time graph.

        * Animometer/developer.html: Add a ramp option.
        * Animometer/resources/debug-runner/animometer.css: Update the style.
        * Animometer/resources/strings.js: Flatten the Strings.text constants.
        * Animometer/resources/debug-runner/animometer.js:
        (ResultsTable.call._addGraphButton): Refactor.
        (ResultsTable.call._addTest): Add regression data.
        (benchmarkController): Add a form that allows the user to switch between the two forms,
        Add a form that allows the user to toggle different data. Hide certain header columns
        depending on the selected controller.
        * Animometer/resources/debug-runner/graph.js: Add the complexity regressions.
        * Animometer/resources/debug-runner/tests.js: Add headers for the ramp results.
        * Animometer/resources/runner/animometer.js:
        (ResultsTable): If a header is disabled don't include them in _flattenedHeaders.
        * Animometer/tests/resources/main.js:
        (Controller): Allow options to specify the capacity for sample arrays.
        (Regression): A piecewise regression that tries to fit a slope and a flat profile.
        (_calculateRegression): Options can fix the slope and bias when calculating the minimal
        error. Sweep across the samples in time (which could be backward depending on the controller)
        and calculate the intersection point.
        (RampController): This controller assumes that the target frame rate is below
        58 FPS. It runs in two stages. The first stage quickly determines the order of
        magnitude of objects needed to stress the system by the setting the complexity
        to increasingly difficult tiers. Perform a series of ramps descending from a
        high-water mark of complexity. The complexity needed to reach the target frame
        length is done by performing a piecewise regression on each ramp, and track a
        running average of these values. For the next ramp, make that running average
        the center of the ramp. With a minimum complexity of 0, the high-water mark is
        twice that average. The score is based on the highest complexity that can
        reach 60 fps.

2016-02-08  Jon Lee  <jonlee@apple.com>

        Address Said's comments on the benchmark, and do some clean up.

        * Animometer/developer.html:
        * Animometer/resources/debug-runner/animometer.css: Add styles for averages.
        * Animometer/resources/debug-runner/animometer.js: Use the right
        Strings constants.
        * Animometer/resources/debug-runner/graph.js:
        (_addRegressionLine): Add missing code to draw the line and standard
        deviation highlight.
        (onGraphTypeChanged): Remove unneeded variables
        (onTimeGraphOptionsChanged):
        * Animometer/resources/runner/benchmark-runner.js:
        (_runBenchmarkAndRecordResults): Rename samplers to suiteResults and
        _suitesSamplers to _suitesResults.
        * Animometer/tests/resources/main.js:
        (results): Call processSamples().
        (update): Change sampling timestamp comparison.
        (_animateLoop): Move shouldStop call to before the update.
        * Animometer/tests/resources/sampler.js:
        (process): Rename to processSamples().

2016-02-07  Jon Lee  <jonlee@apple.com>

        Teach Controller to measure intervals, and turn off the frame length estimator.

        * Animometer/tests/resources/main.js: Default interval length is 100 ms.
        (start): Set the first interval.
        (_measureAndResetInterval): Reports the average frame length of the interval that just
        completed, and sets up the next interval.
        (update): If there is no length, then just use the estimator per frame, otherwise the
        estimator measures per interval. Add a didFinishInterval for subclasses to process
        prior to recording the sample. Update tune() to include whether an interval had
        finished.
        (StepController): Step controllers don't measure on an interval basis.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Minor refactoring. Rename Controller._estimator to Controller._frameLengthEstimator
        and switch the parameters for start(), update(), and tune(), so that the timestamp
        is first and stage is second.

        * Animometer/tests/resources/main.js:

2016-02-07  Jon Lee  <jonlee@apple.com>

        Move ResultsTable functionality not needed for release tests out.
        Move reporting of score and mean to selection of the time-based graph.

        * Animometer/developer.html: Rename graph-options to time-graph-options.
        * Animometer/resources/debug-runner/animometer.js:
        (DeveloperResultsTable): Moved from runner/animometer.js. Switch from mean
        values to "average" objects which can hold stdev. Move graph button and
        calculation of noisy measurements here. Sophisticated header processing
        is not needed in release suite.
        (populateTable): Use DeveloperResultsTable.
        * Animometer/resources/debug-runner/graph.js: Pull time graph creation to
        its own function, and add a new onGraphTypeChanged handler in preparation
        of a complexity graph to be added later.
        * Animometer/resources/runner/animometer.js:
        (ResultsTable): Simplify to just handle test names and scores.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Tests: reuse objects already made.

        Avoid thrash of object creation and removal by maintaining an index that
        moves along the array as the adjust values change. If the tune value
        requires more objects than the maximum size of the object array, then create
        new objects. This means that the object array size never decreases.

        * Animometer/tests/master/resources/canvas-stage.js: Maintain a separate
        offsetIndex. For these tests, we want to avoid drawing the oldest objects,
        so the scene will draw the object at offsetIndex to the end of the array.
        (tune): Reverse the logic since "removal" of objects is much simpler and
        involves simply changing the offsetIndex.
        (animate): Update the for loop to draw from offsetIndex to the end.
        (complexity): Update the definition.
        * Animometer/tests/master/resources/canvas-tests.js: Maintain a separate
        offsetIndex. For these tests, we want to avoid drawing the newest objects,
        so the scene will draw the object at index 0 to the object at offsetIndex.
        (SimpleCanvasStage.animate): Fly-by removal of local stage variable,
        which is unneeded. Update the for loop to draw from offsetIndex to the end.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (SimpleCanvasStage.animate): Update the for loop to draw from 0 to
        offsetIndex.
        * Animometer/tests/simple/resources/simple-canvas.js:
        (tune): Update logic. Here, offsetIndex represents the boundary of the last
        index to render.
        (animate): Update the for loop to draw from 0 to offsetIndex.
        (complexity): Update the definition.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Tests: refactor and update styles.

        * Animometer/tests/resources/main.js: Add helper methods that return
        a color that hue rotates based on the date, and a counter value that
        increases based on the date. Fix randomInt() to not bias against the min and
        max values.

        * Animometer/tests/master/resources/canvas-tests.js: Use new helper methods.
        * Animometer/tests/master/resources/dom-particles.js: Ditto.
        * Animometer/tests/master/resources/particles.js: Ditto.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Refactor to
        use a rotating color instead of a random color. The fast switching of color
        is too vivid to watch.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        (BouncingSvgParticlesStage.call.createGradient): Fix the gradient so
        that the last stop is located at the end.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Refactor tune() to not return the complexity of the scene.

        We have stage.complexity() now, so returning the complexity through tune
        is unnecessary.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/master/resources/canvas-stage.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/simple/resources/simple-canvas.js:
        * Animometer/tests/simple/resources/tiled-canvas-image.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:

2016-02-07  Jon Lee  <jonlee@apple.com>

        Make the fixed controller a step controller instead. Halfway through the test
        it will bump up the complexity 4-fold. Calculate the step timestamp using options
        instead of a separate parameter to the Controller constructor.

        * Animometer/developer.html: Change value to "step"
        * Animometer/resources/debug-runner/animometer.js:
        (window.suitesManager.updateEditsElementsState): Show number inputs when set to "step".
        * Animometer/tests/resources/main.js:
        (update): Provide a hook for subclasses to tune.
        (StepController): Maintain a flag determining whether we've stepped, and the time
        we should step.
        (Benchmark): Use the new StepController.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Adjust the FPS graph scale.

        Instead of making the FPS graph linearly scale, scale it based on the frame length,
        but show the data in terms of FPS. Because it is inversely proportional, and most
        of the data never gets below 20, concentrate the axis from 20-60 FPS, since otherwise
        over half of the available graph space ends up blank.

        This means we should convert all of the FPS data to frame length data.

        * Animometer/resources/debug-runner/graph.js: Update the domain to be based on
        frame length in milliseconds instead of FPS. Update the cursor to consider all of the
        values being shown, and then pick the min and max values to represent the length of the
        cursor.
        * Animometer/resources/runner/animometer.js:
        * Animometer/resources/strings.js:
        * Animometer/tests/resources/main.js:
        (processSamples): Add the ability to only sample a range of the data instead of everything
        after an offset index. Update sampler to record the frame lengths instead of the frame
        rate.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Add option to use different methods for retrieving a timestamp.

        * Animometer/developer.html: Add performance.now and Date.now options.
        * Animometer/resources/runner/animometer.js: Default to performance.now.
        (window.benchmarkController.startBenchmark):
        * Animometer/tests/resources/main.js: Tie the desired method to _getTimestamp.
        (run): Use _getTimestamp.
        (_animateLoop): Ditto.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Allow adding any number of markers to the graph. The markers can be labeled
        and contain timestamp and sample index data. Make it a part of the controller
        rather than keeping it in the sampler.

        * Animometer/resources/debug-runner/animometer.css: Add styles for markers
        * Animometer/resources/debug-runner/graph.js: Create the markers and add
        text labels.
        * Animometer/resources/runner/animometer.js: Assume the samplingTimeOffset
        is just one of the marks provided.
        * Animometer/resources/strings.js: Add Strings.json.marks.
        * Animometer/tests/resources/main.js:
        (Controller): Keep marks here. They are keyed by the marker name, so no two
        markers should have the same name.
        (recordFirstSample): Refactor to use mark.
        (mark): Allows for arbitrary data if needed later. The timestamp maintained
        is relative to the absolute start timestamp.
        (containsMark): Checks whether a mark with a specific comment exists.
        (processSamples): Removes the _startTimestamp offset from the marks before
        setting it in results.
        * Animometer/tests/resources/sampler.js: Remove marks.

2016-02-07  Jon Lee  <jonlee@apple.com>

        Get rid of options member variable in Benchmark.

        Options are only needed when initializing the stage or benchmark, so there's no
        need to also keep a reference to it.

        * Animometer/tests/resources/main.js: Get rid of options variable in Benchmark.
        Pass options to Controllers and Stages.
        (Controller.Utilities.createClass):
        (Benchmark.Utilities.createClass):
        (get options): Deleted.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/master/resources/canvas-stage.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/resources/tiled-canvas-image.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:

2016-02-07  Jon Lee  <jonlee@apple.com>

        Update how the benchmark is run
        https://bugs.webkit.org/show_bug.cgi?id=153960

        Provisionally reviewed by Said Abou-Hallawa.

        Introduce the notion of a Controller. It is responsible for recording, updating,
        and processing the statistics and complexity of the benchmark. This allows
        plugging in different Controllers.

        This strips most of the functionality from Animator and BenchmarkState, so fold
        what's left into Benchmark. Now, Benchmarks only own a stage and a controller, but
        are responsible for driving the animation loop.

        Rewrite Animator._shouldRequestAnotherFrame into two different Controllers. One
        maintains a fixed complexity, and the other adapts the complexity to meet a
        fixed FPS.

        Fix the Kalman estimator to be modeled on a scalar variable with no model.

        * Animometer/tests/resources/main.js: Remove BenchmarkState and Animator, and
        replace it with a Controller. Add a FixedController and refactor the previous controller
        to an AdaptiveController.

        (Controller): Controllers own the estimator and the sampler. When a new frame is
        displayed, the animation loop calls update(). The estimator and sampler record
        stats, then tune. Samplers can track multiple series of data. The basic controller
        tracks timestamp, complexity, and estimated frame rate.
                The Kalman estimation is based on the frame length rather than the frame
        rate. Because FPS is inverse proportional to frame length, in the case where the measured
        frame length is very small, the FPS ends up being a wildly large number (in the order of
        600-1000 "FPS"), and it pulls the estimator up drastically enough that it takes a while
        for it to settle back down. Using frame length reduces the impact of these spikes.
                Converging the estimation takes enough time to avoid initializing it immediately
        when the benchmark starts. Instead, the benchmark runs for a brief period of time (100ms)
        before running it in earnest. Allow controllers an opportunity to set the complexity
        before starting recording.
                When the benchmark is complete, the controller has an opportunity to process
        the samples. The default implementation calculates the raw FPS based on the time
        difference of the samples, and calculates the complexity score. This is moved from
        Benchmark.processSamples.

        (Controller): Initialize timestamps. These are at first relative to the start of the
        benchmark, but are offset by the absolute start time during start(). By default maintain
        3 data series, but subclasses can override.
        (start): Calls recordFirstSample() for subclasses to override if needed.
        (recordFirstSample): For basic controller, start sampling at the beginning.
        (update): Update the frame length estimator and sample.
        (shouldStop): Checks that the time is before _endTimestamp.
        (results): Returns the processed samples.
        (processSamples): Iterate through the sample data and collate them. Include scores.

        (FixedComplexityController): Controller that tunes the stage to the desired complexity
        prior to starting, and keeps it at that complexity.

        (AdaptiveController): Have the estimator estimate the interval frame rate instead of the
        raw frame rate.
                The previous version of this controller ignored the frame that came after the
        adjustment. The raw FPS show that whatever noise the scene change adds is negligible
        compared to the noise of the system overall. Stop ignoring that frame and include all
        frames in the measurements.

        (Benchmark): Remove dependency on animator, and instantiate a runner based on what is
        selected. Most of the loop's functionality is in Controller, so remove here.
        (Benchmark.run): Remove start() since it is only called from run(), and fold it in here.
        (Benchmark._animateLoop): Fold in from Animator.animateLoop. Let the benchmark run for
        a brief period before calling Controller.start().

        * Animometer/tests/resources/math.js: Fix the Kalman estimator. The filter estimates
        a scalar variable, and makes basic assumptions regarding the model. As a result
        none of the linear algebra classes are needed, so remove Matrix, Vector3, and Matrix3.
        (SimpleKalmanEstimator): Calculate the gain based on the provided process and
        measurement errors.
        (KalmanEstimator): Deleted.
        (IdentityEstimator): Deleted.
        (PIDController): Refactor to use the Utilities.createClass() helper.

        The Kalman filter algorithm is explained here http://greg.czerniak.info/guides/kalman1/.
        The state, represented by a scalar, is the estimated frame length. There is no user
        transition of the state, and the state is the same as the measurement. With this model,
        the estimation error converges, so calculate the gain ahead of time.

        * Animometer/developer.html: Remove fixed-after-warmup since it is not useful.
        Replace the option to toggle the estimator, and make it possible to customize the
        estimator's error parameters. Show raw FPS by default, and remove interval FPS,
        which will be shown instead of the filtered raw FPS.
        * Animometer/resources/debug-runner/animometer.css: Put the header behind the graph.
        Remove #intervalFPS rules; move the color to #filteredFPS.
        * Animometer/resources/debug-runner/graph.js:
        (updateGraphData): Update the hr style to force the layout to be calculated
        correctly. Change the tick format to be in terms of seconds, since the timestamps
        are in milliseconds. Remove interval data.
        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.startBenchmark): Set Kalman parameters.
        * Animometer/resources/runner/benchmark-runner.js:
        (_runBenchmarkAndRecordResults): When a benchmark completes, expect it to return
        the final data, rather than passing a sampler from the controller. This avoids
        needing to expose the sampler variable in the benchmark.
        * Animometer/tests/resources/sampler.js:
        (process): Move the setting of the target frame rate to AdaptiveController.

2016-02-06  Jon Lee  <jonlee@apple.com>

        Code clean up: Move Rotater function closer to Stage static methods.
        The Rotater is used together with those methods; keep them close.

        * Animometer/tests/resources/main.js:

2016-02-06  Jon Lee  <jonlee@apple.com>

        Update the JS includes due to ResultsTable move.

        * Animometer/developer.html:
        * Animometer/index.html:

2016-02-06  Jon Lee  <jonlee@apple.com>

        Move createElement and createSVGElement to Utilities.

        * Animometer/resources/extensions.js:
        (Utilities.createElement): Added.
        (Utilities.createSVGElement): Added.
        (DocumentExtension.createElement): Deleted.
        (DocumentExtension.createSvgElement): Deleted.

        * Animometer/resources/debug-runner/animometer.js:
        * Animometer/resources/runner/animometer.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:

2016-02-06  Jon Lee  <jonlee@apple.com>

        Add a convenience function for creating a class.

        The pattern for creating a class is common enough to add as a Utilities
        helper function. It also makes it easy to collapse class definitions when
        editing.

        * Animometer/resources/debug-runner/animometer.js: Move ProgressBar definition,
        since it is only used here.
        * Animometer/resources/runner/animometer.js: Move ResultsDashboard and
        ResultsTable definition, since it is only used here.
        * Animometer/resources/extensions.js: Move Utilities definition to the top. Convert
        Point, Insets, SimplePromise.
        (ProgressBar): Moved to animometer.js.
        (ResultsDashboard): Moved to animometer.js.
        (ResultsTable): Moved to animometer.js.
        * Animometer/resources/runner/benchmark-runner.js: Convert BenchmarkRunnerState,
        BenchmarkRunner.
        * Animometer/tests/resources/main.js: Convert Rotater, Stage, Animator, Benchmark.
        * Animometer/tests/resources/sampler.js: Convert Experiment, Sampler.

        Convert test primitives.
        * Animometer/tests/master/resources/canvas-tests.js: Convert CanvasLineSegment,
        CanvasArc, CanvasLinePoint.
        * Animometer/tests/simple/resources/simple-canvas-paths.js: Convert CanvasLineSegment,
        CanvasLinePoint, CanvasQuadraticSegment, CanvasQuadraticPoint, CanvasBezierSegment,
        CanvasBezierPoint, CanvasArcToSegment, CanvasArcToSegmentFill, CanvasArcSegment,
        CanvasArcSegmentFill, CanvasRect, CanvasRectFill.
        * Animometer/tests/simple/resources/tiled-canvas-image.js: Convert CanvasImageTile.

2016-02-06  Jon Lee  <jonlee@apple.com>

        Minor improvements to debug harness.

        * Animometer/developer.html:
        * Animometer/resources/debug-runner/animometer.css:
        (#suites): Put the complexity text boxes closer to the test names.
        (#options):
        (#rawFPS circle): Make the interval FPS appear as a separate data series, with a line.
        (#intervalFPS path):
        (#intervalFPS circle):
        * Animometer/resources/debug-runner/animometer.js:
        (window.optionsManager.updateLocalStorageFromUI): Convert number inputs from text.
        (window.suitesManager._onChangeTestCheckbox): Refactor to take a checkbox.
        (window.suitesManager._createTestElement): Enhance such that typing into the complexity
        input will automatically select that test for running.
        (window.suitesManager.updateLocalStorageFromJSON): Make the harness work for private
        browsing.
        * Animometer/resources/debug-runner/graph.js: Separate the intervalFPS data, and show
        more accuracy in timestamps.

2016-02-06  Jon Lee  <jonlee@apple.com>

        Refactor helper methods for getting random values for a stage.

        Instead of requiring a Stage instance, just attach it to the Stage object.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/master/resources/particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:

2016-02-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a new graphics test for CanvasRenderingContext2D functions: getImageData and putImageData
        https://bugs.webkit.org/show_bug.cgi?id=151716

        Reviewed by Darin Adler.

        The purpose of this test is to measure the performance of getImageData
        and putImageData functions. This test draws a background on the canvas
        and then gets some random tiles from this background and draw them in
        destinations different from their original sources.

        * Animometer/resources/debug-runner/tests.js: Adding the new test to the canvas simple tests suite.

        * Animometer/resources/extensions.js:
        (Array.prototype.shuffle): Shuffles the elements of an array.

        (Point.zero): Returns a new Point object whose x and y are equal zero.
        (Point.prototype.str): Used for debugging the Point object.

        * Animometer/tests/simple/resources/tiled-canvas-image.js: Added.
        (CanvasImageTile):
        (CanvasImageTile.prototype.getImageData):
        (CanvasImageTile.prototype.putImageData):
        (Stage.call.initialize):
        (Stage.call._createTiles):
        (Stage.call._nextTilePosition):
        (Stage.call.tune):
        (Stage.call._drawBackground):
        (Stage.call.animate):
        (Stage.call.complexity):
        (Stage.call):
        * Animometer/tests/simple/tiled-canvas-image.html: Added.

2016-01-07  Jon Lee  <jonlee@apple.com>

        Fix new test.

        * Animometer/resources/runner/tests.js: Wrong URL from an
        old patch.
        * Animometer/tests/master/particles.html:
        * Animometer/tests/master/resources/dom-particles.js:
        (Particle.call.reset): Figured out a simpler way to set up
        the particles.
        (this.move.reset): Deleted.
        (this.move._applyAttributes): Deleted.
        * Animometer/tests/master/resources/particles.js:
        (Particle): Call move() after reset().

2016-01-07  Jon Lee  <jonlee@apple.com>

        Update benchmark test suite
        https://bugs.webkit.org/show_bug.cgi?id=152679

        Reviewed by Simon Fraser.

        Add a new test. The test has a rotating background
        gradient, and does a better job physically simulating
        particles.

        * Animometer/resources/extensions.js: Teach Point to take constants as well as other Points.
        (Point.prototype.length): Added.
        (Point.prototype.normalize): Added.
        * Animometer/resources/runner/tests.js: Add the test to the master suite.
        * Animometer/tests/master/particles.html: Added.
        * Animometer/tests/master/resources/particles.js: Added. Parent class for different kinds of particles.
        (Particle):
        (Particle.prototype.reset): If the particle starts slowing down in terms of its animation,
        reset it.
        (Particle.prototype.animate): Bounce off the walls elastically, and include gravity.
        (Particle.prototype.move): Subclasses should override.
        (ParticlesStage): Stage includes a rotating gradient background.
        * Animometer/tests/master/resources/dom-particles.js: Added. Creates a <div> and adds it to
        the stage.
        * Animometer/tests/resources/star.svg: Added.

2016-01-03  Jon Lee  <jonlee@apple.com>

        Update benchmark test suite
        https://bugs.webkit.org/show_bug.cgi?id=152679

        Reviewed by Simon Fraser.

        Move algorithm.js and sampler.js to tests/ and benchmark-runner.js to runner/.

        Needed by both harnesses.
        * Animometer/resources/runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/resources/debug-runner/benchmark-runner.js.
        * Animometer/developer.html:
        * Animometer/index.html:

        Needed only by the tests. Move to tests/. Statistics, in sampler.js, is used by ResultsDashboard, so move that
        into extensions.js.
        * Animometer/resources/extensions.js:
        * Animometer/tests/resources/algorithm.js: Renamed from PerformanceTests/Animometer/resources/algorithm.js.
        * Animometer/tests/resources/sampler.js: Renamed from PerformanceTests/Animometer/resources/sampler.js.
        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/master/canvas-stage.html:
        * Animometer/tests/misc/canvas-electrons.html:
        * Animometer/tests/misc/canvas-stars.html:
        * Animometer/tests/misc/compositing-transforms.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

2016-01-07  Jon Lee  <jonlee@apple.com>

        Update benchmark test suite
        https://bugs.webkit.org/show_bug.cgi?id=152679

        Reviewed by Simon Fraser.

        Fix tests for other browsers.

        * Animometer/resources/extensions.js:
        (Point.elementClientSize): Some browsers return 0 for SVG clientWidth and clientHeight.
        Use getBoundingClientRect() instead.
        * Animometer/tests/misc/resources/canvas-electrons.js:
        (CanvasElectron.prototype._draw): Some browsers don't support ellipse.

2016-01-07  Jon Lee  <jonlee@apple.com>

        Add a waitUntilReady() step
        https://bugs.webkit.org/show_bug.cgi?id=152862

        Reviewed by Simon Fraser.

        Add a waitUntilReady() callback that lets the benchmark complete
        its setup before running the benchmark.

        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.run): First call waitUntilReady, which returns
        a promise. When the promise resolves, run everything that was in this
        function.
        (Benchmark.prototype.waitUntilReady): Default implementation returns
        a resolved promise.
        (Benchmark.prototype.resolveWhenFinished): Deleted.
        * Animometer/tests/template/resources/template-canvas.js:
        (new.TemplateCanvasStage.waitUntilReady): Example on how to override.

2016-01-03  Jon Lee  <jonlee@apple.com>

        Update data reporting and analysis
        https://bugs.webkit.org/show_bug.cgi?id=152670

        Reviewed by Simon Fraser.

        Show new graph data. Provide controls to show different series data. Provide an
        interactive cursor that shows the data at a given sample.

        * Animometer/developer.html: Add a nav section in #results. Each part of the graph
        has a checkbox for visual toggling, as well as companion spans to contain the data.
                The numbers will always be shown even if the SVG isn't.
        * Animometer/resources/debug-runner/animometer.css:
        (#suites): Adjust spacing when doing fixed complexity.
        (#test-graph nav): Place the nav in the upper right corner.
        (#test-graph-data > svg): Fix the FPS scale from 0-60. It makes the raw FPS goes past
        that scale. Allow it to show.
        (.target-fps): Add a dotted line for where the benchmark is supposed to settle for FPS.
        (#cursor line): The cursor contains a line and highlight circles for the data being shown.
        (#cursor circle):
        (#complexity path): This and rules afterward are named by series type.
        (#complexity circle):
        (#filteredFPS path):
        (#filteredFPS circle):
        (#rawFPS path):
        (#intervalFPS circle):
        (.left-samples): Deleted.
        (.right-samples): Deleted.
        * Animometer/resources/debug-runner/animometer.js:
        (initialize): Add a "changed" listener when the checkboxes change in the nav.
        (onBenchmarkOptionsChanged): Renamed.
        (showTestGraph): All graph data is passed in as graphData instead of as arguments.
        * Animometer/resources/debug-runner/graph.js: Extend BenchmarkController. When showing
        a new graph, call updateGraphData(). It creates all of the d3 graphs. onGraphOptionsChanged()
        toggles the data on and off.
        (updateGraphData): Add the axes. Add the average lines and markers for sample time and
        target FPS. Add the cursor group. Use helper function addData() to add the data. On top of
        everything add a transparent area which will catch all of the mouse events. When the mouse
        moves in the graph, find the closest data point, show the data in the nav area, and highlight
        the data points.
        (addData): Adds a line and circle for each data point. Also adds a highlight cursor with a
        size a little larger than the circle radius for the data points.
        (onGraphOptionsChanged): Called when data is visually toggled.
        (showOrHideNodes): Helper function to toggle the .hidden class.
        * Animometer/resources/extensions.js:
        (ResultsDashboard.prototype.get data): Get rid of the arguments for _processData.
        (ResultsTable.prototype._addGraphButton): Shove all of the graph data into a singular object.

        Producing the JSON can take a while with all of the data. Make it on-demand with a
        button.

        * Animometer/resources/debug-runner/animometer.js:
        (showResults): When showing the results, don't serialize the JSON data. Move that to...
        (showJSONResults): ...here. Remove the button.

        * Animometer/developer.html: Add a button. The button will remove itself and populate
        the textarea with the JSON data.
        * Animometer/resources/debug-runner/animometer.css:
        (.hidden): Add a universal hidden class.
        (#results button.small-button): Promote the small-button styles to the whole results
        section for use in the JSON button.
        (#results button.small-button:active):
        (#results-data button.small-button): Deleted.
        (#results-data button.small-button:active): Deleted.

        Refactor how Animator does its recording.

        * Animometer/tests/resources/math.js: Create a new, simple estimator that just returns
        the same interval frame rate for adjustment.
        * Animometer/tests/resources/main.js:
        (Animator): Remove _dropFrameCount, and make variables more accurate described.
        (Animator.prototype.initialize): Use the identity estimator instead of using a bool.
        (Animator.prototype._intervalTimeDelta): Rename, only used internally.
        (Animator.prototype._shouldRequestAnotherFrame): Assume we drop one frame for adjustment
        of the scene. If we are within the number of frames to measure for the interval, just
        record the timestamp. Otherwise we are ready to evaluate and adjust the scene. Record
        the interval frame rate and the estimator's frame rate.

        Avoid processing the data through the Experiment while the test is running. Reconfigure
        the sampler to just record the raw samples. After the test is done, run the samples through
        the Experiment to get the score.

        * Animometer/resources/sampler.js:
        (Experiment): Fold _init() into the constructor since nobody else will call it. This is not
        needed until the test concludes, so remove startSampling(). Clients should just call sample().
        (Sampler): Pre-allocate arrays given the number of data points being recorded, and a capacity
        of how many samples will be used. The processor is a called when it's time to process the data
        since that is the client also telling the Sampler what to record.
                Introduce the notion of marks as well, which allows the client to mark when an
        event occurs. When we mark sample start, we can attach the timestamp there, instead of storing
        it separately.
        (Sampler.prototype.startSampling): Deleted. Clients should just call record().
        (Sampler.prototype.record): The data to record is passed in as variable arguments.
        (Sampler.prototype.mark): When adding a mark, a client needs to provide a unique string, and
        can provide extra data object for later retrieval.
        (Sampler.prototype.process): Renamed from toJSON. Trim the sampling arrays to what was used.
        Call the processor to process the samples.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runBenchmarkAndRecordResults): Call process().

        * Animometer/resources/strings.js: Add some new strings, remove the graph ones since they are
        not used.
        * Animometer/tests/resources/main.js:
        (Benchmark): Create a sampler with 4 series. The maximum number of points expected is the
        number of seconds multiplied by 60 fps. Benchmark, as a client of the Sampler, knows about all
        of the data being added to the Sampler. It is added through record(), and processed through
        processSamples().
        (Benchmark.prototype.update): Mark when we've passed warmup and are starting to sample. Include
        the timestamp in the custom data for the mark. This avoids the need to store is separately in
        the Sampler. Fold what was in record() here, since nothing else needs this functionality.
        record() now just relays the information to the sampler.
        (Benchmark.prototype.record): Called by Animator, which provides the data to the sampler.
        Animator's calls to this is part of a later patch. Requires each stage to return its complexity.
        (Benchmark.prototype.processSamples): If the sampling mark exists, add it to the results.
                Go through all of the samples. All samples contain a timestamp and complexity. We
        calculate "raw FPS" which is the time differential from the previous sample. At regular intervals
        the Kalman-filtered FPS and the interval average FPS are also recorded. We also create two
        experiments, to get the scores for the complexity and smoothed FPS, and add those samples to
        the experiments. Grab those scores and add them into results also.

        Add complexity() to the tests for Benchmark.record().
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/text/resources/layering-text.js:

2015-12-27  Jon Lee  <jonlee@apple.com>

        Simplify the test harness
        https://bugs.webkit.org/show_bug.cgi?id=152562

        Reviewed by Simon Fraser.

        Update the simple canvas tests. For the paths, start from the center instead of the
        top-left corner. Instead of using a coordinate limit, use a canonized factor, and
        use that along both the x and y axes, so that more capable tests use more of the
        canvas.

        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLinePoint): Rewrite to use the coordinate maximum factor.
        (CanvasQuadraticPoint): Ditto.
        (CanvasBezierPoint): Ditto.
        * Animometer/tests/simple/resources/simple-canvas.js:
        (tune): Calculate a factor instead of a maximum coordinate.

2015-12-27  Jon Lee  <jonlee@apple.com>

        Simplify the test harness
        https://bugs.webkit.org/show_bug.cgi?id=152562

        Reviewed by Simon Fraser.

        All of the benchmarks use the default Animator(). Don't require new tests
        to pass a new instance, and instead just make one in the Benchmark constructor.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/misc/resources/canvas-electrons.js:
        * Animometer/tests/misc/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:
        * Animometer/tests/text/resources/text-boxes.js:

        Refactor the template.

        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:

        Refactor the SVG suite.

        * Animometer/tests/bouncing-particles/bouncing-svg-images.html: Move scripts to the end.
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.

        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Remove extraneous includes
        to stage.js.
        * Animometer/tests/text/text-boxes.html: Ditto.

        BouncingCanvasParticlesBenchmark is not necessary. Use Benchmark directly when subclassing.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js: Remove
        BouncingCanvasParticlesBenchmark.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js: Use Benchmark.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js: Ditto.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js: Require the shape
        in the constructor instead of having subclasses set the private variable.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js: Refactor.
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:

        Refactor the HTML suite.

        Move scripts to the end.
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/text-boxes.html:

        Refactor to use the new variables.
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/text/resources/layering-text.js:
        * Animometer/tests/text/resources/text-boxes.js:

        Refactor the bouncing canvas tests.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Move scripts to the end.
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Move scripts to the end.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js: Promote a few
        properties to "public" since they are used by subclasses.
        (BouncingParticlesStage): Fix the constructor, which was missing "this". Make particles
        "public" for subclasses.
        (BouncingParticlesStage.initialize): Fix the max velocity, which was accidentally changed.
        * Animometer/tests/misc/resources/compositing-transforms.js: Refactor.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        BouncingCanvasParticlesAnimator is no longer needed.
        (BouncingCanvasParticle): Change constructor to take a shape as a parameter instead of
        having subclasses set the variable.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js: Refactor.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js: Refactor.

        Move example/ files into misc/.

        * Animometer/tests/misc/canvas-electrons.html: Renamed from PerformanceTests/Animometer/tests/examples/canvas-electrons.html.
        * Animometer/tests/misc/canvas-stars.html: Renamed from PerformanceTests/Animometer/tests/examples/canvas-stars.html.
        * Animometer/tests/misc/resources/canvas-electrons.js: Renamed from PerformanceTests/Animometer/tests/examples/resources/canvas-electrons.js.
        * Animometer/tests/misc/resources/canvas-stars.js: Renamed from PerformanceTests/Animometer/tests/examples/resources/canvas-stars.js.

        * Animometer/resources/debug-runner/tests.js: Update test URLs.

        Refactor miscellaneous suite.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        Remove BouncingParticlesAnimator and BouncingParticleBenchmark, which are
        not needed.
        (tune): Remove console assert.
        * Animometer/tests/resources/main.js: Add Rotater back in from stage.js.

        * Animometer/tests/examples/resources/canvas-electrons.js: Remove CanvasElectronsAnimator.
        * Animometer/tests/examples/resources/canvas-stars.js: Remove CanvasStarsAnimator.
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/examples/canvas-electrons.html: Move scripts to the end.
        * Animometer/tests/examples/canvas-stars.html: Ditto.
        * Animometer/tests/misc/compositing-transforms.html: Ditto.

        Refactor the simple suite.

        * Animometer/tests/master/resources/canvas-stage.js:
        (tune): Remove coordinateMaximum since it is not needed in any
        of the master tests.
        * Animometer/tests/simple/resources/simple-canvas.js:
        SimpleCanvasAnimator and SimpleCanvasBenchmark are no longer
        needed.
        (tune): Manage the objects differently, but instead of duplicating
        all of SimpleCanvasStage here, just replace tune(). Include
        coordinateMaximum, and remove items from the end of the list
        instead of the beginning.
        (StageBenchmark.call.createAnimator): Deleted.
        (StageBenchmark.call): Deleted.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/simple-canvas-paths.html: Move
        scripts to the end.

        Get rid of stage.js, StageAnimator, and StageBenchmark. Don't have the progress bar update during the test.

        * Animometer/resources/debug-runner/animometer.js:
        (initialize): Move the setting of testsCount to the debug runner.
        (didRunTest): Nicer name.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runBenchmarkAndRecordResults): Don't pass in the progress bar to benchmarks.
        * Animometer/resources/extensions.js:
        (ProgressBar): Refactor. Make variables "private". Resetting the progress when instantiating.
        (ProgressBar.prototype.incrementRange): This is called every time a benchmark completes.
        * Animometer/resources/runner/animometer.js:
        (window.benchmarkRunnerClient.initialize): Remove unneeded setting of testsCount.
        * Animometer/resources/strings.js: These are no longer needed.
        * Animometer/tests/master/canvas-stage.html: Remove script inclusion. Other tests will follow.
        * Animometer/tests/master/resources/canvas-tests.js: Use Benchmark instead of StageBenchmark.
        * Animometer/tests/resources/main.js: Messages are no longer needed
        (Animator.prototype._shouldRequestAnotherFrame): Rename from animate(), since this method returns a boolean
        indicating whether another frame should be requested. Collapse the logic from StageAnimator into animateLoop.
        (BenchmarkState.prototype.currentStage): Deleted.
        (BenchmarkState.prototype.currentMessage): Deleted.
        (BenchmarkState.prototype.currentProgress): Deleted.
        (Animator.prototype.animate): Deleted.
        (Animator.prototype.animateLoop): The stage is animated only when we have another frame to draw.
        (Benchmark.prototype.record): No need to update the progress bar.
        * Animometer/tests/resources/stage.js: Removed. Rotater will appear in a later patch, in main.js.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runBenchmarkAndRecordResults): Each test is run as a benchmark.
        Remove the call to runBenchmark by merging the options here, and calling benchmark.run()
        directly.

        Make the class relationships more easily understandable. The benchmark owns the stage,
        animator, and options. Make the stage and animator no longer have their own references to
        the options. Make Stage a first-class citizen by promoting it to main.js. Later patches
        will try to get rid of stage.js altogether.
        * Animometer/tests/resources/main.js:
        (Stage): Moved from stage.js.
        (Animator): Don't pass in benchmark and options in its constructor. It will get initialized
        by benchmark-related parameters in initialize().
        (Animator.prototype.initialize): Add a back-reference to benchmark and cache an option.
        (Animator.prototype.get benchmark):
        (Animator.prototype.animate): Refactor to use the cached option, to remove its dependency on
        the options dictionary.
        (Benchmark): Require all benchmarks to have a stage and animator. The instance will initialize
        them.
        (Benchmark.prototype.get options):
        (Benchmark.prototype.get stage): BenchmarkStates.stages will need to be renamed to avoid confusion.
        (Benchmark.prototype.get animator):
        (Benchmark.prototype.start):
        (Benchmark.prototype.update): Ask the stage directly to tune or clear instead of adding another
        level of indirection.
        (window.runBenchmark): Deleted. Remove the need for a benchmarkClient. Also remove the standalone
        path, since tests can be individually selected, and remove the need for runBenchmark since that is
        handled in BenchmarkRunner._runBenchmarkAndRecordResults.
        * Animometer/tests/resources/stage.js:
        (Stage): Deleted. Moved to main.js.
        (StageBenchmark): What's left is updating the progress bar; to be removed.
        (StageAnimator): What's left can be folded in Animator.

        Refactor master suite.
        * Animometer/tests/master/resources/canvas-stage.js: This now only has SimpleCanvasStage.
        (animate): Push the clearRect() into each stage.
        (complexity):
        (StageBenchmark.call.createAnimator): Deleted.
        (StageBenchmark.call): Deleted.
        * Animometer/tests/master/resources/canvas-tests.js: SimpleCanvasPathStrokeStage is no longer needed.
        (CanvasLineSegment.prototype.draw):
        (CanvasArc):
        (CanvasLinePoint): Remove the draw call because depending on its index it either needs to be moveTo
        or lineTo, and it is otherwise a very small draw operation that doesn't need the overhead of the
        function call. Do all of the drawing through the stage.

        Refactor the subclass pattern. Introduce Utilities.createSubclass().

        * Animometer/resources/debug-runner/benchmark-runner.js:
        * Animometer/resources/extensions.js:
        (window.Utilities.createSubclass): Takes the super class, a function representing
        the class's constructor, and additional methods to attach to the new class's
        prototype object.
        * Animometer/tests/text/text-boxes.html: Remove unneeded reference to utilities.js.

        Refactor tests.
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/examples/resources/canvas-electrons.js:
        * Animometer/tests/examples/resources/canvas-stars.js:
        * Animometer/tests/master/resources/canvas-stage.js:
        * Animometer/tests/master/resources/canvas-tests.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/stage.js:
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/resources/simple-canvas.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js: Reorder some of the methods
        and properties since they rely on each other.
        * Animometer/tests/text/resources/text-boxes.js:

        * Animometer/resources/debug-runner/animometer.js: Arrange calls
        in the order they are evoked.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunnerState.prototype.next): Get rid of return value since
        no caller to next() uses it.
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Refactor the
        promise to resolve simply when onload() is called instead of
        looking for #stage.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Suite.run
        simply calls runBenchmark(). Call it directly rather than through
        the Suite.
        (BenchmarkRunner.prototype.step): Remove unused parameter in
        resolve callback.
        (BenchmarkRunner.prototype.runMultipleIterations): Use this instead
        of self since it is outside of the closure which needed the self
        variable.
        (resolveIfReady): Deleted.
        (BenchmarkRunner.prototype.waitForElement): Deleted.
        * Animometer/resources/runner/tests.js: prepare() and run() are
        no longer needed.
        (Suite.prototype.prepare): Deleted.
        (Suite.prototype.run): Deleted.
        * Animometer/tests/master/canvas-stage.html: Move all scripts to
        the end of the page.

2015-12-23  Simon Fraser  <simon.fraser@apple.com>

        Add an Animometer developer test which animates text-rich boxes
        https://bugs.webkit.org/show_bug.cgi?id=152544

        Reviewed by Zalan Bujtas.

        Add a test that draws lots of international text. This is a particle test,
        moving the boxes around with absolution positioning.

        * Animometer/resources/debug-runner/tests.js:
        * Animometer/tests/text/resources/text-boxes.js: Added.
        (BouncingTextBox):
        (BouncingTextBox.prototype._move):
        (BouncingTextBox.prototype.animate):
        (BouncingTextBoxStage):
        (BouncingTextBoxStage.prototype.createParticle):
        (BouncingTextBoxStage.prototype.particleWillBeRemoved):
        (BouncingTextBoxsBenchmark):
        (BouncingTextBoxsBenchmark.prototype.createStage):
        (window.benchmarkClient.create):
        * Animometer/tests/text/text-boxes.html: Added.

2015-12-23  Jon Lee  <jonlee@apple.com>

        Split benchmark into two different pages
        https://bugs.webkit.org/show_bug.cgi?id=152458

        Reviewed by Simon Fraser.

        Add tests to 'animometer' suite.

        * Animometer/resources/runner/tests.js:
        * Animometer/tests/master/canvas-stage.html: Added.
        * Animometer/tests/master/resources/canvas-stage.js: Added.
        * Animometer/tests/master/resources/canvas-tests.js: Added.
        * Animometer/tests/master/resources/stage.css: Added.

2015-12-23  Jon Lee  <jonlee@apple.com>

        Split benchmark into two different pages
        https://bugs.webkit.org/show_bug.cgi?id=152458

        Reviewed by Simon Fraser.

        Address comments.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
        sampler goes away, and a later call to get the JSON data is no longer available. Process the data
        right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
        * Animometer/resources/extensions.js:
        (Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
        (Array.prototype.find.Array.prototype.find): Update the null check.
        (ResultsDashboard.prototype._processData): Use the already-processed data.
        * Animometer/resources/runner/animometer.css:
        (.frame-container > iframe): Remove calc().

        Move Array functions to extensions.js since that is included by the harness.
        Add ES6 Array polyfills.

        * Animometer/resources/algorithm.js:
        (Array.prototype.swap): Moved to extensions.js.
        * Animometer/resources/extensions.js:
        (Array.prototype.swap):
        (Array.prototype.fill): Added.
        (Array.prototype.find): Added.

        Adjust styles for iPad.

        * Animometer/resources/runner/animometer.css:
        (@media screen and (min-device-width: 768px)): Apply to iPad as well.
        (@media screen and (max-device-width: 1024px)): Update width for iPads.

        Adjustment styles for iOS.

        * Animometer/developer.html: Different divs contain the iframe, so use a class instead and
        update the style rules.
        * Animometer/index.html:
        * Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
        (@media screen and (min-device-width: 1800px)): Move this up.
        * Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.

        Get rid of prefixed flex properties for now.

        * Animometer/resources/debug-runner/animometer.css:
        * Animometer/resources/runner/animometer.css:

        Update the structure of the harness. Remove the JSON-per-test but keep
        the JSON of the whole test run. Use the full page in order to display
        the graph.

        * Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
        average, and worst 5% statistics.
        * Animometer/index.html: Make structure similar to developer.html.
        * Animometer/resources/debug-runner/animometer.css: Remove most of the
        button rules since they are superfluous. Move the progress bar to the
        top, fixed. Update the results page rules.
        * Animometer/resources/debug-runner/animometer.js: Remove most of the
        additions to sectionsManager since they are no longer needed.
        (setSectionHeader): Updates header of the section.
        (window.suitesManager._updateStartButtonState): Update selector.
        (showResults): Add keypress event for selecting different data for
        copy/paste. Update how the results are populated. Include full test
        JSON in a textarea, rather than requiring a button press.
        (showTestGraph):
        * Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
        title, and the text used as the cell contents, including class name.
        * Animometer/resources/extensions.js:
        (ResultsTable): Update to include a flattened version of the headers,
        used while populating table contents. Remove unneeded helper functions
        for creating the table. Rename "show" to "add".
        * Animometer/resources/runner/animometer.css: Update rules to
        accommodate the new structure.
        * Animometer/resources/runner/animometer.js:
        (window.sectionsManager.setSectionScore): Helper function to set the
        score and mean for a section.
        (window.sectionsManager.populateTable): Helper function to set the table.
        (window.benchmarkController.showResults): Refactor.
        (window.benchmarkController.selectResults): Update selectors.
        * Animometer/resources/runner/tests.js: Set Headers. Debug harness
        extends it.

        Update debug runner to have similar names to the basic runner. Include
        that page's CSS and remove extraneous CSS rules.

        Get rid of the statistics table #record.

        * Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
        * Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
        * Animometer/resources/debug-runner/animometer.js: Remove recordTable.
        (window.suitesManager._updateStartButtonState): Update selector to #intro.
        (setupRunningSectionStyle): Deleted.

        * Animometer/resources/runner/animometer.css:
        (#test-container.selected): Change to flex-box only when visible.

        Remove recordTable.
        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._runTestAndRecordResults):
        * Animometer/resources/runner/tests.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        * Animometer/tests/examples/resources/canvas-electrons.js:
        * Animometer/tests/examples/resources/canvas-stars.js:
        * Animometer/tests/misc/resources/compositing-transforms.js:
        * Animometer/tests/resources/main.js:
        * Animometer/tests/resources/stage.js:
        (StageBenchmark): Remove _recordTable.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        * Animometer/tests/simple/resources/simple-canvas.js:
        * Animometer/tests/template/resources/template-canvas.js:
        * Animometer/tests/template/resources/template-css.js:
        * Animometer/tests/template/resources/template-svg.js:
        * Animometer/tests/text/resources/layering-text.js:

        * Animometer/resources/debug-runner/animometer.js:
        (willStartFirstIteration): Fix selector, since results-table is used
        in multiple places, so it cannot be an id.

        Make it possible to select the scores, or the whole table data,
        by cycling through different selections through key press of 's'.

        * Animometer/resources/runner/animometer.js:
        (window.benchmarkController.showResults): Attach a keypress handler
        if it hasn't been added already.
        (window.benchmarkController.selectResults):
        * Animometer/resources/runner/tests.js: Cycle through different
        ranges.

        Fix a few fly-by errors.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
        since the files are now in the top directory instead of inside runner/.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
        (BenchmarkRunner.prototype.step): Member variable is never used.

        A little stylistic cleanup.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        * Animometer/resources/extensions.js:
        (window.DocumentExtension.createElement):
        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.record):
        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults): Reverse progress and message.
        The message appears less frequently than the progress.
        * Animometer/tests/simple/resources/simple-canvas.js:
        (SimpleCanvasBenchmark): Remove unused options.

        Add newer version of harness in a new page. Consolidate differences between the two
        pages.

        * Animometer/developer.html: Include runner/animometer.js. Rename the JS function
        to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
        #test-container.
        * Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
        * Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
        instead of 4:3.

        Split out benchmarkRunnerClient and benchmarkController.

        * Animometer/resources/debug-runner/animometer.js: Move needed functions out of
        benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
        and move populating the results table into benchmarkController. Rename _resultsDashboard
        to results and make it accessible for other objects to use.
        (willAddTestFrame): This is unnecessary. Remove.

        (window.sectionsManager.showScore): Grab it from the results object instead of
        benchmarkRunnerClient.
        (window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.

        (window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
        (window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
        (window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
        here.

        * Animometer/resources/debug-runner/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
        * Animometer/resources/extensions.js:
        (ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
        for later referencing.
        (ResultsDashboard.prototype.toJSON): Deleted.
        (ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
        outputting JSON. Store the processed data into a member variable that can be referenced later.
        (ResultsDashboard.prototype.get data): Process the data if it hasn't already.
        (ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
        aggregate score.
        (ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
        need for an empty children array. This was to allow for a header row in the table that spanned
        multiple columns. In the simpler harness, this is not needed.
        (ResultsTable.prototype._showEmptyCells):
        (ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
        which is the bare minimum needed for the simpler harness, key off of the header name provided.
        * Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
        split into the data and the headers, and are also displayed RTL so that a later patch allows a
        user to copy-paste the data easily.
        * Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
        The debug harness will extend these classes.
        (window.benchmarkController._startBenchmark): Used by both harnesses.
        (window.benchmarkController.startBenchmark): Set hard-coded options.
        (window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
        here.

        Get rid of utilities.js. Move it all into extensions.js.

        * Animometer/resources/extensions.js:
        * Animometer/tests/resources/utilities.js: Removed.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
        * Animometer/tests/examples/canvas-electrons.html: Ditto.
        * Animometer/tests/examples/canvas-stars.html: Ditto.
        * Animometer/tests/misc/compositing-transforms.html: Ditto.
        * Animometer/tests/simple/simple-canvas-paths.html: Ditto.
        * Animometer/tests/template/template-canvas.html: Ditto.
        * Animometer/tests/template/template-css.html: Ditto.
        * Animometer/tests/template/template-svg.html: Ditto.
        * Animometer/tests/text/layering-text.html: Ditto.

        Split tests.js into two. Add a new suite to runner/tests.js.

        * Animometer/developer.html: Update the script order. Scripts from
        debug-runner/ will always build on those from runner/, and have the
        same name.
        * Animometer/resources/debug-runner/tests.js: Move "complex examples"
        suite into "miscellaneous tests".
        (Suite): Deleted.
        (Suite.prototype.prepare): Deleted.
        (Suite.prototype.run): Deleted.
        (suiteFromName): Deleted.
        * Animometer/resources/runner/tests.js: Added. Take definitions and
        functions needed by the test harness. Leave the test suites behind.
        (Suite): Moved from debug script.
        (Suite.prototype.prepare): Ditto.
        (Suite.prototype.run): Ditto.
        (suiteFromName): Ditto.
        (testFromName): Ditto.

        Move benchmark resources out into resources/debug-runner, and update URLs.

        * Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
        * Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
        * Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
        * Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
        * Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
        * Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
        * Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.

2015-12-11  Jon Lee  <jonlee@apple.com>

        Improve Animometer on iOS
        https://bugs.webkit.org/show_bug.cgi?id=152180

        Reviewed by Simon Fraser.

        Improve experience on phones. Make the canvas take
        up the whole screen.

        * Animometer/runner/animometer.html: Add meta viewport.
        Remove the container div.
        * Animometer/runner/resources/animometer.css: Have buttons lay
        out vertically. Update detail arrow glyph. Make the suites and
        options section lay out vertically. Remove the top spacers since
        we want the canvas to take over the whole screen. Minimal display
        is recommended for use.

2015-12-07  Jon Lee  <jonlee@apple.com>

        Update suites for benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151957

        Reviewed by Simon Fraser.

        * Animometer/runner/animometer.html: Use spacers instead of relying on
        justify-content center to center the content. That allows the opening screen
        to grow downward when expanding the list of choices, otherwise it expands
        from the center, and off the top edge of the screen.
        * Animometer/runner/resources/animometer.css:
        (.tree): Don't overflow scroll.
        (.tree > li > label.tree-label:before): Use better glyphs.
        (.tree > li > :checked ~ label.tree-label:before):
        (main): Using flex-start for justify-content so that if the section grows too
        big it gets pinned to the top edge of the document instead of growing past it.
        (.spacer): Make the spacers have a minimum 20px and grow evenly.
        (section#home): Add a min-height so that the border will expand if the suite
        tests shown make the section grow past the height.
        * Animometer/runner/resources/animometer.js: Update the selectors.
        (window.suitesManager._treeElement):
        (window.suitesManager._suitesElements):
        (window.suitesManager._editsElements):

2015-12-07  Jon Lee  <jonlee@apple.com>

        Update options for benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151956

        Reviewed by Simon Fraser.

        Move "Fix test complexity" and "Adaptive" checkboxes into a radio group.

        Move "Show running results" into a radio group, and add options to remove the HUD.

        * Animometer/runner/animometer.html: Get rid of the preamble. Wrap the options
        in a form for easier referencing in JS.
        * Animometer/runner/resources/animometer.css: Show the surrounding border if the
        body's display-minimal class name is set.
        * Animometer/runner/resources/animometer.js:

        Update the way optionsManager gets and sets default values. Include support for
        radio groups.
        (window.optionsManager.valueForOption):
        (window.optionsManager.updateUIFromLocalStorage):
        (window.optionsManager.updateLocalStorageFromUI):

        (window.benchmarkRunnerClient.willStartFirstIteration):
        (window.sectionsManager.setupRunningSectionStyle):
        (window.suitesManager._treeElement): Fly-by whitespace fix.
        (window.suitesManager._suitesElements): Ditto.
        (window.suitesManager.updateEditsElementsState): Update options check.
        (window.suitesManager.updateDisplay): Add a new update function for the HUD.
        Attach a class to the body depending on the user's choice.
        (window.benchmarkController.initialize): Add an event listener when the form
        radio buttons update.
        (window.benchmarkController.onFormChanged):
        (window.optionsManager._optionsElements): Deleted.
        (window.optionsManager._adaptiveTestElement): Deleted.
        (window.benchmarkController.onChangeAdaptiveTestCheckbox): Deleted.
        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.update): Update options checks.
        * Animometer/tests/resources/stage.js: Update option check.
        (StageBenchmark.prototype.showResults):

2015-12-01  Simon Fraser  <simon.fraser@apple.com>

        Add a basic compositing Animometer test
        https://bugs.webkit.org/show_bug.cgi?id=151724

        Reviewed by Dean Jackson.

        Add a "bouncing particles" test that moves composited layers around, optionally with a filter.

        This is added under a new "Miscellaneous" category.

        Remove the test templates category from the UI.

        * Animometer/runner/resources/tests.js:
        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
        (BouncingCssShape.prototype.animate):
        * Animometer/tests/misc/compositing-transforms.html: Added.
        * Animometer/tests/misc/resources/compositing-transforms.js: Added.
        (BouncingCompositedImage):
        (BouncingCompositedImage.prototype._move):
        (BouncingCompositedImage.prototype.animate):
        (CompositingTransformsStage):
        (CompositingTransformsStage.prototype.createParticle):
        (CompositingTransformsStage.prototype.particleWillBeRemoved):
        (CompositedTransformsBenchmark):
        (CompositedTransformsBenchmark.prototype.createStage):
        (window.benchmarkClient.create):

2015-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Fix the graphics benchmark complexity bounds adjustment
        https://bugs.webkit.org/show_bug.cgi?id=151670

        Reviewed by Simon Fraser.

        Make sure the graphics benchmark complexity bounds adjustment is applied
        to the absolute lower bound.

        * Animometer/tests/resources/math.js:
        (PIDController.prototype._saturate):

2015-11-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add an option to select the results form the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151666

        Reviewed by Ryosuke Niwa.

        We need an easy way to select the graphics benchmark results table such
        that when it is copied to the clipboard, rich text format is set to the
        clipboard.

        * Animometer/runner/animometer.html: Add a new button to select the results table or JSON.

        * Animometer/runner/resources/animometer.js:
        (window.sectionsManager._sectionDataElement): Selects the container <data> element.
        (window.sectionsManager._sectionDataDivElement): Replace a literal string with a string table entry.
        (window.sectionsManager.showTestName): Replace a literal string with a string table entry.
        (window.sectionsManager.selectData): Selects the container <data> element in a selection.
        (window.sectionsManager.selectDataContents): Select the contents of container <data> element in a selection.
        (window.benchmarkController.selectResults): Selects the results table.
        (window.benchmarkController.showJSON): Function rename.
        (window.benchmarkController.selectJSON): Selects the contents of the results JSON.
        (window.benchmarkController.showJson): Deleted.

2015-11-20  Simon Fraser  <simon.fraser@apple.com>

        Animometer: graphs should not do interpolation
        https://bugs.webkit.org/show_bug.cgi?id=151526

        Reviewed by Simon Fraser.

        Having the graphs do interpolation is misleading, because you can't see the actual data.

        Also remove "shape-rendering: crispEdges;" so the lines get antialiased.

        * Animometer/runner/resources/animometer.css:
        (section#test-graph > data > svg): Deleted.
        * Animometer/runner/resources/graph.js:
        (graph): Deleted.

2015-11-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Calculate the graphics benchmark test gain adaptively
        https://bugs.webkit.org/show_bug.cgi?id=151208

        Reviewed by Darin Adler.

        We need to calculate the gain of the graphics benchmark tests adaptively
        and get rid of the gain and limits parameters we have to choose manually
        for every test. We are going to use the classic Ziegler–Nichols method for
        calculating the gain and integral and derivative times. We are going to
        try moving on a cubic curve during the manual stage from y0 to reach ysp.
        We also going to use a saturation actuator to ensure the system does not
        fluctuate.

        * Animometer/resources/extensions.js:
        (ResultsTable.prototype._isNoisyMeasurement): Fix a parameter name.
        (ResultsTable.prototype._isNoisyTest): Since score is a member of testResults, we need to limit our search to frame rate and complexity.
        (ResultsTable.prototype._showTest): Pass the correct parameter to _isNoisyMeasurement().

        * Animometer/resources/strings.js: Fix the indentation and name and value of a string.

        * Animometer/runner/resources/tests.js: Remove all the manual gains and limits parameters which had to be passed to every test.

        * Animometer/tests/resources/main.js:
        (BenchmarkState.prototype.currentStage): Fix an enum name.
        (Benchmark): Get rid of manual gain and limits.
        (Benchmark.prototype.update): Simplify the calculation by having all the times in ms.

        * Animometer/tests/resources/math.js:
        (PIDController): Get rid of the manual gain and limits and the magic numbers for Ti and Td.
        (PIDController.prototype._yPosition): Tells whether the test current output is moving towards the set-point or away from it.
        (PIDController.prototype._distanceUltimate): Calculates the ultimate distance from y0 after time t using a cubic formula.
        (PIDController.prototype._distance): Calculates the distance of y relative to y0.
        (PIDController.prototype._gainIncrement): Decides how much the proportional gain should be increased during the manual gain stage.
        (PIDController.prototype._updateStage): Updates the stage of the controller based on its current stage and the system output.
        (PIDController.prototype._tuneP): Tunes the system before calculating the PID controller gains.
        (PIDController.prototype._tunePID): PID tuning function.
        (PIDController.prototype._tune):
        (PIDController.prototype._saturate):
        (PIDController.prototype.tune): Manages calculating the controller parameters. It then returns a PID tuning value.
        (PIDController.prototype._sat): Deleted. We may need to return it back but the limits have to be calculated adaptively not manually.

2015-11-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Reorganize the graphics benchmark string table
        https://bugs.webkit.org/show_bug.cgi?id=151334

        Reviewed by Simon Fraser.

        Make the graphics benchmark string table be an object of sub-objects. Each
        sub-object represents an associative array, the key is the string name and
        the value is the string data.

        * Animometer/resources/extensions.js:
        (ResultsDashboard.prototype.toJSON):
        (ResultsTable.prototype._showGraph):
        (ResultsTable.prototype._showJSON):
        (ResultsTable.prototype._isNoisyMeasurement):
        (ResultsTable.prototype._isNoisyTest):
        (ResultsTable.prototype._showTest):
        (ResultsTable.prototype._showSuite):
        (ResultsTable.prototype._showIteration):
        * Animometer/resources/sampler.js:
        (Sampler.prototype.toJSON):
        * Animometer/resources/strings.js:
        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.didFinishLastIteration):
        (window.suitesManager.updateLocalStorageFromJSON):
        (window.benchmarkController.showResults):
        (window.benchmarkController.showJson):
        (window.benchmarkController.showTestGraph):
        (window.benchmarkController.showTestJSON):
        * Animometer/runner/resources/tests.js:
        * Animometer/tests/resources/main.js:

2015-11-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Disable flattening the stage iframe of the graphics benchmark when running on iOS
        https://bugs.webkit.org/show_bug.cgi?id=151361

        Reviewed by Simon Fraser.

        Use fixed size for stage iframe of the graphics benchmark to disable
        flattening the iframe while animating the particles. Also ensure the
        bouncing particles do not go outside the iframe's boundaries.

        * Animometer/runner/resources/animometer.css:
        (section#running > #running-test > iframe):
        (@media screen and (min-device-width: 1800px)):
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticle.prototype.animate):

2015-11-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Use the media queries to dynamically set the stage for the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151327

        Reviewed by Simon Fraser.

        Clean setting the benchmark css rules by using the media queries. Accessing
        document.stylesheets.cssRules seems to be unreliable. Fix the test harness
        load event listener invocation. And also remove the options for normalizing
        the stage resolution for retina display.

        * Animometer/resources/extensions.js:
        (window.DocumentExtension.insertCssRuleAfter): Deleted.
        * Animometer/runner/animometer.html:
        * Animometer/runner/resources/animometer.css:
        (@media screen and (min-device-width: 1800px)):
        * Animometer/runner/resources/animometer.js:
        (window.sectionsManager.setupRunningSectionStyle):
        (window.benchmarkController.initialize):
        (window.sectionsManager.setupSectionStyle): Deleted.
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticlesStage):
        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/resources/layering-text.js:
        (LayeringTextStage):
        (LayeringTextStage.prototype._setFontSize): Deleted.

2015-11-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove the option for animating using setInterval from the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151283

        Reviewed by Darin Adler.

        Get rid of the option to run animation using setInterval().

        * Animometer/tests/resources/main.js:
        (Animator.prototype.animate):
        (Benchmark):
        (Benchmark.prototype.start):
        (Animator.prototype.start): Deleted.

2015-11-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Highlight the alarming test results in the graphics benchmark results page
        https://bugs.webkit.org/show_bug.cgi?id=151286

        Reviewed by Simon Fraser.

        When showing the results of a test in the graphics benchmark the following
        criteria is going to be applied:

        1. If the standard deviation of the test complexity or the frame rate is
           equal to or more than 10%, the standard deviation and the test name
           will be displayed in red.
        2. If the average frame rate is not in the range = [(desired_frame_rate - 2)
           .. (desired_frame_rate + 2)], the average frame rate and the test name will
           be displayed in red.

        * Animometer/resources/extensions.js:
        (ResultsTable.prototype._showHeaderRow):
        (ResultsTable.prototype._showHeader):
        (ResultsTable.prototype._showEmptyCell):
        (ResultsTable.prototype._showText):
        (ResultsTable.prototype._showFixedNumber):
        (ResultsTable.prototype.):
        (ResultsTable.prototype._showGraph):
        (ResultsTable.prototype._showJSON):
        (ResultsTable.prototype._isAlarmingMeasurement):
        (ResultsTable.prototype._isAlarmingTestResults):
        (ResultsTable.prototype._showEmptyCells):
        (ResultsTable.prototype._showEmptyRow):
        (ResultsTable.prototype._showTest):
        (ResultsTable.prototype._showSuite):
        (ResultsTable.prototype._showIteration):
        (ResultsTable.prototype.showRecord):
        (ResultsTable.prototype.showIterations):
        (ResultsTable.prototype._showEmpty): Deleted.
        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.didFinishLastIteration):
        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults):

2015-11-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Clean referencing the options object in the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151284

        Reviewed by Simon Fraser.

        Get rid of the Benchmark.options member and rely only on the private member
        Benchmark._options. The animator need to have its own options member instead
        of accessing it from its reference to Benchmark object.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
        (BouncingCanvasParticlesAnimator):
        (BouncingCanvasParticlesBenchmark.prototype.createAnimator):
        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticle.prototype.animate):
        (BouncingParticlesAnimator):
        (BouncingParticlesBenchmark.prototype.createAnimator):
        * Animometer/tests/examples/resources/canvas-electrons.js:
        (CanvasElectronsStage.prototype.animate):
        (CanvasElectronsAnimator):
        (CanvasElectronsBenchmark.prototype.createAnimator):
        (window.benchmarkClient.create):
        * Animometer/tests/examples/resources/canvas-stars.js:
        (CanvasStarsStage.prototype.animate):
        (CanvasStarsAnimator):
        (CanvasStarsBenchmark.prototype.createAnimator):
        (window.benchmarkClient.create):
        * Animometer/tests/resources/main.js:
        (BenchmarkState.prototype.currentProgress):
        (Animator):
        (Animator.prototype.animate):
        (Benchmark):
        (Benchmark.prototype.update):
        * Animometer/tests/resources/stage.js:
        (Stage.prototype.clear):
        (StageAnimator):
        (StageBenchmark.prototype.createAnimator):
        (StageBenchmark.prototype.tune):
        (StageBenchmark.prototype.showResults):
        * Animometer/tests/simple/resources/simple-canvas.js:
        (SimpleCanvasStage.prototype.animate):
        (SimpleCanvasAnimator):
        (SimpleCanvasAnimator.prototype.animate):
        (SimpleCanvasBenchmark.prototype.createAnimator):
        * Animometer/tests/template/resources/template-canvas.js:
        (TemplateCanvasStage.prototype.animate):
        (TemplateCanvasBenchmark.prototype.createAnimator):
        (window.benchmarkClient.create):

2015-11-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Eliminate a request for layout every time an item is added to the stage of the graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=151289

        Reviewed by Simon Fraser.

        Cache the stage size when it is created instead of requesting every time
        an object is added via clientWidth and clientHeight.

        * Animometer/resources/extensions.js:
        (Insets.elementPadding):
        * Animometer/tests/resources/stage.js:
        (Stage):
        (Stage.prototype.get size):

2015-11-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Initialize the graphics benchmark's Kalman filter with estimated 60 FPS
        https://bugs.webkit.org/show_bug.cgi?id=150965

        Reviewed by Darin Adler.

        This should give the benchmark more accurate reading at warmup time. And
        hence we can safely reduce the test running time to be 10 seconds.

        * Animometer/runner/animometer.html:
        Add "defer" back when loading resources/animometer.js since this script
        depends on many other scripts and we need to wait till the page is parsed.
        Also change the default test interval to be 10 seconds.

        * Animometer/runner/resources/graph.js:
        (graph): Make the test results curves smoother.

        * Animometer/tests/resources/main.js:
        (Animator): Initialize the Kalman filter with 60 FPS which should be true
        if the test page is empty.

        (Animator.prototype.animate):
        * Animometer/tests/resources/math.js:
        (KalmanEstimator): Fix the initial value of _vecX_est.
            _vecX_est[0] = current FPS (= 60FPS when the test page is empty)
            _vecX_est[1] = first time derivative of FPS (=0; FPS has been constant).
            _vecX_est[2] = second time derivative of FPS (=0; since _vecX_est[1]=0).
        (KalmanEstimator.prototype.estimate): Add some comments.

2015-11-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove "defer" from the scripts' references in the graphics benchmark home page
        https://bugs.webkit.org/show_bug.cgi?id=150915

        Reviewed by Simon Fraser.

        It causes the benchmark to be very flakey.

        * Animometer/runner/animometer.html:

2015-11-01  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Add an option to make the graphics benchmark runs a specific test with fixed complexity
        https://bugs.webkit.org/show_bug.cgi?id=150529

        Reviewed by Darin Adler.

        Beside each test in the suites tree, we are going to show the complexity
        arithmetic mean of the of the last run in an edit control. Based on a
        new option these edit controls will all be visible or hidden. If they are
        visible their values can be changed. The benchmark runner if it run in
        the non-adaptive mode will set the complexity of the test to the passed
        value and will not change it ever. The animator will animate the test and
        frame rate will also be measured.

        * Animometer/runner/animometer.html: Add a new option for the non-adaptive mode.

        * Animometer/runner/resources/animometer.css:
        (section#home input[type="number"]): Define the width of all the edit control in the <home> section.
        (section#home > suites input[type="number"]): The edit controls in the <suites> box will be right aligned and hidden by default.
        (section#home > suites input[type="number"].selected): When the class "selected" is added, the edit controls will be visible.
        (section#home > options > label > input[type="number"]): Deleted.

        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.didFinishLastIteration): Update the local storage with the results of each test.
        (window.optionsManager._adaptiveTestElement): Returns the checkbox for setting the adaptive test option.
        (window.suitesManager._editElement):  Returns the edit element associated with each test element in the suites tree.
        (window.suitesManager._editsElements): Returns a list of all the elements in the <suites> box.
        (window.suitesManager._localStorageNameForTest): Change this function to take strings.
        (window.suitesManager._createTestElement): Adds an edit control beside each test.
        (window.suitesManager.updateEditsElementsState): Adds/Removes the 'selected' class to/from all the tests edit elements.
        (window.suitesManager.updateUIFromLocalStorage): Reads the edit control value from the local storage.
        (window.suitesManager.updateLocalStorageFromUI): Saves the edit control value to the local storage.
        (window.suitesManager.updateLocalStorageFromJSON): Saves the last run results to the local storage.
        (window.benchmarkController.initialize): Shows/Hides the test edit controls based on the adaptive test option.
        (window.benchmarkController.onChangeAdaptiveTestCheckbox): An onchange event handler for the adaptive test checkbox.

        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.update): Fix the complexity of the test if the running mode is non-adaptive test and desired complexity is not zero.
        (window.runBenchmark): Add the test complexity as a new benchmark option.

2015-11-01  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Make the size of the benchmark canvas adaptive to the screen size and screen resolution
        https://bugs.webkit.org/show_bug.cgi?id=150530

        Reviewed by Darin Adler.

        We want to set the size of the benchmark stage dynamically such that it
        depends on the screen resolution and the device scale factor. This patch
        does more than that because the home page css was not done properly. To
        use the flex box layout, the animometer.css has to be rewritten almost from
        scratch. The suites tree has to be rewritten also because it was not collapsing
        and with the flex box layout it was going outside of the window area. The
        options handling and the local storage handling had to be rewritten to
        allow more flexibility with this patch and the future patches. The code
        in animometer.js was reorganized into objects to allow distributing the code
        nicely among separate entities.

        * Animometer/resources/extensions.js:
        (Point.elementClientSize): Returns the client size of an HTMLElement as a Point object.
        (Insets.prototype.get width): Follow the function opening brace style guidelines.
        (Insets.prototype.get height):
        (Insets.prototype.get size): Returns the size of an Insets as a Point object.

        (window.DocumentExtension): Provides document helper functions. It should be assailable from the runner and the tests.
        (window.DocumentExtension.createElement): Creates an HTMLElement given its name, attributes and parentElement.
        (window.DocumentExtension.createSvgElement): Creates an SVGElement given its name, attributes and parentElement (moved from utilities.js).
        (window.DocumentExtension.insertCssRuleAfter): Inserts a CSS rule after an exiting rule given its text.

        (ResultsTable.prototype._showHeader): Use DocumentExtension functions.
        (ResultsTable.prototype._showGraph): Use DocumentExtension functions and create a real button for "Graph..." option.
        (ResultsTable.prototype._showJSON): Use DocumentExtension functions and create a real button for "JSON..." option.
        (Options): Deleted.

        * Animometer/runner/animometer.html: Restructure the page to use the flex box layout.

        * Animometer/runner/resources/animometer.css:
        (html,body):
        (button):

        (button.large-button):The large button appears in the animometer.html.
        (button.large-button:active):
        (button.large-button:disabled):

        (button.small-button): The small button appears in the results table.
        (button.small-button:active):

        (.tree): The tree class is used to list the suites and their tests.
        (.tree .expand-button): This button expands a tree element.
        (.tree .expand-button ~ ul): Hide the children (<ul>...</ul>) of a parent node by default.
        (.tree .expand-button:checked ~ ul): Show the children of a parent node only when checked.
        (.tree ul): Hide the list bullets.
        (.tree li): Indent every node in the tree relative to its parent.
        (.tree ul li): Indent all the non top level nodes only (the tests nodes in our case).
        (.tree > li:last-child): Do not indent the bottom of the last child node.
        (.tree-label): Style for all the labels in the tree.
        (label.tree-label): Style for the labels in the top level only (the suites nodes in our case).
        (label.tree-label:before): Style the unchecked case of the expand-button.
        (:checked ~ label.tree-label:before): Style the checked case of the expand-button.

        (table.results-table): The results table appears while running the test and at the end.
        (.results-table td):
        (.results-table th):

        (div.results-json): The JSON div appears per test or for the whole run.

        (main): This is the flex box container.

        (section): A section is displayed exclusively inside the <main>. It is hidden by default.
        (section.selected): When it is selected, its layout is flex layout.
        (section > footer): The header or the footer of a section should not take more than 15% of the container.

        (section#home): The home section has <suites> and <options> parts to be laid out in the middle.
        (section#home > options):
        (section#home > suites): The <suites> should not take more than 40% of the width.
        (section#home > options > label): The benchmark title.
        (section#home > header > h2): The benchmark title.
        (section#home > options > label > input[type="number"]): Sets the width of the option edit control.

        (section#running): The running section contain the runner <iframe> which takes the whole area of the <main>.
        (section#running > #running-test): This is the <iframe> container.
        (section#running > #running-test > iframe): The <iframe> is created by the runner for each test.
        (section#running > #progress): This is the progress bar.
        (section#running > #progress > #progress-completed): This is another element which grows while the runner is progressing.
        (section#running > #record): This the container of the record results table which is shown while running a test.

        (section#results):
        (section#json):
        (section#test-json):
        (section#test-graph): All these sections have the same layout. A <data> element is laid out between <header> and <footer>.

        (section#results > data):
        (section#json > data):
        (section#test-json > data):
        (section#test-graph > data): The <data> element should take 70% of the <section>.

        (section#test-graph > data > svg):
        (.axis line):
        (.left-samples): These styles are for the d3 graph.

        (section#test-json > data): This is the style of the JSON <data> element.

        (iframe): Deleted.
        (label, p): Deleted.
        (section > p): Deleted.
        (section#home > p): Deleted.
        (section#home > p:first-child): Deleted.
        (#testContainer): Deleted.
        (section#running #progress-completed): Deleted.
        (section#results > table): Deleted.
        (section#results > table td, th): Deleted.
        (section#results > table tr.alt, td): Deleted.
        (section#results > table th): Deleted.
        (section#json > textarea): Deleted.
        (.options): Deleted.
        (.options p): Deleted.
        (#suites ul): Deleted.
        (#suites ul ul): Deleted.
        (#suites ul ul input, #suites ul ul label): Deleted.
        (#suites.showTests ul ul): Deleted.
        (.column): Deleted.
        (input[type="number"]): Deleted.
        (.buttons): Deleted.
        (.small-button): Deleted.
        (#graphContainer): Deleted.
        (.right-samples): Deleted.
        (.sample-time): Deleted.
        (.left-mean): Deleted.
        (.right-mean): Deleted.

        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.initialize): Initialize the client object with the options and the suites.
        (window.benchmarkRunnerClient.willStartFirstIteration): Use new css selectors for results and the record table.
        (window.benchmarkRunnerClient.didFinishLastIteration): Move the code which sets the JSON text to sectionsManager.showJSON().

        (window.sectionsManager): Responsible of managing the <section>s elements inside animometer.html.
        (window.sectionsManager._sectionHeaderH1Element): Return the <h1> inside the <header> of a given section.
        (window.sectionsManager._sectionDataDivElement): Return the <div> inside the <data> of a given section.
        (window.sectionsManager.showScore): Show the score of the last benchmark run.
        (window.sectionsManager.showTestName): Show the test name for detailed results <section>.
        (window.sectionsManager.showJSON): Shows the JSON text of the last benchmark or for a specific test.
        (window.sectionsManager.showSection): Shows a specific <section> in the <main> container.
        (window.sectionsManager.setupSectionStyle): Sets css attributes for all the <section>s.
        (window.sectionsManager.setupRunningSectionStyle): Sets the css attributes for the running <section> only.

        (window.optionsManager): Responsible of managing the user options and streaming them to/form the localStorage.
        (window.optionsManager._optionsElements): Returns the children <input> elements of the <options>.
        (window.optionsManager.updateUIFromLocalStorage): Restore the values of the <options> UI elements from the local storage.
        (window.optionsManager.updateLocalStorageFromUI): Saves the values of the <options> UI elements to the local storage.

        (window.suitesManager): Responsible of managing the user suites and streaming them to/form the localStorage.
        (window.suitesManager._treeElement): Returns the suites tree container element.
        (window.suitesManager._suitesElements): Returns a list of the suites elements.
        (window.suitesManager._checkboxElement): Returns the checkbox element of a given suite.
        (window.suitesManager._localStorageNameForTest): Generates a string for the tuple <suite, test> to be saved in the localStorage.
        (window.suitesManager._updateSuiteCheckboxState): Updates the state of a suite checkbox from the state of its tests' checkboxes.
        (window.suitesManager._updateStartButtonState): Updates the state of the start button from the state of the suites' checkboxes.
        (window.suitesManager._onChangeSuiteCheckbox): Called when a suite checkbox is clicked.
        (window.suitesManager._onChangeTestCheckbox): Called when a test checkbox is clicked.
        (window.suitesManager._createSuiteElement): Creates suite node in the suites tree.
        (window.suitesManager._createTestElement): Creates test node in the suites tree.
        (window.suitesManager.createElements): Creates the suites tree dynamically from the array Suites.
        (window.suitesManager.updateUIFromLocalStorage): Restore the values of the <suites> UI elements from the local storage.
        (window.suitesManager.updateLocalStorageFromUI): aves the values of the <suites> UI elements to the local storage.

        (window.benchmarkController): This is the UI controller of the animometer.html page.
        (window.benchmarkController.initialize): Called when the animometer.html page is loaded.
        (window.benchmarkController._runBenchmark): Starts a benchmark run.
        (window.benchmarkController.startTest): Called when the "Start Test" button is clicked.
        (window.benchmarkController.showResults): Called at the end of the test to show the final results.
        (window.benchmarkController.showJson): Called from the results page to show the JSON of the last benchmark run.
        (window.benchmarkController.showTestGraph): Called from the results the table to show a graph for the samples of a specific test.
        (window.benchmarkController.showTestJSON): Called from the results the table to show a JSON for the samples of a specific test.

        (showSection): Deleted.
        (startTest): Deleted.
        (showResults): Deleted.
        (showJson): Deleted.
        (showTestGraph): Deleted.
        (showTestJSON): Deleted.
        (initialize.toggleTestsCheckbox.onchange): Deleted.
        (initialize): Deleted.
        (updateSuiteSelection): Deleted.
        (updateTestSelection): Deleted.
        (updateSuiteCheckbox): Deleted.
        (localStorageNameForTest): Deleted.
        (populateSettings.): Deleted.
        (populateSettings): Deleted.

        * Animometer/runner/resources/benchmark-runner.js:
        (BenchmarkRunner): Pass the frameContainer element to the BenchmarkRunner.
        (BenchmarkRunner.prototype._appendFrame): Remove unused parameter unwanted styling code.
        (BenchmarkRunner.prototype.runMultipleIterations):  Use the this._client.iterationCount instead of passing it as a parameter also.

        * Animometer/runner/resources/graph.js:
        (graph): Calculate the size of the chart from the container element.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
        (BouncingSvgImage):
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js:
        (BouncingSvgParticlesStage.prototype._createDefs):
        (BouncingSvgParticlesStage.prototype._createClipStar):
        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
        (BouncingSvgShape.prototype._createShape):
        (BouncingSvgShapesStage.prototype.createGradient):
        Call DocumentExtension.createSvgElement() instead of calling Utilities.createSvgElement().

        * Animometer/tests/resources/main.js:
        (Animator.prototype.animate):
        (Benchmark):
        (Benchmark.prototype.update):
        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults):
        Rename the options to match the <input> ids in animometer.html.

        * Animometer/tests/resources/utilities.js:
        (window.Utilities.createSvgElement): Deleted.

        * Animometer/tests/text/layering-text.html:
        * Animometer/tests/text/resources/layering-text.js:
        (LayeringTextStage):
        (LayeringTextStage.prototype._setFontSize): Sets the size of the text dynamically such that they all fit in one stage.

2015-10-29  Simon Fraser  <simon.fraser@apple.com>

        Animometer computes frame rate incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=150698

        Reviewed by Tim Horton.

        The existing code incremented this._frameCount after checking against this._dropFrameCount.
        This has the effect of setting this._measureTimeOffset one frame too late, so
        we were measuring only two frames, not three, and thus computing an incorrect fps.

        * Animometer/tests/resources/main.js:
        (Animator.prototype.animate):

2015-10-27  Jon Lee  <jonlee@apple.com>

        Add an option to make the graphics benchmark runs a specific test
        https://bugs.webkit.org/show_bug.cgi?id=150528
        rdar://problem/23246614

        Reviewed by Zalan Bujtas.

        Add a checkbox that lets the user list all of the available tests, and select
        the ones to run repeatedly. The test checkboxes will update the state of the suite
        checkbox. The selected tests are stored in localStorage to make it easy to do
        repeated runs.

        * Animometer/runner/animometer.html: Add a checkbox to show individual tests.
        Update other markup.
        * Animometer/runner/resources/animometer.css: Make the settings area a little wider
        to accommodate the longer names of the tests
        * Animometer/runner/resources/animometer.js:
        (startBenchmark): Change the way that the suites are fed into the benchmark
        runner. Go through each of the suites and their tests, and create a new Suite
        with just the enabled tests. While enumerating store the enabled tests into
        localStorage.
        (initialize): Initialization routine (taking over populateSettings). When the
        checkbox for showing tests is toggled, add or remove a class on #suites to show
        the individual tests.
        (updateSuiteSelection): Called whenever the user toggles the checkbox for a suite.
        Either select all or none of the tests.
        (updateTestSelection): Called whenever the user toggles the checkbox for a test.
        (updateSuiteCheckbox): Update the state of the test's suite's checkbox to
        indeterminate if there is at least one enabled test, unchecked if none are selected,
        and checked if all are selected.
        (localStorageNameForTest): Helper function to get the name of the test to use as
        a key to localStorage.
        (populateSettings): Add the tests for each suite into an inner list.

2015-10-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add an option to output the results of the graphics benchmark in JSON format
        https://bugs.webkit.org/show_bug.cgi?id=150484
        <rdar://problem/23243721>

        Reviewed by Darin Adler.

        * Animometer/resources/extensions.js:
        (ResultsDashboard): A new class to hold the iterations results.
        (ResultsDashboard.prototype.push): Appends an iteration results;
        (ResultsDashboard.prototype.toJSON): Converts the iterations results to JSON format.

        (RecordTable.prototype.clear): Clears the results table.
        (RecordTable.prototype._showTitles): Shows the header titles and appends the sub-titles to a queue.
        (RecordTable.prototype._showHeader): Shows the table header titles.
        (RecordTable.prototype._showEmpty): Shows an empty table cell.
        (RecordTable.prototype._showValue): Shows a number value in the results table.
        (RecordTable.prototype._showSamples): Shows a button for the sampled data graph.
        (RecordTable.prototype._showTest): Shows the results of a single test.
        (RecordTable.prototype._showSuite): Shows the results of a single suite.
        (RecordTable.prototype.showRecord): Shows a single iteration for a single test.
        (RecordTable.prototype.showIterations): Shows the results of all the suites of the iterations.

        (ResultsTable): RecordTable was renamed to ResultsTable.
        (ResultsTable.prototype.clear): Clears the table element.
        (ResultsTable.prototype._showHeaderRow): Shows a row in the results table header.
        (ResultsTable.prototype._showHeader): Shows the results table header.
        (ResultsTable.prototype._showEmpty): Shows an empty table cell.
        (ResultsTable.prototype._showText): Shows a string in a new table cell.
        (ResultsTable.prototype._showFixedNumber): Shows a number in a new table cell.
        (ResultsTable.prototype._showGraph): Shows a button for the sampled data graph.
        (ResultsTable.prototype._showJSON): Shows a button for the sampled data JSON.
        (ResultsTable.prototype._showTest): Shows the results of a single test.
        (ResultsTable.prototype._showSuite): Shows the results of a single suite.
        (ResultsTable.prototype._showIteration): Shows the results of a single iteration.
        (ResultsTable.prototype.showRecord): Shows a single iteration for a single test.
        (ResultsTable.prototype.showIterations): Shows all the results.
        (RecordTable): Deleted.
        (RecordTable.prototype.clear): Deleted.
        (RecordTable.prototype._showTitles): Deleted.
        (RecordTable.prototype._showHeader): Deleted.
        (RecordTable.prototype._showEmpty): Deleted.
        (RecordTable.prototype._showValue): Deleted.
        (RecordTable.prototype._showSamples): Deleted.
        (RecordTable.prototype._showTest): Deleted.
        (RecordTable.prototype._showSuite): Deleted.
        (RecordTable.prototype.showRecord): Deleted.
        (RecordTable.prototype.showIterations): Deleted.

        * Animometer/resources/sampler.js:
        (Sampler.prototype.startSampling): Use forEach.
        (Sampler.prototype.sample): Use forEach.
        (Sampler.prototype.toJSON): Converts the sampler data to JSON format.

        * Animometer/resources/strings.js: Added.
        This new file will be used to associate the strings used by the benchmark
        with IDs. A string can be changed in one place without having to change
        all the instances of this string in multiple files. There two groups of
        strings in this file. The first one is used by the UI elements and the second
        group is used when constructing the results JSON.

        * Animometer/runner/animometer.html:
        * Animometer/runner/resources/animometer.css:

        * Animometer/runner/resources/animometer.js:
        (window.benchmarkRunnerClient.willAddTestFrame):
        (window.benchmarkRunnerClient.willStartFirstIteration):
        (window.benchmarkRunnerClient.didRunSuites):
        (window.benchmarkRunnerClient.didFinishLastIteration):
        Make benchmarkRunnerClient uses ResultsDashboard instead of _iterationsSamplers
        Get the JSON from ResultsDashboard.toJSON() and pass it to ResultsTable.showIterations().
        Also set the textContent of the "#json" textarea with the results JSON.

        (showResults): Delete unneeded code.
        (showJson): Shows the "json" section.
        (showTestGraph): Rename showGraph() to be showTestGraph().
        (showTestJSON): Shows the JSON of a single testResults.
        (showGraph): Deleted.

        * Animometer/runner/resources/tests.js:
        Use the string table instead of putting literal strings.

        * Animometer/tests/resources/stage.js:
        (StageBenchmark.prototype.showResults):
        Fix the parameters which are passed to RecordTable.showRecord().

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html:
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-css-images.html:
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html:
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html:
        * Animometer/tests/examples/canvas-electrons.html:
        * Animometer/tests/examples/canvas-stars.html:
        * Animometer/tests/simple/simple-canvas-paths.html:
        * Animometer/tests/template/template-canvas.html:
        * Animometer/tests/template/template-css.html:
        * Animometer/tests/template/template-svg.html:
        * Animometer/tests/text/layering-text.html:
        Include the new strings.js file in all the test files.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas line dash test
        https://bugs.webkit.org/show_bug.cgi?id=150078
        <rdar://problem/23082347>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add line dash test.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLineDashStage): Create a new stage with a default dash pattern and stroke style.
        Maintain a step which will animate the dash.
        (CanvasLineDashStage.prototype.animate): Render the line path with the dash. Increment
        the dash offset to animate.
        (CanvasPathBenchmark.prototype.createStage): Add the test.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas line path tests
        https://bugs.webkit.org/show_bug.cgi?id=150076
        <rdar://problem/23082285>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add new line path tests, with different
        line joins.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLinePathStage): The stage is the same as the SimpleCanvasPathStrokeStage
        but sets the lineJoin on the context.
        (CanvasPathBenchmark.prototype.createStage): Add the tests.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add missing paint objects for arc and arcTo fills
        https://bugs.webkit.org/show_bug.cgi?id=150075
        <rdar://problem/23082233>

        Reviewed by Dean Jackson.

        * Animometer/tests/simple/resources/simple-canvas-paths.js: Add missing paint objects
        for arcTo and arc segment fills.
        (CanvasArcToSegmentFill):
        (CanvasArcToSegmentFill.prototype.draw):
        (CanvasArcSegmentFill):
        (CanvasArcSegmentFill.prototype.draw):

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas line segment tests
        https://bugs.webkit.org/show_bug.cgi?id=150073
        <rdar://problem/23082138>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add new line segment tests, with different
        line caps.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLineSegment): Add new line segment paint object.
        (CanvasLineSegmentStage): Create a new stage that sets the lineCap.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas path fill tests
        https://bugs.webkit.org/show_bug.cgi?id=150071
        <rdar://problem/23082001>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add new pathTypes for path fills.
        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (CanvasLinePoint): Add basic point for a line, and call lineTo.
        (SimpleCanvasPathFillStage): Add a new stage similar to SimpleCanvasPathStrokeStage.
        (CanvasPathBenchmark.prototype.createStage): Add the tests.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add canvas path tests
        https://bugs.webkit.org/show_bug.cgi?id=150067
        rdar://problem/23081463

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/tests.js: Add a quadratic and bezier path test.

        * Animometer/tests/simple/resources/simple-canvas.js:
        (SimpleCanvasStage.prototype.tune): This kind of test joins all of the segments
        into one long path, and tries to render that one path. Random points make it
        difficult to tell what is going on, so add a parameter to the constructor to
        confine the area where the random coordinates can land. The more complicated the
        case is, the larger an area the path will cover. Add an artificial minimum so
        that the first 200 points aren't confined to a space that is too small.

        * Animometer/tests/simple/resources/simple-canvas-paths.js:
        (SimpleCanvasPathStrokeStage): Add a new kind of stage that inherits from
        SimpleCanvasStage. Each time the frame animates a random line width and stroke
        color are chosen. The path setup is done outside of each paint object.
        (CanvasQuadraticPoint): This point just calls quadraticCurveTo.
        (CanvasPathBenchmark.prototype.createStage): Add the tests.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Add basic canvas tests
        https://bugs.webkit.org/show_bug.cgi?id=150066
        rdar://problem/23081143

        Reviewed by Dean Jackson.

        This adds a new test suite that will cover all of the path-based canvas calls.
        The patch will be divided up to cover tests with similar techniques.

        The simplest version uses a SimpleCanvasStage.

        * Animometer/runner/resources/tests.js: Add tests for quadratic, bezier, arcTo,
        arc, and rect segments. Also include arcTo, arc, and rect fills.
        * Animometer/tests/resources/stage.js:
        (Stage.prototype.randomBool): Added for counterclockwise property for arc segments.
        (Stage.prototype.randomInt): Fix how values are rounded, used by randomBool. It should
        round instead of flooring everything.
        * Animometer/tests/simple/resources/simple-canvas.js: Added. Defines common classes
        used by all simple canvas tests. The page reads best bottom to top.
        (SimpleCanvasStage): Basic stage. Pass a canvasObject which will be used to create new
        objects as needed in tune().
        (SimpleCanvasStage.prototype.tune): Modeled on other tests. Adds and removed objects
        as specified by the provided |count|.
        (SimpleCanvasStage.prototype.animate): Iterate over all the objects and ask them to draw.
        There is no "animating" of the objects; they will just paint statically on the canvas.
        (SimpleCanvasAnimator): Basic animator clears the canvas prior to painting.
        (SimpleCanvasBenchmark): Hard-code the feedback loop parameters instead of including
        them in the query parameters to the test URLs.
        (SimpleCanvasBenchmark.prototype.createAnimator):
        * Animometer/tests/simple/simple-canvas-paths.html: Added.

        * Animometer/tests/simple/resources/simple-canvas-paths.js: Added. There is no "animating"
        of these objects--they just paint statically on the canvas.
        (CanvasQuadraticSegment): Paint a quadratic segment stroke.
        (CanvasBezierSegment): Paint a bezier segment stroke.
        (CanvasArcToSegment): Paint an arcTo stroke.
        (CanvasArcSegment): Paint an arc stroke.
        (CanvasRect): Paint a rect.
        (CanvasRectFill): Paint a filled rect.

        (CanvasPathBenchmark):
        (CanvasPathBenchmark.prototype.createStage): Look for the pathType and create the
        stage using the right paint object.
        (window.benchmarkClient.create):

2015-10-12  Jon Lee  <jonlee@apple.com>

        Refactor tune() to pass in an integer-based count
        https://bugs.webkit.org/show_bug.cgi?id=150060
        <rdar://problem/23079425>

        Reviewed by Dean Jackson.

        All of the tune functions do an initial step of flooring the
        # of painting objects to add or remove. Factor that out since
        the complexity of all of these tests is always expressed in terms
        of countable items.

        * Animometer/tests/resources/main.js:
        (Benchmark.prototype.update): Update the tuneValue.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
        (BouncingParticlesStage.prototype.tune): Remove the count adjustment.
        * Animometer/tests/examples/resources/canvas-electrons.js:
        (CanvasElectronsStage.prototype.tune): Ditto.
        * Animometer/tests/examples/resources/canvas-stars.js:
        (CanvasStarsStage.prototype.tune): Ditto.
        * Animometer/tests/text/resources/layering-text.js:
        (LayeringTextStage.prototype.tune): Ditto.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Store test-interval in localStorage
        https://bugs.webkit.org/show_bug.cgi?id=150055
        <rdar://problem/23078879>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/animometer.js:
        (populateSettings): Keep track of the specified test interval in localStorage
        to make it easy to repeat a test suite.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Remove "../tests/" from the URLs of all tests
        https://bugs.webkit.org/show_bug.cgi?id=150054
        <rdar://problem/23078784>

        Reviewed by Dean Jackson.

        Presumably all tests will be running from the tests/ directory,
        so we don't have to specify it in all of the test URLs.

        * Animometer/runner/resources/benchmark-runner.js:
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Prepend
        "../tests/" to all tests.
        * Animometer/runner/resources/tests.js: Remove "../tests/" from
        all URLs.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Refactor test suites to a separate class.
        https://bugs.webkit.org/show_bug.cgi?id=150053
        <rdar://problem/23078645>

        Reviewed by Dean Jackson.

        Create a Suite class to refactor out prepare() and run().
        Generate the checkboxes representing the suites using Suites
        instead of maintaining a separate list. Also, save the
        selections out to localStorage.

        * Animometer/runner/animometer.html: Remove the explicitly listed
        suites. These will be generated from Suites instead.
        * Animometer/runner/resources/animometer.js:
        (populateSettings): Iterate through Suites, and create the
        label and checkbox. Attach the Suite object to the checkbox so
        when the benchmark is started, we get direct access. Initialize
        the checkmark based on its value in localStorage. Set this to
        run when DOMContentLoaded is dispatched.
        (startBenchmark): Grab all of the checkboxes, inspect their
        values, add it to enabledSuites if selected. Remember whether
        the suite was enabled in localStorage, so that it's easy to do
        repeated runs.
        * Animometer/runner/resources/tests.js:
        (Suite): Create a new Suite class. Refactor out prepare() and
        run(), since all of them have the same implementation. Populate
        Suites with Suite instances instead of generic objects.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Update graph styles for legibility.
        https://bugs.webkit.org/show_bug.cgi?id=150052
        <rdar://problem/23078503>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/animometer.css: Update colors and
        stroke thicknesses to make the graphs easier to read.
        (.smaple-time): Correct to .sample-time
        * Animometer/runner/resources/graph.js:
        (graph): Ditto.

2015-10-12  Jon Lee  <jonlee@apple.com>

        Update graph styles for legibility.
        https://bugs.webkit.org/show_bug.cgi?id=150052
        <rdar://problem/23078503>

        Reviewed by Dean Jackson.

        * Animometer/runner/resources/animometer.css: Update colors and
        stroke thicknesses to make the graphs easier to read.
        (.smaple-time): Correct to .sample-time
        * Animometer/runner/resources/graph.js:
        (graph): Ditto.

2015-10-12  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert an unintended commit.

        * JetStream/Octane2/crypto.js:
        (montRevert):
        (montReduce):

2015-10-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=149053
        <rdar://problem/18984169>

        Reviewed by Dean Jackson.

        Instead of measuring the FPS of the animation, this benchmark measures the
        test complexity when rendering at a set-point FPS which should be lower
        than 60 FPS. This benchmark tries to stay at the set-point FPS by using
        a closed loop control system PID function. The gain of the system is passed
        as a parameter when running the test. Measuring the FPS faithfully results
        very fluctuating values. A Kalman filter is used to give a better estimate
        for the current FPS.

        The animation of the tests is done manually. requestAnimationFrame() is
        called with a callback. Inside this callback, the test is animating by
        changing the positions of the elements inside the page. The test complexity
        may change also if the current FPS is not equal to the desired FPS.

        In this patch, the benchmark and the tests are included. The shared code
        and the tests runner are included in separate patches.

        * Animometer/runner/animometer.html:
        * Animometer/runner/resources/animometer.js:
        Add two new examples for more complex animation techniques.
        Add an option to show/hide the test running results which is off by default.

        * Animometer/runner/resources/tests.js: Added.
        (suiteFromName): Returns a suite given its name.
        (testFromName): Returns a test given its suite and name.

        * Animometer/tests: Added.
        This directory includes all the test suites to be run by the benchmark.
        runner. All the tests should try to run on three stages: CSS, canvas and
        SVG.

        * Animometer/tests/bouncing-particles: Added.
        * Animometer/tests/bouncing-particles/resources: Added.
        The bouncing particles test is an example of a simple animation technique.

        * Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-css-images.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-svg-images.html: Added.
        * Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Added.
        Bouncing particles test pages.

        * Animometer/tests/bouncing-particles/resources/bouncing-particles.js: Added.
        (BouncingParticle): Base class for a bouncing particle.
        (BouncingParticle.prototype.center): Returns the center point or the particle.
        (BouncingParticle.prototype.animate): Moves the particle based on its current position, angle and velocity.

        (BouncingParticlesAnimator): A sub class of Animator.

        (BouncingParticlesStage): Represents the container of all the bouncing particles.
        (BouncingParticlesStage.prototype.parseShapeParamters): Gets the shape parameters for shape animating tests.
        (BouncingParticlesStage.prototype.randomRotater): Creates a rotater for the particles.
        (BouncingParticlesStage.prototype.animate): Animates all the particles.
        (BouncingParticlesStage.prototype.tune): Changes the test by adding or removing particles.

        (BouncingParticlesBenchmark): Runs the benchmark for bouncing particles test.
        (BouncingParticlesBenchmark.prototype.createAnimator): Creates an animator of type BouncingParticlesAnimator.

        * Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js: Added.
        (BouncingCssShape): A sub class of BouncingParticle for animating CSS shapes.
        (BouncingCssShape.prototype._createSpan): Creates a <span> element and takes the shape and clipping classes into consideration.
        (BouncingCssShape.prototype._move): Moves the particle to a new location. Apply transform since it does not require layout.
        (BouncingCssShape.prototype.animate): Rotates and moves the shape to a new location.

        (BouncingCssShapesStage): A sub class of BouncingParticlesStage for animating CSS shapes.
        (BouncingCssShapesStage.prototype.createParticle): Creates a particle of type BouncingCssShape.
        (BouncingCssShapesStage.prototype.particleWillBeRemoved): Removes the corresponding element form the parent children list.

        (BouncingCssShapesBenchmark): A sub class of BouncingParticlesBenchmark for animating CSS shapes.
        (BouncingCssShapesBenchmark.prototype.createStage): Creates a stage of type BouncingCssShapesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCssShapesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-css-images.js: Added.
        (BouncingCssImage): A sub class of BouncingParticle for animating CSS images.
        (BouncingCssImage.prototype._move): Move the particle to a new location. Apply transform since it does not require layout.
        (BouncingCssImage.prototype.animate): Rotates and moves the shape to a new location.

        (BouncingCssImagesStage): A sub class of BouncingParticlesStage for animating CSS images.
        (BouncingCssImagesStage.prototype.createParticle): Creates a particle of type BouncingCssImage.
        (BouncingCssImagesStage.prototype.particleWillBeRemoved): Removes the corresponding element form the parent children list.

        (BouncingCssImagesBenchmark): A sub class of BouncingParticlesBenchmark for animating CSS images.
        (BouncingCssImagesBenchmark.prototype.createStage): Creates a stage of type BouncingCssImagesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCssImagesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js: Added.
        (BouncingCanvasParticle): A base sub-class of BouncingParticle for animating canvas particles.
        (BouncingCanvasParticle.prototype._applyRotation): Apply the particle rotation-around-center transform to the canvas context.
        (BouncingCanvasParticle.prototype._applyClipping): Apply the particle clipping to the canvas context.
        (BouncingCanvasParticle.prototype._draw): A non-implemented version of the drawing function.
        (BouncingCanvasParticle.prototype.animate): Carries out all the steps to redraw the canvas particle.

        (BouncingCanvasParticlesStage): A base sub-class of BouncingParticlesStage for animating canvas particles.

        (BouncingCanvasParticlesAnimator): A concrete sub-class of BouncingParticlesAnimator for animating canvas particles.
        (BouncingCanvasParticlesAnimator.prototype.animate): Overrides the base class method to clear the canvas before redrawing the stage.

        (BouncingCanvasParticlesBenchmark): A base sub-class of StageBenchmark for animating canvas particles.
        (BouncingCanvasParticlesBenchmark.prototype.createAnimator): Creates the canvas particles animator.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js: Added.
        (BouncingCanvasShape): A concrete sub-class of BouncingCanvasParticle for animating canvas shapes.
        (BouncingCanvasShape.prototype._applyFill): Sets the fillStyle in the canvas context.
        (BouncingCanvasShape.prototype._drawShape): Carries out the actual drawing.
        (BouncingCanvasShape.prototype._draw): Carries out all the steps to draw the shape.

        (BouncingCanvasShapesStage): A concrete sub-class of BouncingCanvasParticle for animating canvas shapes.
        (BouncingCanvasShapesStage.prototype.createParticle): Creates a particle of type BouncingCanvasShape.

        (BouncingCanvasShapesBenchmark): A concrete sub-class of BouncingCanvasParticlesBenchmark for animating canvas shapes.
        (BouncingCanvasShapesBenchmark.prototype.createStage): Creates a stage of type BouncingCanvasShapesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCanvasShapesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js: Added.
        (BouncingCanvasImage): A concrete sub-class of BouncingCanvasParticle for animating canvas images.
        (BouncingCanvasImage.prototype._draw): Draws an image on the context of a canvas.

        (BouncingCanvasImagesStage): A concrete sub-class of BouncingCanvasParticlesBenchmark for animating canvas images.
        (BouncingCanvasImagesStage.prototype.createParticle): Creates a particle of type BouncingCanvasImage.

        (BouncingCanvasImagesBenchmark): A concrete sub-class of BouncingCanvasParticlesBenchmark for animating canvas images.
        (BouncingCanvasImagesBenchmark.prototype.createStage): Creates a stage of type BouncingCanvasImagesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingCanvasImagesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-particles.js: Added.
        (BouncingSvgParticle): A base sub-class of BouncingParticle for animating SVG particles.
        (BouncingSvgParticle.prototype._applyClipping): Apply the particle clipping by setting the 'clip-path' attribute of the SVGElement.
        (BouncingSvgParticle.prototype._move): Moves the particle to a new location. Apply transform since it does not require layout.
        (BouncingSvgParticle.prototype.animate): Rotates and moves the shape to a new location.
        (BouncingSvgParticlesStage): A sub class of BouncingParticlesStage for animating SVGElements.
        (BouncingSvgParticlesStage.prototype._createDefs): Creates an SVGDefsElement.
        (BouncingSvgParticlesStage.prototype._ensureDefsIsCreated): Ensures there is only one SVGDefsElement is created.
        (BouncingSvgParticlesStage.prototype._createClipStar): Creates an SVGClipPathElement and sets its 'd' attribute to a star like shape.
        (BouncingSvgParticlesStage.prototype.ensureClipStarIsCreated): Ensure there is only one star SVGClipPathElement is created.
        (BouncingSvgParticlesStage.prototype.particleWillBeRemoved): Remove the corresponding element form the parent children list.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js: Added.
        (BouncingSvgShape): A concrete sub-class of BouncingSVGParticle for animating SVG shapes.
        (BouncingSvgShape.prototype._createShape): Creates an SVG shape.
        (BouncingSvgShape.prototype._applyFill): Applies the selected fill style to the SVG shape.

        (BouncingSvgShapesStage): A concrete sub-class of BouncingSvgParticlesStage for animating SVG shapes.
        (BouncingSvgShapesStage.prototype.createGradient): Creates an SVGLinearGradientElement.
        (BouncingSvgShapesStage.prototype.createParticle): Creates a particle of type BouncingSvgShape.
        (BouncingSvgShapesStage.prototype.particleWillBeRemoved): Ensures the attached SVGLinearGradientElement is removed from the SVGDefsElement.

        (BouncingSvgShapesBenchmark): A concrete sub-class of BouncingParticlesBenchmark for animating SVG images.
        (BouncingSvgShapesBenchmark.prototype.createStage): Creates a stage of type BouncingSvgShapesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingSvgShapesBenchmark.

        * Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js: Added.
        (BouncingSvgImage): A concrete sub-class of BouncingSVGParticle for animating SVG images.

        (BouncingSvgImagesStage): A concrete sub-class of BouncingSVGParticlesBenchmark for animating SVG images.
        (BouncingSvgImagesStage.prototype.createParticle): Creates a particle of type BouncingSvgImage.

        (BouncingSvgImagesBenchmark): A concrete sub-class of BouncingParticlesBenchmark for animating SVG images.
        (BouncingSvgImagesBenchmark.prototype.createStage): Creates a stage of type BouncingSvgImagesStage.
        (window.benchmarkClient.create): Creates a benchmark of type BouncingSvgImagesBenchmark.

        * Animometer/tests/examples: Added.
        * Animometer/tests/examples/canvas-electrons.html: Added.
        * Animometer/tests/examples/canvas-stars.html: Added.
        Examples test pages.

        * Animometer/tests/examples/resources: Added.
        * Animometer/tests/examples/resources/canvas-electrons.js: Added.
        (CanvasElectron): An object which draws and animate a electron object on a canvas stage.
        (CanvasElectron.prototype._draw): Draws the electron object.
        (CanvasElectron.prototype.animate): Animates the electron object.

        (CanvasElectronsStage): A concrete sub-class of Stage for animating electrons.
        (CanvasElectronsStage.prototype.tune): Changes the test by adding or removing elements.
        (CanvasElectronsStage.prototype.animate): Animates the test elements.

        (CanvasElectronsAnimator): A concrete sub-class of StageAnimator for animating canvas electrons.
        (CanvasElectronsAnimator.prototype.animate): Overrides the base class method to clear the canvas before redrawing the stage.

        (CanvasElectronsBenchmark): A concrete sub-class of StageBenchmark for animating electrons.
        (CanvasElectronsBenchmark.prototype.createStage): Creates a stage of CanvasElectronsStage.
        (CanvasElectronsBenchmark.prototype.createAnimator): Creates an animator of type CanvasElectronsAnimator.
        (window.benchmarkClient.create): Creates a benchmark of type CanvasElectronsBenchmark.

        * Animometer/tests/examples/resources/canvas-stars.js: Added.
        (CanvasStar): An object which draws and animate a star object on a canvas stage.
        (CanvasStar.prototype._draw): Draws the star object.
        (CanvasStar.prototype.animate): Animates the star object.

        (CanvasStarsStage): A concrete sub-class of Stage for animating stars.
        (CanvasStarsStage.prototype.tune): Changes the test by adding or removing elements.
        (CanvasStarsStage.prototype.animate): Animates the test elements.

        (CanvasStarsAnimator): A concrete sub-class of StageAnimator for animating canvas stars.
        (CanvasStarsAnimator.prototype.animate): Overrides the base class method to clear the canvas before redrawing the stage.

        (CanvasStarsBenchmark): A concrete sub-class of Benchmark for animating stars.
        (CanvasStarsBenchmark.prototype.createStage): Creates a stage of CanvasStarsStage.
        (CanvasStarsBenchmark.prototype.createAnimator): Creates an animator of type CanvasStarsAnimator.
        (window.benchmarkClient.create): Creates a benchmark of type CanvasStarsBenchmark.

        * Animometer/tests/resources: Added.
        This directory includes the script which is required to run an adaptive
        graphics benchmark. From an empty test page, the set of classes in this
        directory are responsible for measuring the current frame rate and
        changing the test to reach a desired FPS. It keeps asking the test page
        to tune itself by a certain value to increase or decrease the frame rate.
        It's also responsible for sampling the test state and the corresponding
        frame rate.

        * Animometer/tests/resources/main.js: Added.
        (BenchmarkState): Tracks the state of the benchmark test.
        (BenchmarkState.prototype._timeOffset): Returns the timeOffset of a stage.
        (BenchmarkState.prototype._message): Returns the message of a stage.
        (BenchmarkState.prototype.update): Sets the currentTimeOffset to a new value.
        (BenchmarkState.prototype.samplingTimeOffset): Returns the timeOffset of the sampling stage.
        (BenchmarkState.prototype.currentStage): Returns the current stage of the benchmark.
        (BenchmarkState.prototype.currentMessage): Returns the message of the current stage and timeOffset.
        (BenchmarkState.prototype.currentProgress): Returns a percentage of how much the benchmark is running.

        (Animator): Manages animating the test.
        (Animator.prototype.start): Called if animating using setInterval is requested.
        (Animator.prototype.timeDelta): Returns the current timeDelta
        (Animator.prototype.animate): Manages the test animation.
        (Animator.prototype.animateLoop): Called if animating using requestAnimationFrame is requested.

        (Benchmark): Manages running the test benchmark and recording the sampled data.
        (Benchmark.prototype.start): Starts the benchmark.
        (Benchmark.prototype.update): Called from the animator.animate() to change the complexity of the test.
        (Benchmark.prototype.record): Shows the current (not final) results of the benchmark.
        (Benchmark.prototype.resolveWhenFinished): Spins until the benchmark is finished and returns its results.
        (Benchmark.prototype.run): Starts the test, runs it, waits until it is finished and return its results.
        (window.runBenchmark): Called from the benchmark runner through the suite controller run-callback.

        * Animometer/tests/resources/math.js: Added.
        (Matrix): A matrix object.
        (Vector3): A vector of size 3 object.
        (Matrix3): A matrix of size 3x3 object.

        (PIDController): Closed-loop controller for a set-point y.
        (PIDController.prototype._sat): Limits the output to a certain range.
        (PIDController.prototype.tune): Given the current output of a system, it produces a new pid value for tuning it.

        (KalmanEstimator): Implement Kalman filter to get an estimate for a sampled data point.
        (KalmanEstimator.prototype.estimate): Returns an estimate for for a sampled data point.

        * Animometer/tests/resources/utilities.js: Added.
        (window.Utilities._parse): Given a separator character, it pareses a string to a set of <key, value> pairs.
        (window.Utilities.parseParameters): Parses a test parameters.
        (window.Utilities.parseArguments): Parses a tag arguments.
        (window.Utilities.extendObject): Adds the attributes and their values of an object to another object.
        (window.Utilities.copyObject): Copies the attributes and their values of an object to a new object.
        (window.Utilities.mergeObjects): Copies the attributes and their values of two objects to a new object.
        (window.Utilities.createSvgElement): Creates an SVGElement given its name and its attributes.

        * Animometer/tests/resources/stage.css: Added.
        * Animometer/tests/resources/stage.js: Added.
        (Rotater): Manages rotating an angle within a fixed time interval.
        (Rotater.prototype.get interval): Returns the time interval which is required to rotate 360 degrees.
        (Rotater.prototype.next): Moves the current time by a delta.
        (Rotater.prototype.degree): Returns the current rotating degree.
        (Rotater.prototype.rotateZ): Returns CSS formatted transform rotateZ() string for the current degree.
        (Rotater.prototype.rotate): Returns SVG formatted transform rotate() string for the current degree.

        (Stage): A base class for managing the test complexity and test animation.
        (Stage.prototype.get size): Returns the size of the stage excluding the CSS padding.
        (Stage.prototype.random): Returns a random float.
        (Stage.prototype.randomInt): Returns a random integer.
        (Stage.prototype.randomPosition): Returns a random position.
        (Stage.prototype.randomSquareSize): Returns a square size.
        (Stage.prototype.randomVelocity): Returns a random velocity.
        (Stage.prototype.randomAngle): Returns a random angle.
        (Stage.prototype.randomColor): Returns a random color not too dark and not too light.
        (Stage.prototype.randomRotater): Creates a random rotater. Its velocity depends on choosing a random rotation time interval.
        (Stage.prototype.tune): A not-implemented version of this function.
        (Stage.prototype.animate): A not-implemented version of this function.
        (Stage.prototype.clear): Clears the stage from all its animation elements.

        (StageAnimator): A base class for the stage-based animators.
        (StageAnimator.prototype.animate): Calls Animator.animate() which updates the test page and then calls Stage.animate() to force redraw.

        (StageBenchmark): A base class for the stage-based benchmarks.
        (StageBenchmark.prototype.createStage): Creates the default stage.
        (StageBenchmark.prototype.createAnimator): Creates the default animator.
        (StageBenchmark.prototype.tune): Delegates the call to stage.
        (StageBenchmark.prototype.clear): Delegates the call to stage.
        (StageBenchmark.prototype.showResults): Shows the results/progress through its recordTable and progressBar.

        * Animometer/tests/resources/yin-yang.png: Added.
        * Animometer/tests/resources/yin-yang.svg: Added.
        These images are shared among all the tests.

        * Animometer/tests/template: Added.
        * Animometer/tests/template/resources: Added.
        This directory includes template tests which do nothing. They can be used
        to author new tests. Animated items can be created, moved and redrawn by
        removing the TODO comments in the script files and writing actual code.

        * Animometer/tests/template/template-css.html: Added.
        * Animometer/tests/template/template-canvas.html: Added.
        * Animometer/tests/template/template-svg.html: Added.
        Template test pages. They can be used as they are. CSS attributes or hidden
        elements can be added to these derived test pages if needed.

        * Animometer/tests/template/resources/template-css.js: Added.

        (TemplateCssStage): A stage to create and animate HTMLElements.
        (TemplateCssStage.prototype.tune): Changes the test by adding or removing elements.
        (TemplateCssStage.prototype.animate): Animates the test elements.
        (TemplateCssBenchmark):
        (TemplateCssBenchmark.prototype.createStage): Creates the test stage.
        (window.benchmarkClient.create): Creates a benchmark of type TemplateCssBenchmark.

        * Animometer/tests/template/resources/template-canvas.js: Added.
        (TemplateCanvasObject):
        (TemplateCanvasObject.prototype._draw): Draws the objects on the canvas context.
        (TemplateCanvasObject.prototype.animate): Moves and redraws the object.
        (TemplateCanvasStage): A stage to create and animate drawing elements.
        (TemplateCanvasStage.prototype.tune): hanges the test by adding or removing elements.
        (TemplateCanvasStage.prototype.animate):  Animates the test elements.
        (TemplateCanvasAnimator.prototype.animate): Starts the animation every frame.
        (TemplateCanvasBenchmark):
        (TemplateCanvasBenchmark.prototype.createStage): Creates a stage of type TemplateCanvasStage.
        (TemplateCanvasBenchmark.prototype.createAnimator): Creates a animator of type TemplateCanvasAnimator.
        (window.benchmarkClient.create): Creates a benchmark of type TemplateCanvasBenchmark.

        * Animometer/tests/template/resources/template-svg.js: Added.
        (TemplateSvgStage): A stage to create and animate SVGElements.
        (TemplateSvgStage.prototype.tune): Changes the test by adding or removing elements.
        (TemplateSvgStage.prototype.animate): Animates the test elements.
        (TemplateSvgBenchmark.prototype.createStage): Creates a stage of type TemplateSvgStage.
        (window.benchmarkClient.create): Creates a benchmark of type TemplateSvgBenchmark.

        * Animometer/tests/text: Added.
        * Animometer/tests/text/resources: Added.
        This directory includes the text animating tests which currently runs
        on CSS stage only.

        * Animometer/tests/text/layering-text.html: Added.
        Text test page.

        * Animometer/tests/text/resources/layering-text.js: Added.
        (LayeringTextStage): Represents the container of all the stacked text layers.
        (LayeringTextStage.parseTextItem): Parses a textItem which may be an opening tag, a closing tag or a self-closing tag.
        (LayeringTextStage.isOpeningTextItem): Returns true if the textItem is an opening tag e.g. '<ol>'.
        (LayeringTextStage.isClosingTextItem): Returns true if  the textItem is an closing tag e.g. '</ol>.
        (LayeringTextStage.textItemsFlags.LayeringTextStage.textItems.map): Calculates and stores isOpening and isClosing flags for each textItem.
        (LayeringTextStage.isColorableTextItem): Returns true if the textItem is self-closing tag e.g. '<p>...</p>'.
        (LayeringTextStage.isInsertableTextItem): Returns true if the textItems causes a new element to be added to the text layers.
        (LayeringTextStage.colorableTextItems.LayeringTextStage.textItemsFlags.filter): Number of colorable textItems.
        (LayeringTextStage.insertableTextItems.LayeringTextStage.textItemsFlags.filter): Number of insertable textItems.
        (LayeringTextStage.colorIndexToTextElementIndex): Maps from colorIndex [0..colorableTextItems-1] to textElementIndex [0..insertableTextItems-1].
        (LayeringTextStage.prototype._nextTextItem): Moves the _textItemIndex one step forward in a loop [0..LayeringTextStage.textItems.length-1].
        (LayeringTextStage.prototype._previousTextItem): Moves the _textItemIndex one step backward in a loop.
        (LayeringTextStage.prototype._pushTextElement): Creates a new textItemElement and adds it to the topmost container <div>.
        (LayeringTextStage.prototype._popTextElement): Removes the last textItemElement from the topmost container <div>.
        (LayeringTextStage.prototype._colorTextItem): Changes the background color of a single colorable textElement. The index advances in a circle [0..colorableTextItems-1].
        (LayeringTextStage.prototype.animate): Changes the background color and the text color of the textElements such that a redraw is enforced.
        (LayeringTextStage.prototype.tune): Adds or removes textElements to the stage.

        (LayeringTextBenchmark): Runs the benchmark for the layering text test.
        (LayeringTextBenchmark.prototype.createStage): Creates a stage of type LayeringTextStage.
        (window.benchmarkClient.create): Creates a benchmark of type LayeringTextBenchmark.

2015-10-02  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add shared code for a new a graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=149691

        Reviewed by Ryosuke Niwa.

        This set of classes will be shared and used by the tests and the runner
        of a new graphics benchmark.

        * Animometer/resources: Added.
        * Animometer/resources/algorithm.js: Added.
        (Array.prototype.swap): Swaps two elements in an array.
        (Heap): Binary Min/Max Heap object
        (Heap.prototype._parentIndex): Given the child node index, it returns the parent index.
        (Heap.prototype._leftIndex): Given the parent node index, it returns the left node index.
        (Heap.prototype._rightIndex): Given the parent node index, it returns the right node index.
        (Heap.prototype._childIndex): Given the parent node index, it returns the child index that may violate the heap property.
        (Heap.prototype.init): Initializes the heap state.
        (Heap.prototype.top): Returns the value stored at the top of the heap.
        (Heap.prototype.push): Pushes a new node at the top of the heap.
        (Heap.prototype.pop): Extracts the top node of the heap.
        (Heap.prototype._bubble): Fixes the heap property by moving upward.
        (Heap.prototype._sink): Fixes the heap property by moving downward.
        (Heap.prototype.str): Prints the nodes of the heap to a string.
        (Heap.prototype.values): Returns the last "size" heap elements values.

        (Algorithm.createMinHeap): Creates a size-bounded min-heap object.
        (Algorithm.createMaxHeap): Creates a size-bounded max-heap object.

        * Animometer/resources/extensions.js: Added.
        (Point): Point object but can be used as size also.
        (Point.pointOnCircle): Given, the radius of the circle and the angle of the point, it returns a point object.
        (Point.pointOnEllipse): Given, the radiuses of the ellipse and the angle of the point, it returns a point object.
        (Point.prototype.get width): Should be called when the point is used as size.
        (Point.prototype.get height): Should be called when the point is used as size.
        (Point.prototype.get center): Should be called when the point is used as size.
        (Point.prototype.add): Returns a new point = this + other.
        (Point.prototype.subtract): Returns a new point = this - other.
        (Point.prototype.multiply): Returns a new point = this * other.
        (Point.prototype.move): Moves the point in a given direction, velocity, time period.

        (Insets): Represents borders of a container.
        (Insets.prototype.get width): Returns left + right.
        (Insets.prototype.get height): Returns top + bottom.

        (SimplePromise):
        (SimplePromise.prototype.then):
        (SimplePromise.prototype.resolve):
        Moved from Animometer/runner/resources/benchmark-runner.js since tests also need it.

        (Options): Benchmark running options as they are set by the user.

        (ProgressBar): Manages a progress bar element. The progress bar is divided into equal length ranges.
        (ProgressBar.prototype._progressToPercent): Converts the progress into a percentage.
        (ProgressBar.prototype.incRange): Moves to the next range (a range is the running time of a single test).
        (ProgressBar.prototype.setPos): Draws the current progress in the current range.

        (RecordTable): Shows the results of running a benchmark in a tabular form.
        (RecordTable.prototype.clear): Clears the results table.
        (RecordTable.prototype._showTitles): Shows the header titles and appends the sub-titles to a queue.
        (RecordTable.prototype._showHeader): Shows the table header titles.
        (RecordTable.prototype._showEmpty): Shows an empty table cell.
        (RecordTable.prototype._showValue): Shows a number value in the results table.
        (RecordTable.prototype._showSamples): Shows a button for the sampled data graph.
        (RecordTable.prototype._showTest): Shows the results of a single test.
        (RecordTable.prototype._showSuite): Shows the results of a single suite.
        (RecordTable.prototype.showRecord): Shows a single iteration for a single test.
        (RecordTable.prototype.showIterations): Shows the results of all the suites of the iterations.

        * Animometer/resources/sampler.js: Added.
        (Statistics.sampleMean): Returns the sample mean.
        (Statistics.unbiasedSampleStandardDeviation): Returns the unbiased sample variance (i.e. with Bessel's correction)
        (Statistics.geometricMean): Returns the geometric mean.

        (Experiment): Represents a sampling experiment.
        (Experiment.prototype._init): Called when the object is created and when startSampling() is called.
        (Experiment.prototype.startSampling): Called after warmup period. Restarts collecting sampled data points.
        (Experiment.prototype.sample): Add a new data point.
        (Experiment.prototype.mean): Returns the sample mean for the current sampled data points.
        (Experiment.prototype.standardDeviation): Returns the sample standard deviation for the current sampled data points.
        (Experiment.prototype.percentage): Returns the percentage of the standard deviation divided to the mean.
        (Experiment.prototype.confidenceIntervalDelta): Calculates the confidence delta for the current sampled data given a confidence level.
        (Experiment.prototype.concern): Returns the average of the worst given percentage from the sampled data.
        (Experiment.prototype.score): Returns a score for the sampled data. It is the geometric mean of sampleMean and concern.

        (Sampler): Represents a compound experiment. It manages sampling multiple data points at the same time offset.
        (Sampler.prototype.startSampling): Called after warming up period. Restarts collecting sampled data points.
        (Sampler.prototype.sample): Add a new data vector at a given time offset.

2015-10-02  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add the test runner for a new a graphics benchmark
        https://bugs.webkit.org/show_bug.cgi?id=149683

        Reviewed by Ryosuke Niwa.

        The test runner collects the selected test suites and the running options
        from its home page. It loops through all the tests, runs them and collects
        their running results. At the end, it shows summary results and a final
        score. It can also show a chart for a test sampled data.

        * Animometer: Added.
        * Animometer/runner: Added.
        * Animometer/runner/resources: Added.

        * Animometer/runner/animometer.html: Added.
        * Animometer/runner/resources/animometer.css: Added.
        The benchmark runner page and css.

        * Animometer/runner/resources/animometer.js: Added.
        (window.benchmarkRunnerClient.willAddTestFrame): Called after the test <iframe> is created.
        (window.benchmarkRunnerClient.didRunTest): Called after running a test is finished.
        (window.benchmarkRunnerClient.willStartFirstIteration): Called at the beginning before running any test.
        (window.benchmarkRunnerClient.didRunSuites): Called after running all tests of a suite.
        (window.benchmarkRunnerClient.didFinishLastIteration): Called after running the last test.

        (showSection): Shows a section in the animometer.html page.
        (startTest): Called when the "Start Test" button is clicked.
        (showResults): Called after finishing all the tests.
        (showGraph): Called when "Click..." button in the "Samples" column of the results table is clicked

        * Animometer/runner/resources/benchmark-runner.js: Copied from PerformanceTests/Speedometer/resources/benchmark-runner.js.
        (BenchmarkRunnerState): Tracks the current running <suite, test>
        (BenchmarkRunnerState.prototype.currentSuite): Returns the current running suite.
        (BenchmarkRunnerState.prototype.currentTest): Returns the current running test.
        (BenchmarkRunnerState.prototype.isFirstTest): Returns true if we are running the first test in the current suite.
        (BenchmarkRunnerState.prototype.next): Advances to the next test.
        (BenchmarkRunnerState.prototype.prepareCurrentTest): Creates a new <iframe> and waits for it to load a test.

        (BenchmarkRunner): Manages running the tests and communicating with the benchmarkRunnerClient.
        (BenchmarkRunner.prototype.waitForElement): Waits for an element to be created.
        (BenchmarkRunner.prototype._appendFrame): Creates a new <iframe> element.
        (BenchmarkRunner.prototype._removeFrame): Removed the current <iframe> element.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Runs the current test and saves its results.
        (BenchmarkRunner.prototype.step): Either runs the current test if there is or start a new iteration.
        (BenchmarkRunner.prototype.runAllSteps): Loops to run all the tests and move to the next iteration.
        (this._runNextIteration): Starts a new iteration or show the results.
        (BenchmarkRunner.prototype.runMultipleIterations): Loops to run all the iterations and show the results
        (BenchmarkRunner.prototype._finalize): Finalizes the current iteration and starts a new one.

        (SimplePromise): Deleted.
        (SimplePromise.prototype.then): Deleted.
        (SimplePromise.prototype.resolve): Deleted.
        (BenchmarkTestStep): Deleted.
        (Fibonacci): Deleted.
        SimplePromise was moved t Animometer/resources/extensions.js because it is used by the runner and the tests.

        (BenchmarkRunner.prototype._waitAndWarmUp): Deleted.
        (BenchmarkRunner.prototype._runTest): Deleted.
        (BenchmarkState.prototype.currentSuite): Deleted.
        (BenchmarkState.prototype.currentTest): Deleted.
        (BenchmarkState.prototype.next): Deleted.
        (BenchmarkState.prototype.isFirstTest): Deleted.
        (BenchmarkState.prototype.prepareCurrentSuite): Deleted.
        BenchmarkState was renamed to BenchmarkRunnerState to not be confused with the tests BenchmarkState.

        * Animometer/runner/resources/d3.min.js: Copied from Websites/perf.webkit.org/public/v2/js/d3/d3.min.js.
        Needed for drawing charts for the sampled scores and frame rates.

        * Animometer/runner/resources/graph.js: Added.
        (graph): Draws a chart for a test sampled data. It shows two y-axes: one for the animated items and the second for FPS.

        * Skipped: Skip the Animometer benchmark for now.

2015-08-27  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] REGRESSION(r188793): It made 200 layout tests and Bindings/event-target-wrapper.html performance test fail
        https://bugs.webkit.org/show_bug.cgi?id=148470

        Unreviewed gardening, skip the hanging test to make the performance bot work.

        * Skipped:

2015-08-17  Chris Dumez  <cdumez@apple.com>

        Add performance tests for traversal of collections returned by getElementsByClassName() / getElementsByTagName()
        https://bugs.webkit.org/show_bug.cgi?id=148080

        Reviewed by Antti Koivisto.

        Add performance tests for traversal of *uncached* collections returned
        by getElementsByClassName() / getElementsByTagName(). These methods
        will soon be updated to return an HTMLCollection instead of a
        NodeList and we need to make sure we don't regress performance in the
        process.

        * DOM/get-elements-by-class-name-traversal-uncached.html: Added.
        * DOM/get-elements-by-tag-name-traversal-uncached.html: Added.

2015-08-14  Chris Dumez  <cdumez@apple.com>

        Add performance tests for NodeList and HTMLCollection traversal
        https://bugs.webkit.org/show_bug.cgi?id=148043

        Reviewed by Gavin Barraclough.

        Add performance tests for NodeList and HTMLCollection traversal.
        Ideally, those 2 tests should be as fast. However, due to inefficiencies
        in our HTMLCollection bindings code, the HTMLCollection tests is ~30%
        slower. This will be addressed in the near future.

        * Bindings/childNodes-traversal.html: Added.
        * Bindings/children-traversal.html: Added.

2015-08-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Add a second font-fallback performance test
        https://bugs.webkit.org/show_bug.cgi?id=147692

        Reviewed by Ryosuke Niwa.

        This test is smaller, but has more realistic content. Also, it uses the "lang" attribute.

        * Layout/font-fallback-2.html: Added.
        * Layout/resources/font-fallback-2.html: Added.

2015-07-13  Filip Pizlo  <fpizlo@apple.com>

        Update JetStream version number to 1.1.

        Rubber stamped by Ryosuke Niwa.

        * JetStream/create.rb:

2015-06-30  Filip Pizlo  <fpizlo@apple.com>

        Update the JetStream documentation to reflect the recent changes
        https://bugs.webkit.org/show_bug.cgi?id=146474

        Reviewed by Geoffrey Garen.

        * JetStream/create.rb: Bump the version.
        * JetStream/in-depth-TEMPLATE.html: Add cdjs documentation. Remove cordic documentation. Change documentation for splay and mandreel.

2015-06-26  Filip Pizlo  <fpizlo@apple.com>

        [JetStream] Raise the percentile of mandreel-latency and splay-latency
        https://bugs.webkit.org/show_bug.cgi?id=146378

        Reviewed by Mark Lam.

        The current percentile is 95%.  When I looked at the sample lists in our GC, it was
        clear that the worst 5% samples completely amortize our GC pauses.  Our GC pauses can
        be quite bad.  Clearly, splay-latency is meant to test whether we have an incremental
        GC that ensures that you don't have bad worst-case pauses.  But 95% is too small,
        because it doesn't really capture those pauses.  Raising the percentile to above 99%
        appears to do the trick.  99.5% or more seems like a good bet.  The trade-off there is
        just that if we set it too high, then we won't have enough statistics.  Doing this very
        clearly rewards GCs that are incremental, and punishes GCs that aren't (like ours).
        That's what we want, since in the future we want to use this test to guide any
        improvements to the worst-case performance of our GC.

        The way that the percentile is selected will also affect mandreel-latency.  That's a
        good thing, because 95% is probably too low for that test as well.  That test ends up
        with >10k samples.  The goal of using 95% in the first place was to get enough samples
        to have a stable average.  But if we have >10k samples, we can push that percentile up
        much higher and still get good statistics while achieving the effect we want - i.e.
        getting the worst case.

        I don't think that we need to do the same thing for cdjs.  That test only takes 200
        samples, so 95% means we report the average of the worst 10 samples.  That's probably
        good enough.

        * JetStream/Octane2/base.js: Raise the percentile as described above.
        (BenchmarkSuite.prototype.RunSingleBenchmark):
        * JetStream/Reference.js: Tweak the reference times to bring the latency tests closer to 100ish on my machine.
        * JetStream/create.rb: Bump the version.

2015-06-19  Filip Pizlo  <fpizlo@apple.com>

        Run CDjs as part of JSC stress testing
        https://bugs.webkit.org/show_bug.cgi?id=146174

        Reviewed by Geoffrey Garen.

        * JetStream/cdjs/cdjs-tests.yaml: Added. This tells JSC stress tests what tests to run. It uses new syntax ("tests" being a list) that I add in this change.
        * JetStream/cdjs/main.js: Mark this as a slow test.
        * JetStream/create.rb: Don't copy the JSC stress tests artifacts into the JetStream bundle.

2015-06-19  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix a small indentation goof.

        * JetStream/cdjs/motion.js:
        (Motion.prototype.findIntersection):

2015-06-19  Filip Pizlo  <fpizlo@apple.com>

        JetStream should include a JavaScript version of the CDx real-time benchmark
        https://bugs.webkit.org/show_bug.cgi?id=146156

        Reviewed by Geoffrey Garen.

        This adds a JavaScript port of the CDx real-time benchmark to JetStream, and retires
        the cordic test because it was previously the smallest and probably least interesting.

        The new test, "cdjs", is mostly a faithful rewrite of the Java code into JavaScript.
        I got the Java code from https://www.cs.purdue.edu/sss/projects/cdx/.

        There are some differences:

        - It uses RedBlackTree's for all sets and maps rather than hashtables. This is clearly
          more in the spirit of real-time than the CDx benchmark. FWIW, CDx used to use trees
          and I don't know why that changed in the latest version.

        - CDjs doesn't attempt to avoid memory allocations, unlike the real-time Java version.
          I wrote the code that I wanted to write for aesthetics, rather than the code that I
          would have written if I tried to write the fastest code possible. Again, I believe
          that this is in the spirit of CDj - it's meant to test what would happen if you wrote
          real-timey stuff in a high level language and actually took advantage of that
          language to be more productive.

        The test score reflects the average latency of the worst 10 samples out of 200 samples.
        The simulation uses 1000 aircraft, flying along paths that result in some detected
        collisions every once in a while. The benchmark validates its results by checking the
        total number of collisions detected.

        Apart from the integration into the JetStream harness, the CDjs directory contains a
        fully self-contained benchmark that could be run either in the jsc shell or in browser.

        This new code uses the same 3-clause BSD license as the Purdue code, and gives
        attribution to Purdue in almost all files. I believe that is appropriate since I wrote
        most of the JS files by looking at the Purdue Java code and trascribing to JavaScript.
        In some cases, I even copy-pasted the Java code, like the complicated math for
        four-dimensional intersections and voxel hashing.

        * JetStream/CDjsSetup.js: Added.
        * JetStream/Octane2Setup.js:
        * JetStream/Reference.js:
        * JetStream/cdjs: Added.
        * JetStream/cdjs/benchmark.js: Added.
        (benchmark):
        * JetStream/cdjs/call_sign.js: Added.
        (CallSign):
        (CallSign.prototype.compareTo):
        (CallSign.prototype.toString):
        * JetStream/cdjs/collision.js: Added.
        (Collision):
        (Collision.prototype.toString):
        * JetStream/cdjs/collision_detector.js: Added.
        (CollisionDetector):
        (CollisionDetector.prototype.handleNewFrame.get for):
        (CollisionDetector.prototype.handleNewFrame):
        * JetStream/cdjs/constants.js: Added.
        * JetStream/cdjs/main.html: Added.
        * JetStream/cdjs/main.js: Added.
        * JetStream/cdjs/motion.js: Added.
        (Motion):
        (Motion.prototype.toString):
        (Motion.prototype.delta):
        (Motion.prototype.findIntersection):
        * JetStream/cdjs/motion_test.js: Added.
        (checkDoesIntersect):
        (checkDoesNotIntersect):
        (makeMotion):
        * JetStream/cdjs/red_black_tree.js: Added.
        (RedBlackTree):
        (RedBlackTree.):
        * JetStream/cdjs/red_black_tree_test.js: Added.
        (test):
        (test.):
        * JetStream/cdjs/reduce_collision_set.js: Added.
        (drawMotionOnVoxelMap):
        (drawMotionOnVoxelMap.):
        (.get reduceCollisionSet):
        * JetStream/cdjs/reduce_collision_set_test.js: Added.
        (makeMotion):
        (keys):
        (test):
        * JetStream/cdjs/simulator.js: Added.
        (Simulator):
        (Simulator.prototype.simulate):
        * JetStream/cdjs/util.js: Added.
        (compareNumbers):
        (averageAbovePercentile):
        (currentTime):
        (else.currentTime):
        * JetStream/cdjs/vector_2d.js: Added.
        (Vector2D):
        (Vector2D.prototype.plus):
        (Vector2D.prototype.minus):
        (Vector2D.prototype.toString):
        (Vector2D.prototype.compareTo):
        * JetStream/cdjs/vector_3d.js: Added.
        (Vector3D):
        (Vector3D.prototype.plus):
        (Vector3D.prototype.minus):
        (Vector3D.prototype.dot):
        (Vector3D.prototype.squaredMagnitude):
        (Vector3D.prototype.magnitude):
        (Vector3D.prototype.times):
        (Vector3D.prototype.as2D):
        (Vector3D.prototype.toString):
        * JetStream/create.rb:
        * JetStream/index-TEMPLATE.html:
        * JetStream/sunspider/cordic.js: Removed.

2015-06-17  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] We should add performance tests for stretching logic
        https://bugs.webkit.org/show_bug.cgi?id=146063

        Reviewed by Sergio Villar Senin.

        Added a new performance test for Grid Layout to ensure there are no
        regressions in the stretching alignment logic.

        * Layout/fixed-grid-lots-of-stretched-data.html: Added.

2015-06-17  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Performance tests are using the old syntax
        https://bugs.webkit.org/show_bug.cgi?id=146061

        Reviewed by Sergio Villar Senin.

        Adapted tests to the new grid tracks definition syntax.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:

2015-06-08  Filip Pizlo  <fpizlo@apple.com>

        JetStream should have a more rational story for jitter-oriented latency tests
        https://bugs.webkit.org/show_bug.cgi?id=145762

        Reviewed by Geoffrey Garen.

        JetStream has some latency tests that are meant to measure jitter.  Prior to this change, they
        did this by computing the RMS.  But the RMS is a pretty bad metric.  The thing that it rewards
        isn't really the thing that you'd want your browser to do.  These RMS-based tests involve taking
        the geomean of the RMS of some samples and the sample average.  The lower the geomean, the better
        (in the JetStream harness we then invert the scores so that higher is better, but let's ignore
        that for this discussion and assume that lower is better).  Here's an example of how this can go
        bad.  A browser that always computes a task in some horribly long time (say, 1000ms) but never
        varies that time will perform better than a browser that usually computes the task super quickly
        (say, 10ms) and sometimes just a little bit less quickly (say, 15ms).  The former browser will
        have an RMS of 0 and an average of 1000.  The latter will have a RMS somewhere around 3.5 and an
        average of 12.5 (assuming equal probability of 10ms and 15ms).  The geomean of (0, 1000) is 0.
        The geomean of (3.5, 12.5) is 6.6.  Lower is better, so the former browser scores higher - even
        though it's obviously never better to have a browser always complete a task in 1000ms when a
        different browser can do it in 15ms in the worst case.

        JetStream should not have this pathology.  The right way of avoiding it is to replace RMS with
        some other metric of how bad things get.  A good metric is the average of the worst percentile.
        The worst 1% or the worst 5% would be good things to average.  This will catch cases where the VM
        jittered due to JIT or GC, but it never have the pathology that we end up giving the better score
        to a VM whose best case is worst than another VM's worst case.

        For now, this change uses the highest samples above the 95% percentile. I'm not yet sure if that
        is the best thing - it might include too many scores that are around the best-case performance -
        but it's certainly better than RMS and it might be good enough to keep. But because of that
        uncertainty, I'm setting the version to be "1.1-alpha1" to indicate that we aren't ready to
        release this yet.

        * JetStream/Octane2/base.js:
        (.this.Setup.setup.setup):
        (.this.TearDown.tearDown.tearDown):
        (BenchmarkSuite.GeometricMeanTime):
        (BenchmarkSuite.AverageAbovePercentile):
        (BenchmarkSuite.GeometricMeanLatency):
        (BenchmarkSuite.prototype.NotifyStep):
        (BenchmarkSuite.prototype.RunSingleBenchmark):
        * JetStream/Octane2/mandreel.js:
        (setupMandreel):
        (updateMandreelStats):
        (startMandreelTimer):
        (latencyMandreel):
        (tearDownMandreel):
        (RMSMandreel): Deleted.
        * JetStream/Octane2/splay.js:
        (GenerateKey):
        (SplayUpdateStats):
        (InsertNewNode):
        (SplayTearDown):
        (SplayRMS): Deleted.
        * JetStream/create.rb:

2015-06-03  Zalan Bujtas  <zalan@apple.com>

        Skip Dromaeo/jslib-modify-prototype.html for now.

        Unreviewed gardening.

        * Skipped:

2015-05-04  Filip Pizlo  <fpizlo@apple.com>

        Large array shouldn't be slow
        https://bugs.webkit.org/show_bug.cgi?id=144617

        Reviewed by Geoffrey Garen.

        Add the hash-map benchmark to LongSpider. LongSpider was already not a perfect match of
        SunSpider. It's not an official benchmark. It contains benchmarks that are relatively
        long-running. So, hash-map sort of belongs here.

        * LongSpider/hash-map.js: Added.
        (HashMap):
        (HashMap.):
        (.get var):

2015-05-01  Dewei Zhu  <dewei_zhu@apple.com>

        Fix typo bug in Speedometer/resources/main.js
        https://bugs.webkit.org/show_bug.cgi?id=144504

        Reviewed by Ryosuke Niwa.

        * Speedometer/resources/main.js: Fix typo.
        (window.benchmarkClient.totalTimeInDisplayUnit):

2015-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Add JetStream to PerformanceTests
        https://bugs.webkit.org/show_bug.cgi?id=144024

        Rubber-stamped by Filip Pizlo.

        * JetStream: Added.
        * JetStream/JetStream-Logo.png: Added.
        * JetStream/JetStream-Logo@2x.png: Added.
        * JetStream/JetStream.css: Added.
        * JetStream/JetStreamDriver.js: Added.
        * JetStream/LICENSE.txt: Added.
        * JetStream/LLVM-test-suite-LICENSE.txt: Added.
        * JetStream/Octane: Added.
        * JetStream/Octane/base.js: Added.
        * JetStream/Octane/code-load.js: Added.
        * JetStream/Octane2: Added.
        * JetStream/Octane2/base.js: Added.
        * JetStream/Octane2/box2d.js: Added.
        * JetStream/Octane2/code-load.js: Added.
        * JetStream/Octane2/crypto.js: Added.
        * JetStream/Octane2/deltablue.js: Added.
        * JetStream/Octane2/earley-boyer.js: Added.
        * JetStream/Octane2/gbemu-part1.js: Added.
        * JetStream/Octane2/gbemu-part2.js: Added.
        * JetStream/Octane2/mandreel.js: Added.
        * JetStream/Octane2/navier-stokes.js: Added.
        * JetStream/Octane2/pdfjs.js: Added.
        * JetStream/Octane2/raytrace.js: Added.
        * JetStream/Octane2/regexp.js: Added.
        * JetStream/Octane2/richards.js: Added.
        * JetStream/Octane2/run.js: Added.
        * JetStream/Octane2/splay.js: Added.
        * JetStream/Octane2/typescript-compiler.js: Added.
        * JetStream/Octane2/typescript-input.js: Added.
        * JetStream/Octane2/typescript.js: Added.
        * JetStream/Octane2/zlib-data.js: Added.
        * JetStream/Octane2/zlib.js: Added.
        * JetStream/Octane2Setup.js: Added.
        * JetStream/OctaneSetup.js: Added.
        * JetStream/README: Added.
        * JetStream/Reference.js: Added.
        * JetStream/SimpleSetup.js: Added.
        * JetStream/SunSpiderSetup.js: Added.
        * JetStream/Swoosh.png: Added.
        * JetStream/Swoosh@2x.png: Added.
        * JetStream/TestingSetup.js: Added.
        * JetStream/create.rb: Added.
        * JetStream/docs: Added.
        * JetStream/docs/JetStreamBlogPost.html: Added.
        * JetStream/in-depth-TEMPLATE.html: Added.
        * JetStream/index-TEMPLATE.html: Added.
        * JetStream/simple: Added.
        * JetStream/simple/bigfib.cpp: Added.
        * JetStream/simple/bigfib.cpp.js: Added.
        * JetStream/simple/container.cpp: Added.
        * JetStream/simple/container.cpp.js: Added.
        * JetStream/simple/dry.c: Added.
        * JetStream/simple/dry.c.js: Added.
        * JetStream/simple/float-mm.c: Added.
        * JetStream/simple/float-mm.c.js: Added.
        * JetStream/simple/gcc-loops.cpp: Added.
        * JetStream/simple/gcc-loops.cpp.js: Added.
        * JetStream/simple/hash-map.js: Added.
        * JetStream/simple/n-body.c: Added.
        * JetStream/simple/n-body.c.js: Added.
        * JetStream/simple/quicksort.c: Added.
        * JetStream/simple/quicksort.c.js: Added.
        * JetStream/simple/towers.c: Added.
        * JetStream/simple/towers.c.js: Added.
        * JetStream/sunspider: Added.
        * JetStream/sunspider/3d-cube.js: Added.
        * JetStream/sunspider/3d-raytrace.js: Added.
        * JetStream/sunspider/base64.js: Added.
        * JetStream/sunspider/cordic.js: Added.
        * JetStream/sunspider/crypto-aes.js: Added.
        * JetStream/sunspider/crypto-md5.js: Added.
        * JetStream/sunspider/crypto-sha1.js: Added.
        * JetStream/sunspider/date-format-tofte.js: Added.
        * JetStream/sunspider/date-format-xparb.js: Added.
        * JetStream/sunspider/n-body.js: Added.
        * JetStream/sunspider/regex-dna.js: Added.
        * JetStream/sunspider/tagcloud.js: Added.

2015-04-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        textPath layout performance improvement.
        https://bugs.webkit.org/show_bug.cgi?id=141570.

        Reviewed by Darin Adler.

        Cut down the time spent in traversing the path for text by 50%. Instead
        of traversing the path twice at a certain length: one time for the position
        and the second time for the angle, we can merge these two passes into one.

        * SVG/TextOnPathSimple.html: Added.
        * SVG/resources/TextOnPathSimple.svg: Added.

2015-04-13  Zalan Bujtas  <zalan@apple.com>

        Clear up the test content when test is done.

        Unreviewed fix.

        * Layout/simple-line-layout-innertext.html:

2015-04-09  Zalan Bujtas  <zalan@apple.com>

        Simple line layout(regression): Calling innerText on RenderFlow with multiple children is slow.
        https://bugs.webkit.org/show_bug.cgi?id=143554

        Reviewed by Antti Koivisto.

        Initialize render flow's segments only when the render flow changes in TextIterator.
        The included performance test shows 6x speedup. (from ~10 runs/sec to ~60 runs/sec)

        * Layout/simple-line-layout-innertext.html: Added.

2015-03-09  Chris Dumez  <cdumez@apple.com>

        [CG] Have Canvas use the IOSurfacePool
        https://bugs.webkit.org/show_bug.cgi?id=142417
        <rdar://problem/20044440>

        Reviewed by Darin Adler.

        Lower the number of different canvas sizes from 1000 to 100 so that
        the test does not require such a huge cache size. With 100, we now
        get over 90% cache hit rate with the default IOSurfacePool size.

        * Canvas/reuse.html:

2015-01-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Poor performance on IE's Chalkboard benchmark.
        https://bugs.webkit.org/show_bug.cgi?id=140753.

        Reviewed by Zalan Bujtas.

        * SVG/UnderTheSeeBenchmark.html: Added
        * SVG/WorldcupBenchmark.html: Added.
        * SVG/resources/RenderAnimator.css: Added.
        * SVG/resources/RenderAnimator.js: Added.
        These are benchmarks for the SVG rendering. Mainly we want to measure how fast
        the SVG rendering will be when only a small part of it is drawn.

2015-01-21  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: support aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=140732

        Reviewed by Andreas Kling.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/memalign.cpp:
        (test):
        (benchmark_memalign): Added a test for specific interesting memalign values.

        * MallocBench/MallocBench/stress_aligned.cpp: Added.
        (benchmark_stress_aligned):
        * MallocBench/MallocBench/stress_aligned.h: Added. Added a stress test
        for arbitrary memalign values.

2015-01-16  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: added the tiniest bit of testing for aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=140573

        Reviewed by Andreas Kling.

        Just good enoug to catch two bugs in a preliminary implementation.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/mbmalloc.cpp:
        * MallocBench/MallocBench/mbmalloc.h:
        * MallocBench/MallocBench/memalign.cpp: Added.
        (benchmark_memalign):
        * MallocBench/MallocBench/memalign.h: Added.

2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Add performance test related to font fallback
        https://bugs.webkit.org/show_bug.cgi?id=139332

        Reviewed by Simon Fraser.

        * Layout/font-fallback.html: Added.
        * Layout/resources/font-fallback.html: Added.

2014-12-08  Dean Jackson  <dino@apple.com>

        [Apple] Use Accelerate framework to speed-up FEGaussianBlur
        https://bugs.webkit.org/show_bug.cgi?id=139310

        Reviewed by Simon Fraser.

        Add an interactive performance test that measures the speed of a set
        of blur operations on a generated images.

        * Interactive/blur-filter-timing.html: Added.

2014-11-13  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add performance test case to measure line layout speed of monolithic text content.
        https://bugs.webkit.org/show_bug.cgi?id=138699

        Reviewed by Antti Koivisto.

        * Layout/line-layout-long-long-text.html: Added.

2014-10-22  Zalan Bujtas  <zalan@apple.com>

        Speed up line parsing for simple line layout (part I)
        https://bugs.webkit.org/show_bug.cgi?id=137275

        Reviewed by Antti Koivisto.

        Extend simple line layout performance test with a few more cases.
        Now we've got:
        <div center
        <div right
        <div justify
        <div white-space: pre (new)
        <div overflow-wrap: break-word (new)
        <pre
        <pre white-space: pre-wrap
        <pre white-space: pre-line (new)
        <pre white-space: nowrap (new)
        <pre white-space: pre-wrap overflow-wrap: break-word
        <div + embedded <span etc.
        <div + br

        * Layout/line-layout-simple.html:

2014-10-15  Andrei Bucur  <abucur@adobe.com>

        [Multicol] Start adding performance tests for the multi-column implementation
        https://bugs.webkit.org/show_bug.cgi?id=137687

        Reviewed by Mihnea Ovidenie.

        This patch creates a Multicol folder inside the Layout performance tests suite. It adds only two tests
        as described below.

        The tests are skipped until the implementation stabilizes.

        * Layout/Multicol/MulticolManyColumns.html: Added.
        This test verifies the performance of the multi-column implementation with two nested multi-column
        containers, the first having 20 columns and the second 10 columns.

        * Layout/Multicol/MulticolNested.html: Added.
        This test verifies the performance of nesting multi-column containers in the presence
        of floats.

        * Layout/Multicol/resources/multicol-content-many-columns.html: Added.
        * Layout/Multicol/resources/multicol-content-nested.html: Added.
        * Skipped: Skip the Multicol folder for now.

2014-09-29  Filip Pizlo  <fpizlo@apple.com>

        It should be fun and easy to run every possible JavaScript benchmark from the command line
        https://bugs.webkit.org/show_bug.cgi?id=137245

        Reviewed by Oliver Hunt.

        This adds the scaffolding for running Octane version 2 inside run-jsc-benchmarks.
        In the future we should just land Octane2 in this directory, and run-jsc-benchmarks
        should be changed to point directly at this directory instead of requiring the
        Octane path to be configured as part of the configuration file.

        * Octane: Added.
        * Octane/wrappers: Added.
        * Octane/wrappers/jsc-box2d.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-boyer.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-closure.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-decrypt.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-deltablue.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-earley.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-encrypt.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-gbemu.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-jquery.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-mandreel.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-navier-stokes.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-pdfjs.js: Added.
        (jscSetUp.PdfJS_window.console.log):
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-raytrace.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-regexp.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-richards.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-splay.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-typescript.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):
        * Octane/wrappers/jsc-zlib.js: Added.
        (jscSetUp):
        (jscTearDown):
        (jscRun):

2014-09-28  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix some minor typos: psuedo -> pseudo
        https://bugs.webkit.org/show_bug.cgi?id=137192

        Reviewed by Alexey Proskuryakov.

        * Speedometer/resources/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js:

2014-09-11  Geoffrey Garen  <ggaren@apple.com>

        Some MallocBench refinements
        https://bugs.webkit.org/show_bug.cgi?id=136750

        Reviewed by Sam Weinig.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::run): Allow for null entries in the object list so that
        we can test in modes that exclude large or small allocations.

        * MallocBench/MallocBench/churn.cpp:
        (benchmark_churn):
        * MallocBench/MallocBench/flickr.cpp:
        (benchmark_flickr):
        * MallocBench/MallocBench/fragment.cpp:
        (benchmark_fragment_iterate):
        * MallocBench/MallocBench/list.cpp:
        (benchmark_list_allocate):
        * MallocBench/MallocBench/reddit.cpp:
        (benchmark_reddit): Updated test runtimes to weight them more equally,
        for the sake of arithmetic mean.

        * MallocBench/MallocBench/stress.cpp:
        (Object::Object):
        (allocate):
        (deallocate):
        (benchmark_stress): Verify the contents of memory as we go. Also,
        force scavenging each time through the loop to test the scavenging path.

        * MallocBench/MallocBench/theverge.cpp:
        (benchmark_theverge):
        * MallocBench/MallocBench/tree.cpp:
        (benchmark_tree_churn): Re-weighted, as above.

2014-09-08  Myles C. Maxfield  <mmaxfield@apple.com>

        PerformanceTests/SVG/SVG-Text.html has unparsable output
        https://bugs.webkit.org/show_bug.cgi?id=136648

        Reviewed by Gavin Barraclough.

        I need to clean up the arbitrary text on the page before telling
        the test runner infrastructure that the test is complete.

        * SVG/SVG-Text.html:

2014-09-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Laying out a TextRun using an SVG font is O(n^2)
        https://bugs.webkit.org/show_bug.cgi?id=136584

        Reviewed by Andreas Kling.

        Time how long it takes to lay out and render some text using an SVG font.

        * SVG/SVG-Text.html: Added.
        * SVG/resources/graffiti.svg: Added.

2014-09-02  Geoffrey Garen  <ggaren@apple.com>

        MallocBench should have a stress test for correctness
        https://bugs.webkit.org/show_bug.cgi?id=136468

        Reviewed by Andreas Kling.

        Added a stress test that allocates randomized sizes of randomized
        lifetimes in randomized order.

        This version of the test reproduces the EWS crash seen in bmalloc
        (<https://bugs.webkit.org/show_bug.cgi?id=132629>).

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp: Sort!
        * MallocBench/MallocBench/stress.cpp: Added.
        (Object::Object):
        (SizeStream::SizeStream):
        (SizeStream::next):
        (benchmark_stress): Usually, we random(0). Surprisingly, though, only
        random(1) reproduces the bug I was looking for.
        * MallocBench/MallocBench/stress.h: Added.

2014-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DoYouEvenBench 0.17 to Speedometer 1.0 and add a new look.
        https://bugs.webkit.org/show_bug.cgi?id=133455

        Reviewed by Timothy Hatcher.

        * Speedometer/: Renamed from DoYouEvenBench.
        * Skipped: Updated the path for InteractiveRunner.html

2014-06-02  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DoYouEvenBench 0.17 to Speedometer 1.0 and add a new look.
        https://bugs.webkit.org/show_bug.cgi?id=133455

        Reviewed by Timothy Hatcher.

        Renamed the benchmark to Speedometer and added the new look designed by Timothy Hatcher.

        Also changed the unit of measurements from milliseconds to runs-per-minute averaged over the number
        of the benchmark suites (7 for 1.0). You can divide 420000 by the old benchmark score (in milliseconds)
        to get the new value for the set of tests that are enabled by default in 1.0. You can continue to see
        results in milliseconds on Full.html#ms.

        * DoYouEvenBench/Full.html: Added a bunch of sections and the description of the benchmark.

        * DoYouEvenBench/resources/benchmark-report.js: Remove the newly added content when ran inside a DRT or
        WTR so that run-perf-tests wouldn't error.
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame): Call a newly added willAddTestFrame callback when it exists.

        * DoYouEvenBench/resources/gauge.png: Added.
        * DoYouEvenBench/resources/gauge@2x.png: Added.
        * DoYouEvenBench/resources/logo.png: Added.
        * DoYouEvenBench/resources/logo@2x.png: Added.
        * DoYouEvenBench/resources/main.css: Replaced the style.

        * DoYouEvenBench/resources/main.js:
        (window.benchmarkClient.willAddTestFrame): Place the iframe right where #testContainer is shown.
        (window.benchmarkClient.willRunTest): Show the name of the suite (e.g. EmberJS-TodoMVC) to run next.
        (window.benchmarkClient.didRunSuites):
        (window.benchmarkClient.willStartFirstIteration): Initialize _timeValues and _finishedTestCount now that
        we have an UI to run the benchmark multiple times without reloading the page.
        (window.benchmarkClient.didFinishLastIteration): Split into smaller pieces.
        (window.benchmarkClient._computeResults): Computes the mean and the statistics for the given time values,
        and also format them in a human readable form.
        (window.benchmarkClient._computeResults.totalTimeInDisplayUnit): Converts ms to runs/min.
        (window.benchmarkClient._computeResults.sigFigFromPercentDelta): Given a percentage error (e.g. 1%),
        returns the number of significant digits required for the mean.
        (window.benchmarkClient._computeResults.toSigFigPrecision): Calls toPrecision with the specified precision
        constrained to be at least the number of non-decimal digits and at most 6.
        (window.benchmarkClient._addDetailedResultsRow): Renamed from _addResult. It now takes the table to which
        to add a row and the iteration number.
        (window.benchmarkClient._updateGaugeNeedle): Added. Controls the angle of the speed indicator.
        (window.benchmarkClient._populateDetailedResults): Added.
        (window.benchmarkClient.prepareUI): Added. It adds an event listener to show a specified section when
        the push state of the document changes, and shows a warning sign when the view port size is too small.
        We do this inside a callback to avoid running it inside DRT / WTR.
        (startBenchmark):
        (showSection): Added.
        (startTest): Added.
        (showResultsSummary): Added.
        (showResultDetails): Added.
        (showAbout): Added.

2014-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Move test states into benchmarkClient and remove the closure
        https://bugs.webkit.org/show_bug.cgi?id=133438

        Reviewed by Benjamin Poulain.

        Moved all local variables in the closure wrapping benchmarkClient onto the object itself
        and removed the closure to improve the readability of the code.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/main.js:
        (window.benchmarkClient.willRunTest):
        (window.benchmarkClient.didRunTest):
        (window.benchmarkClient.didRunSuites):
        (window.benchmarkClient.willStartFirstIteration):
        (window.benchmarkClient.didFinishLastIteration):
        (window.benchmarkClient._addResult): Moved.
        (.): Deleted.

2014-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Split stylesheets and scripts in Full.html into separate files
        https://bugs.webkit.org/show_bug.cgi?id=133437

        Reviewed by Benjamin Poulain.

        Extracted main.js and main.css.

        Also fixed a bug in startBenchmark that disabled suites were counted towards the total number of tests.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/main.css: Added.
        * DoYouEvenBench/resources/main.js: Added.
        (.addResult):
        (window.benchmarkClient):
        (startBenchmark): Renamed from startTest.

2014-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: CSS parser warning at line 106 of base.css
        https://bugs.webkit.org/show_bug.cgi?id=133433

        Reviewed by Maciej Stachowiak.

        Removed the old filter CSS property for Internet Explorer. The latest Internet Explorer supports -ms-linear-gradient
        on background CSS property anyways.

        It's interesting that some of the tests only have -webkit- prefixes. Perhaps we should update those subtests.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.css:
        (#header:before):
        * DoYouEvenBench/resources/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.css:
        (#header:before):

2014-05-31  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Ember.js assertion hit at line 20593
        https://bugs.webkit.org/show_bug.cgi?id=133431

        Reviewed by Darin Adler.

        The assertion was hit because ToDoMVC includes jQuery 2.1 and Ember.js 1.3.1 only recognizes jQuery 2.0.
        Port the assertion from Ember.js 1.5.1 to suppress the assertion.

        We should update the entire Ember.js at some point but this would do the job for now.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js:

2014-05-31  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench: Prevent frame flattening on iOS
        https://bugs.webkit.org/show_bug.cgi?id=133428

        Reviewed by Andreas Kling.

        Prevent frame flattening on iOS by setting scrolling=no.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame):

2014-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench spits out 404 errors for learn.json
        https://bugs.webkit.org/show_bug.cgi?id=133416

        Reviewed by Oliver Hunt.

        Add an empty learn.json file so that it won't cause a 404 error when hosted on a http server.

        Bumped the version number to 0.12.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/todomvc/learn.json:

2014-05-23  Geoffrey Garen  <ggaren@apple.com>

        Performance testing, diamond-square terrain generation + canvas
        https://bugs.webkit.org/show_bug.cgi?id=133054

        Reviewed by Ryosuke Niwa.

        This test was written by Hunter Loftis. It originally appeared on his
        blog @ <http://www.playfuljs.com/realistic-terrain-in-130-lines/>.

        I did a bit of editing for format and benchmark suitability.

        * Canvas/terrain.html: Added.

2014-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench should run 20 iterations in browser
        https://bugs.webkit.org/show_bug.cgi?id=132795

        Reviewed by Gavin Barraclough.

        Right now, run-perf-tests runs BYEBench 4 times with different instances of DRT/WTR to get
        a more stable time and account for differences in the runtime environment, particularly,
        ASLR (Address Space Layout Randomization).

        While we can't account for the latter effect when the benchmark is ran inside a browser,
        we can at least run 20 iterations to get a more stable (but perhaps biased by ALSR) number.

        While the sample size of 20 is statistically unsound to compute the arithmetic mean from,
        it's MUCH better than the current sample size of 5.

        * DoYouEvenBench/Full.html:
        (benchmarkClient.iterationCount): Set the default iteration count to 20.
        (startTest): Use benchmarkClient.iterationCount as the iteration count.
        * DoYouEvenBench/resources/benchmark-report.js:
        (benchmarkClient.iterationCount): Continue to use the old iteration count of 5 when ran
        inside run-perf-tests.

2014-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench should show 95th percentile right next to the mean with ±
        https://bugs.webkit.org/show_bug.cgi?id=132729

        Reviewed by Darin Adler.

        Before this patch, Full.html showed the 95th percentile delta for the arthemtic mean in a separate row
        but this was confusing for some people. Show it right next to mean in the same row separated by ±.

        * DoYouEvenBench/Full.html:

2014-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        DYEBench should use TodoMVC to test FlightJS for consistency
        https://bugs.webkit.org/show_bug.cgi?id=132727

        Reviewed by Andreas Kling.

        Add a test suite for the FlightJS version of TodoMVC, and disable FlightJS-MailClient by default.

        I initially intended to include a wider variety of demo apps in DYEBench
        but that's not happening any time soon so let us use TodoMVC for all frameworks for now.

        We can add more demo apps in v2.

        * DoYouEvenBench/Full.html: Increment the version to 0.10.
        * DoYouEvenBench/InteractiveRunner.html: Don't check disabled suites by default.
        * DoYouEvenBench/resources/tests.js:
        * DoYouEvenBench/resources/todomvc/dependency-examples: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/.gitignore: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/.jshintrc: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/app.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/data: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/data/stats.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/data/todos.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/main.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/store.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/main_selector.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/new_item.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/stats.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/todo_list.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/toggle_all.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/ui/with_filters.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/js/utils.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/templates: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/templates/stats.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/app/templates/todo.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower.json: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/depot: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/depot/depot.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/es5-shim: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/es5-shim/es5-sham.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/es5-shim/es5-shim.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/advice.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/base.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/component.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/compose.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/debug.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/index.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/logger.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/registry.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/flight/lib/utils.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/jquery: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs-text: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs-text/text.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/requirejs/require.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/index.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/karma.conf.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/package.json: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/readme.md: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/.jshintrc: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture/footer.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture/new_todo.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/fixture/toggle_all.html: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/mock: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/mock/datastore.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/data: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/data/stats_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/data/todos_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui/new_item_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui/stats_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/spec/ui/toggle_all_spec.js: Added.
        * DoYouEvenBench/resources/todomvc/dependency-examples/flight/test/test-main.js: Added.

2014-05-07  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Remove runtime feature
        https://bugs.webkit.org/show_bug.cgi?id=132382

        Reviewed by Benjamin Poulain.

        Remove set of WebKitCSSGridLayoutEnabled preference.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:

2014-05-06  Radu Stavila  <stavila@adobe.com>

        [CSSRegions] Enabled regions performance tests by default
        https://bugs.webkit.org/show_bug.cgi?id=128244

        Reviewed by Andreas Kling.

        Enabled regions performance tests.

        * Skipped:

2014-04-25  Andreas Kling  <akling@apple.com>

        Bump jQuery to same version that dromaeo.com uses.

        Rubber-stamped by Ryosuke Niwa.

        * Dromaeo/resources/dromaeo/web/lib/jquery-1.10.2.min.js: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-jquery.html:

2014-04-18  Geoffrey Garen  <ggaren@apple.com>

        Added some more Membuster recordings to MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=131862

        Reviewed by Sam Weinig.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::Benchmark):
        (Benchmark::run):
        * MallocBench/MallocBench/Benchmark.h:
        * MallocBench/MallocBench/CommandLine.cpp:
        * MallocBench/MallocBench/CommandLine.h:
        (CommandLine::runs): Added a --runs option, so we can specify zero runs
        for memory warning benchmarks. Those benchmarks want zero runs so that
        they can perform a single warmup, which does not free all allocated
        objects, and then see how far back to 0MB they can get. Running multiple
        times would accumulate leaks, which is not representative of the
        simulated scenario.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::Interpreter):
        (Interpreter::run):
        * MallocBench/MallocBench/Interpreter.h: Support not deallocating all
        objects allocated during the recording, so we can do low memory warning
        memory use measurements, as above.

        * MallocBench/MallocBench/flickr.cpp:
        (benchmark_flickr_memory_warning):
        * MallocBench/MallocBench/main.cpp:
        (main):
        * MallocBench/MallocBench/reddit.cpp:
        (benchmark_reddit_memory_warning):
        * MallocBench/MallocBench/theverge.cpp:
        (benchmark_theverge_memory_warning): Adopt the API above.

        * MallocBench/run-malloc-benchmarks: I took a first pass at listing all
        available benchmarks here. Then I commented out the benchmarks that
        probably aren't reasonable to run by default.

2014-04-18  Geoffrey Garen  <ggaren@apple.com>

        MallocBench: removed the --measure-heap option
        https://bugs.webkit.org/show_bug.cgi?id=131854

        Reviewed by Sam Weinig.

        As of <https://bugs.webkit.org/show_bug.cgi?id=131661>, measuring the
        heap is fast, so there's no reason to disable it.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::Benchmark):
        (Benchmark::run):
        (Benchmark::printReport):
        * MallocBench/MallocBench/Benchmark.h:
        * MallocBench/MallocBench/CommandLine.cpp:
        (CommandLine::printUsage):
        * MallocBench/MallocBench/CommandLine.h:
        (CommandLine::heapSize):
        (CommandLine::measureHeap): Deleted.
        * MallocBench/MallocBench/main.cpp:
        (main):

2014-04-16  Alexandru Chiculita  <achicu@adobe.com>

        Improve performance of the RenderLayerCompositor::OverlapMap
        https://bugs.webkit.org/show_bug.cgi?id=115063

        Reviewed by Simon Fraser.

        Testing the performance of computing the overlap of 5000 layers.

        * Layout/layers_overlap_2d.html: Added. Using non-composited layers, to check
        that the performance on the non-composited path is not changing with this patch.
        * Layout/layers_overlap_3d.html: Added. Records the time to do the layout of 5000
        non-overlapping 3D layers.

2014-04-15  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Linking stylesheet instead of inline style definition has ruined ShapesRegions test
        https://bugs.webkit.org/show_bug.cgi?id=131572

        Reviewed by Rob Buis.

        In r167022 I moved the common CSS selectors into RegionsShapes.css, then I linked it into the perf test
        files, but the measurement results dropped down from about 400ms to 10ms. I realized it's caused by the
        linked css rule, so I've put the selectors back into every test case, which fixes the test measurements.

        * Layout/Shapes/resources/RegionsShapes.css: Removed.
        * Layout/Shapes/resources/RegionsShapesContent.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth400.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth600.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth800.html:
        * Layout/Shapes/resources/RegionsShapesContentNoShapes.html:

2014-04-14  Geoffrey Garen  <ggaren@apple.com>

        MallocBench should scavenge explicitly instead of waiting
        https://bugs.webkit.org/show_bug.cgi?id=131661

        Reviewed by Andreas Kling.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Don't build mbmalloc
        by default because it will overwrite any other mbmalloc you're working
        with in the WebKitBuild directory.

        * MallocBench/MallocBench/Benchmark.cpp:
        (Benchmark::run): Scavenge explicitly instead of waiting. This is faster,
        and it's the only way to get FastMalloc to scavenge. (That's a bug in
        FastMalloc, but we don't want it to interfere with broader testing.)

        * MallocBench/MallocBench/mbmalloc.cpp:
        * MallocBench/MallocBench/mbmalloc.h: Added a scavenge implementation
        for system malloc.

2014-04-14  Geoffrey Garen  <ggaren@apple.com>

        A few MallocBench record/replay fixes
        https://bugs.webkit.org/show_bug.cgi?id=131627

        Reviewed by Andreas Kling.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::run): Accept 0-sized allocations without asserting because
        WebKit does that sometimes.

        * MallocBench/MallocBench/flickr.ops:
        * MallocBench/MallocBench/flickr_memory_warning.ops:
        * MallocBench/MallocBench/reddit.ops:
        * MallocBench/MallocBench/reddit_memory_warning.ops:
        * MallocBench/MallocBench/theverge.ops:
        * MallocBench/MallocBench/theverge_memory_warning.ops: Updated these
        recordings because a bug in the recording mechanism caused one out of
        every few thousand slot values to be bogus.

2014-04-13  Geoffrey Garen  <ggaren@apple.com>

        Added some website recordings to MallocBench -- taken from Membuster
        https://bugs.webkit.org/show_bug.cgi?id=131601

        Reviewed by Ryosuke Niwa.

        Added flickr, reddit, and theverge -- each recorded from Membuster's
        cache, with and without sending Safari a low memory warning.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MallocBench/MallocBench/Benchmark.cpp:
        * MallocBench/MallocBench/flickr.cpp: Added.
        (benchmark_flickr):
        (benchmark_flickr_memory_warning):
        * MallocBench/MallocBench/flickr.h: Added.
        * MallocBench/MallocBench/flickr.ops: Added.
        * MallocBench/MallocBench/flickr_memory_warning.ops: Added.
        * MallocBench/MallocBench/reddit.cpp: Added.
        (benchmark_reddit):
        (benchmark_reddit_memory_warning):
        * MallocBench/MallocBench/reddit.h: Added.
        * MallocBench/MallocBench/reddit.ops: Added.
        * MallocBench/MallocBench/reddit_memory_warning.ops: Added.
        * MallocBench/MallocBench/theverge.cpp: Added.
        (benchmark_theverge):
        (benchmark_theverge_memory_warning):
        * MallocBench/MallocBench/theverge.h: Added.
        * MallocBench/MallocBench/theverge.ops: Added.
        * MallocBench/MallocBench/theverge_memory_warning.ops: Added.

2014-04-13  Geoffrey Garen  <ggaren@apple.com>

        MallocBench record/replay should support realloc
        https://bugs.webkit.org/show_bug.cgi?id=131598

        Reviewed by Ryosuke Niwa.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Fixed some linkage
        issues that caused us not to fully link to system malloc in the default
        case. Also marked mbmalloc.dylib as required so the error message will
        be clearer if we mess up.

        * MallocBench/MallocBench/Interpreter.cpp:
        (Interpreter::run):
        * MallocBench/MallocBench/Interpreter.h: Added the realloc case, and
        upgraded one-letter names to full words.

2014-04-11  Dirk Schulze  <krit@webkit.org>

        Optimize Canvas fill and drawImage with SourceIn, DestinationIn, SourceOut, and DestinationAtop using transparencyLayer.
        https://bugs.webkit.org/show_bug.cgi?id=79659

        Reviewed by Andreas Kling.

        Add performance tests for real this time.

        * Canvas/compositing-drawimage.html: Added.
        * Canvas/compositing-fillRect.html: Added.


2014-04-11  Dirk Schulze  <krit@webkit.org>

        Optimize Canvas fill and drawImage with SourceIn, DestinationIn, SourceOut, and DestinationAtop using transparencyLayer.
        https://bugs.webkit.org/show_bug.cgi?id=79659

        Reviewed by Andreas Kling.

        Add performance tests for fillRect() and drawImage() on composited contexts.

        * Canvas/compositing-drawimage.html: Added.
        * Canvas/compositing-fillRect.html: Added.

2014-04-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add no shapes version of RegionsShapes performance test
        https://bugs.webkit.org/show_bug.cgi?id=131455

        Reviewed by Ryosuke Niwa.

        This is a no shapes version of the RegionsShapes performance test. All the content
        will wrap around the floating containers. This way we can compare the runtime/memory
        usage of the RegionsShapes test with/without shapes. The test is skipped by default.

        * Layout/Shapes/RegionsShapesNoShapes.html: Added.
        * Layout/Shapes/resources/RegionsShapesContentNoShapes.html: Added.

2014-04-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add no regions version of RegionsShapes performance test
        https://bugs.webkit.org/show_bug.cgi?id=131442

        Reviewed by Ryosuke Niwa.

        We would like have a no regions version for RegionsShapes performance test. The new
        test produces similar layout to RegionsShapes.html without using regions. It is helpful
        for us to do further comparisons when necessary. This test is skipped by default.

        * Layout/Shapes/RegionsShapesNoRegions.html: Added.
        * Layout/Shapes/resources/RegionsShapes.css: Added.
        (html, body):
        (.shape):
        (#circleShape):
        (#imageShape):
        (#insetShape):
        (#roundedInsetShape):
        (#triangleLeft):
        (#triangleRight):
        (#selfIntersectingStar):
        (#region1):
        (#region2):
        (#region3):
        * Layout/Shapes/resources/RegionsShapesContent.html:
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth400.html: Added.
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth600.html: Added.
        * Layout/Shapes/resources/RegionsShapesContentNoRegionsWidth800.html: Added.

2014-04-02  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed.

        Try to ignore some Xcode shmutz in MallocBench.

        * MallocBench/MallocBench.xcodeproj: Added property svn:ignore.

2014-04-02  Geoffrey Garen  <ggaren@apple.com>

        Let's benchmark malloc
        https://bugs.webkit.org/show_bug.cgi?id=131118

        Reviewed by Mark Hahnenberg.

        I want to replace fastMalloc with something faster (fasterMalloc?).
        I wrote these benchmarks to test / drive development.

        * MallocBench: Added.
        * MallocBench/MallocBench: Added.
        * MallocBench/MallocBench.xcodeproj: Added.
        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Added.
        * MallocBench/MallocBench/Benchmark.cpp: Added.
        (allocateHeap):
        (deallocateHeap):
        (Benchmark::Benchmark):
        (Benchmark::printBenchmarks):
        (Benchmark::runOnce):
        (Benchmark::run):
        (Benchmark::printReport):
        (Benchmark::currentTimeMS):
        (Benchmark::currentMemoryBytes):
        * MallocBench/MallocBench/Benchmark.h: Added.
        (Benchmark::Memory::Memory):
        (Benchmark::Memory::operator-):
        (Benchmark::isValid):
        * MallocBench/MallocBench/CPUCount.cpp: Added.
        (cpuCount):
        * MallocBench/MallocBench/CPUCount.h: Added.
        * MallocBench/MallocBench/CommandLine.cpp: Added.
        (CommandLine::printUsage):
        * MallocBench/MallocBench/CommandLine.h: Added.
        (CommandLine::isValid):
        (CommandLine::benchmarkName):
        (CommandLine::isParallel):
        (CommandLine::heapSize):
        (CommandLine::measureHeap):
        * MallocBench/MallocBench/Interpreter.cpp: Added.
        (Interpreter::Interpreter):
        (Interpreter::~Interpreter):
        (Interpreter::run):
        * MallocBench/MallocBench/Interpreter.h: Added.
        * MallocBench/MallocBench/balloon.cpp: Added.
        (benchmark_balloon):
        * MallocBench/MallocBench/balloon.h: Added.
        * MallocBench/MallocBench/big.cpp: Added.
        (benchmark_big):
        * MallocBench/MallocBench/big.h: Added.
        * MallocBench/MallocBench/churn.cpp: Added.
        (HeapDouble::operator new):
        (HeapDouble::operator delete):
        (HeapDouble::HeapDouble):
        (HeapDouble::operator+=):
        (benchmark_churn):
        * MallocBench/MallocBench/churn.h: Added.
        * MallocBench/MallocBench/crash.ops: Added.
        * MallocBench/MallocBench/facebook.cpp: Added.
        (benchmark_facebook):
        * MallocBench/MallocBench/facebook.h: Added.
        * MallocBench/MallocBench/facebook.ops: Added.
        * MallocBench/MallocBench/fragment.cpp: Added.
        (validate):
        (benchmark_fragment):
        (benchmark_fragment_iterate):
        * MallocBench/MallocBench/fragment.h: Added.
        * MallocBench/MallocBench/list.cpp: Added.
        (benchmark_list_allocate):
        (benchmark_list_traverse):
        * MallocBench/MallocBench/list.h: Added.
        * MallocBench/MallocBench/main.cpp: Added.
        (main):
        * MallocBench/MallocBench/mbmalloc.cpp: Added.
        * MallocBench/MallocBench/mbmalloc.h: Added.
        * MallocBench/MallocBench/medium.cpp: Added.
        (benchmark_medium):
        * MallocBench/MallocBench/medium.h: Added.
        * MallocBench/MallocBench/message.cpp: Added.
        (benchmark_message_one):
        (benchmark_message_many):
        * MallocBench/MallocBench/message.h: Added.
        * MallocBench/MallocBench/realloc.cpp: Added.
        (benchmark_realloc):
        * MallocBench/MallocBench/realloc.h: Added.
        * MallocBench/MallocBench/tree.cpp: Added.
        (benchmark_tree_allocate):
        (benchmark_tree_traverse):
        (benchmark_tree_churn):
        * MallocBench/MallocBench/tree.h: Added.
        * MallocBench/run-malloc-benchmarks: Added.

2014-03-29  Mark Lam  <mark.lam@apple.com>

        LongSpider 3d-morph result check is inappropriate.
        <https://webkit.org/b/130928>

        Reviewed by Filip Pizlo.

        The LongSpider 3d-morph component expected result check is incorrect.
        The existing test checks if the leading digit of a sum starts with "-1".
        However, it turned out that the expected sum is in the order of
        -1.8735013540549517e-16 (i.e. very close to 0).  With small errors in
        the terms of the sum adding up, it is very easy for the resultant sum
        to fluctuate.  There is no guarantee that the resultant sum's most
        significant digit will start with -1 either.

        The fix is to do a tolerance check on all the terms of the sum as well
        as the total sum value instead.  The tolerance should be more lenient
        for the sum which accumulates error from the individual terms, then for
        individual terms.

        * LongSpider/3d-morph.js:
        (expect):

2014-03-28  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance tests for Shapes with Regions
        https://bugs.webkit.org/show_bug.cgi?id=129624

        Reviewed by Ryosuke Niwa.

        This tests introduces a real-life like page, which contains different types of shapes within
        shape-outsides. The content flows through regions, which use media queries. The performance test
        loads the actual Shapes-Regions test case into iframes with different page sizes (thus the layout
        triggers the media queries as well), and measures its load time.

        * Layout/RegionsShapes.html: Added.
        * Layout/Shapes/resources/RegionsShapesContent.html: Added.

2014-03-20  Zoltan Horvath  <zoltan@webkit.org>

        Add option for hiding Confidence Interval Delta on the performance tests results page
        https://bugs.webkit.org/show_bug.cgi?id=130483

        Reviewed by Ryosuke Niwa.

        I've found it useful to hide the confidence interval delta from the results table
        sometimes, for example on copying data, or for a clearer look. This patch introduces
        a new button for it on the local results page.

        * resources/results-template.html:

2014-03-20  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Optimize RenderTable::colToEffCol() for tables without colspans
        https://bugs.webkit.org/show_bug.cgi?id=129298

        Reviewed by Simon Fraser.

        Create an alternative fast path to RenderTable colToEffCol() and effColToCol()
        when there is no colspan or colspan does not exceed the width of table.
        Blink merge https://codereview.chromium.org/154243002 by rhogan

        * Layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html: Added.
        * Layout/large-table-with-collapsed-borders-and-colspans.html: Added.
        * Layout/large-table-with-collapsed-borders-and-no-colspans.html: Added.
        * Layout/resources/large-table-with-collapsed-borders.css: Added.
        * Layout/resources/large-table-with-collapsed-borders.js: Added.

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>

        Reviewed by Simon Fraser.

        * Dromaeo/resources/dromaeo/web/tests/sunspider-3d-raytrace.html:
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-bitwise-and.html:
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-cordic.html:
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-tagcloud.html:
        * LongSpider/3d-morph.js:
        * LongSpider/3d-raytrace.js:
        * LongSpider/math-cordic.js:
        * LongSpider/string-tagcloud.js:
        * Parser/resources/html5-8266.html:
        * Parser/resources/html5.html:

2014-03-10  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance tests for SVG shape with shape-margin
        https://bugs.webkit.org/show_bug.cgi?id=129930

        Reviewed by Ryosuke Niwa.

        The test is skipped by default.

        * Layout/Shapes/ShapeOutsideSVGWithMargin.html: Added.
        * Layout/Shapes/resources/shape.svg: Added.

2014-02-19  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for stacked floats with shape-outsides
        https://bugs.webkit.org/show_bug.cgi?id=128821

        Reviewed by Brent Fulgham.

        This tests generate stacked floats content with shape-outsides.
        The test is skipped by default.

        * Layout/Shapes/ShapeOutsideStackedPolygons.html: Added.

2014-02-15  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for raster shape with shape-margin
        https://bugs.webkit.org/show_bug.cgi?id=128770

        Reviewed by Ryosuke Niwa.

        This patch introduces a new performance test for image valued shapes,
        where shape-margin is applied on the shape.
        The test is skipped by default.

        * Layout/Shapes/ShapeOutsideRasterWithMargin.html: Added.

2014-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        Improve the appearance of DYEBench
        https://bugs.webkit.org/show_bug.cgi?id=128866

        Reviewed by Antti Koivisto.

        Add a div that shows progress during the test. Also show 95th percentile,
        and use a table instead of pre to show results.

        * DoYouEvenBench/Full.html:
        (.addResult): Added. Shows results in a table.
        (benchmarkClient.willRunTest): Added to show the progress bar.
        (benchmarkClient.didRunTest):
        (benchmarkClient.didRunSuites):
        (benchmarkClient.didFinishLastIteration): Compute 95th percentile using Statistics.js

        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner.prototype._appendFrame): Fix the bug where marginLeft and marginTop
        weren't correctly parsed. We were treating top as left and bottom as top somehow.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Fixed a typo.

2014-02-13  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for complex polygon with shape-margin
        https://bugs.webkit.org/show_bug.cgi?id=128769

        Reviewed by Ryosuke Niwa.

        This patch modifies the logic of createShapeOutsideTest to accept multiple
        CSS properties from the test. The patch adds performance test for complex
        polygon shape (self intersecting at multiple places) case, moreover we
        apply shape-margin on the polygon also.

        * Layout/Shapes/ShapeOutsideContentBox.html:
        * Layout/Shapes/ShapeOutsideInset.html:
        * Layout/Shapes/ShapeOutsidePolygonWithMargin.html: Added.
        * Layout/Shapes/ShapeOutsideRaster.html:
        * Layout/Shapes/ShapeOutsideSimplePolygon.html:
        * Layout/Shapes/resources/shapes.js:

2014-02-13  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add performance test for raster shape
        https://bugs.webkit.org/show_bug.cgi?id=128746

        Reviewed by Ryosuke Niwa.

        This patch adds performance testing for image valued shape-outside.
        The test is skipped by default for now.

        * Layout/Shapes/ShapeOutsideRaster.html: Added.
        * Layout/Shapes/resources/shape.gif: Added.

2014-02-10  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add initial performance tests for polygon shape
        https://bugs.webkit.org/show_bug.cgi?id=128554

        Reviewed by Ryosuke Niwa.

        This patch adds performance testing for simple polygon shape-outside.
        The Shapes performance tests directory is skipped by default.

        * Layout/Shapes/ShapeOutsideSimplePolygon.html: Added.

2014-02-07  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add initial performance tests for inset shape
        https://bugs.webkit.org/show_bug.cgi?id=128378

        Reviewed by Ryosuke Niwa.

        * Layout/Shapes/ShapeOutsideContentBox.html: Move js to shapes.js.
        * Layout/Shapes/ShapeOutsideInset.html: Added.
        * Layout/Shapes/resources/shapes.js: Added.
        (.):

2014-02-04  Ryosuke Niwa  <rniwa@webkit.org>

        Undelete the "build" directory erroneously removed in r163427.

        * DoYouEvenBench/resources/todomvc/labs/architecture-examples/react/bower_components/director/build:

2014-02-04  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the change made in r162216 as it broke the benchmark on shipping Safari.

        * DoYouEvenBench/resources/benchmark-runner.js:

2014-02-04  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Update Ember.js test case
        https://bugs.webkit.org/show_bug.cgi?id=128227

        Reviewed by Benjamin Poulain.

        Updated the Ember.js TodoMVC implementation.

        * DoYouEvenBench/resources/tests.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower.json:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember-data/ember-data.js: Added.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter/localstorage_adapter.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/jquery/jquery.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/index.html:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/app.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/controllers/todo_controller.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/controllers/todos_controller.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/helpers/pluralize.js: Added.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/libs/ember-data.js: Removed.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/models/store.js: Removed.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/models/todo.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/router.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/views/edit_todo_view.js:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/js/views/todos_view.js: Added.
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/readme.md:
        * DoYouEvenBench/resources/todomvc/architecture-examples/emberjs/test.html:

2014-02-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Add initial performance test for shape-outside: content-box
        https://bugs.webkit.org/show_bug.cgi?id=128190

        Reviewed by Ryosuke Niwa.

        I've introduced Shapes subdirectory in Layout, every CSS Shapes related performance tests should
        go there in the future. The initial performance tests uses 'shape-outside: content-box' in order
        to tests the code paths of the Shapes implementation. I also introduced shapes.js, which allows us
        to easily add new, simple performance tests for shape-outside.

        The entire progress is tracked under #128188 meta bug.

        * Layout/Shapes/ShapeOutsideContentBox.html: Added.
        * Layout/Shapes/resources/shapes.css: Added.
        * Layout/Shapes/resources/shapes.js: Added.
        * Skipped: We skip running the tests by default for now.

2014-01-17  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Minor fixes in regions performance tests
        https://bugs.webkit.org/show_bug.cgi?id=127041

        Reviewed by Ryosuke Niwa.

        Fix minor issues in CSS Regions performance tests.

        * Layout/RegionsAuto.html: Change type to lower case.
        * Layout/RegionsAutoMaxHeight.html: Ditto.
        * Layout/RegionsFixed.html: Ditto.
        * Layout/RegionsFixedShort.html: Ditto.
        * Layout/RegionsSelection.html: Ditto. Move test methods from regions.js.
        * Layout/resources/regions.js: Remove moved methods.

2014-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        Host DoYouEvenBench on webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=127185

        Reviewed by Benjamin Poulain.

        Compute the resources directory relative to the benchmark-runner's location
        so that we can load tests even if the runner HTML was located elsewhere.

        * DoYouEvenBench/Full.html:
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkState._containingDirectory):

2014-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Move flightjs-example-app and todomvc into resources
        https://bugs.webkit.org/show_bug.cgi?id=127183

        Rubber-stamped by Anders Carlsson.

        * DoYouEvenBench/InteractiveRunner.html: Copied from PerformanceTests/DoYouEvenBench/benchmark.html.
        * DoYouEvenBench/benchmark.html: Removed.
        * DoYouEvenBench/flightjs-example-app: Removed.
        * DoYouEvenBench/flightjs-example-app/LICENSE.md: Removed.
        * DoYouEvenBench/flightjs-example-app/README.md: Removed.
        * DoYouEvenBench/flightjs-example-app/app: Removed.
        * DoYouEvenBench/flightjs-example-app/app/boot: Removed.
        * DoYouEvenBench/flightjs-example-app/app/boot/page.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data/compose_box.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data/mail_items.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_data/move_to.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/compose_box.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/folders.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_controls.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_items.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/move_to_selector.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/with_select.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/css: Removed.
        * DoYouEvenBench/flightjs-example-app/app/css/custom.css: Removed.
        * DoYouEvenBench/flightjs-example-app/app/data.js: Removed.
        * DoYouEvenBench/flightjs-example-app/app/templates.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.min.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.min.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings-white.png: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings.png: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/.gitignore: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CHANGES: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CONTRIBUTORS.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/LICENSE: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/README.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/component.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/package.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-kill.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-matchers.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/index.html: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine-html.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.css: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine_favicon.png: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/json2.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-array.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-date.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-function.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-object.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-string.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/.travis.yml: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/advice.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/component.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/compose.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/index.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/logger.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/registry.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/utils.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug: Removed.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug/debug.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/LICENSE.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/README.md: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/bower.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib/jasmine-flight.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib/jasmine-jquery.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/component.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/composer.json: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.min.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/mustache: Removed.
        * DoYouEvenBench/flightjs-example-app/components/mustache/mustache.js: Removed.
        * DoYouEvenBench/flightjs-example-app/components/requirejs: Removed.
        * DoYouEvenBench/flightjs-example-app/components/requirejs/require.js: Removed.
        * DoYouEvenBench/flightjs-example-app/index.html: Removed.
        * DoYouEvenBench/flightjs-example-app/karma.conf.js: Removed.
        * DoYouEvenBench/flightjs-example-app/package.json: Removed.
        * DoYouEvenBench/flightjs-example-app/requireMain.js: Removed.
        * DoYouEvenBench/resources/benchmark-runner.js:
        * DoYouEvenBench/resources/flightjs-example-app: Copied from PerformanceTests/DoYouEvenBench/flightjs-example-app.
        * DoYouEvenBench/resources/todomvc: Copied from PerformanceTests/DoYouEvenBench/todomvc.
        * DoYouEvenBench/todomvc: Removed.
        * DoYouEvenBench/todomvc/architecture-examples: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks/angular-mocks.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular/angular.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers/todoCtrl.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoBlur.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoEscape.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoFocus.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services/todoStorage.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config/testacular.conf.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/package.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/directivesSpec.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/todoCtrlSpec.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage/backbone.localStorage.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone/backbone.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery/jquery.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore/underscore.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections/todos.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models/todo.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers/router.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/app-view.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/todo-view.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter/localstorage_adapter.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery/jquery.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todo_controller.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todos_controller.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs/ember-data.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/store.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/todo.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/router.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views/edit_todo_view.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/readme.md: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/test.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower.json: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars/handlebars.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery/jquery.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css/app.css: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/index.html: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js/app.js: Removed.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/readme.md: Removed.
        * DoYouEvenBench/todomvc/labs: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower.json: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/LICENSE: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/README.md: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.min.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/ender.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/JSXTransformer.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/bower.json: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.min.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/index.html: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/app.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/footer.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/todoItem.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/utils.jsx: Removed.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/readme.md: Removed.
        * DoYouEvenBench/todomvc/license.md: Removed.
        * DoYouEvenBench/todomvc/readme.md: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower.json: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.css: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/bg.png: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/index.html: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/app.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/controller.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/helpers.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/model.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/store.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/view.js: Removed.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/readme.md: Removed.
        * Skipped:

2014-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Skip HTML files that are not tests.

        * Skipped:

2014-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Automate DoYouEvenBench
        https://bugs.webkit.org/show_bug.cgi?id=124497

        Reviewed by Geoffrey Garen.

        Enable DoYouEvenBench/Full.html on perf bots by default.

        Put a space between the time and ms, and fixed a typo in runner.js so that the aggregator name will be reported.

        * DoYouEvenBench/Full.html:
        * Skipped:
        * resources/runner.js:

2014-01-15  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Add performance tests for selection with mixed content
        https://bugs.webkit.org/show_bug.cgi?id=126427

        Reviewed by Ryosuke Niwa.

        Add new performance tests for selection in CSS Regions mixing regular
        content with regions. 2 new tests are added, one checking select all
        command and another simulating a user selection passing through all the
        paragraphs (similar to Layout/RegionsSelection.html).

        Test are skipped for now while implementation of selection in CSS
        Regions is still evolving.

        * Layout/RegionsExtendingSelectionMixedContent.html: Added.
        * Layout/RegionsSelectAllMixedContent.html: Added.
        * Layout/resources/regions.css:
        (.regular):
        * Layout/resources/regions.js:
        * Skipped:

2014-01-14  Ryosuke Niwa  <rniwa@webkit.org>

        Make DoYouEvenBench runnable by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=127030

        Reviewed by Andreas Kling.

        Added Full.html that runs 5 iterations of DoYouEvenBench. This is the canonical DoYouEvenBench,
        which is also runnable by run-perf-tests.

        * DoYouEvenBench/Full.html: Added.

        * DoYouEvenBench/benchmark.html:
        (startTest): Updated the code to account for the fact old measuredValues is pushed down to tests
        property and we now have total property so that we don't have to manually compute the total.

        * DoYouEvenBench/resources/benchmark-report.js: Added. When we're inside a DRT/WTR, use
        PerfTestRunner to output that can be parsed by run-perf-tests. Do the same when the query part
        or the fragment part of the current URL is "webkit" for debugging purposes.

        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner):
        (BenchmarkRunner.prototype._appendFrame): Position the frame at (0, 0) inside DRT and WTR since
        we have exactly 800px by 600px inside those two test runners. Also always insert the iframe as
        the first child of body to avoid inserting it after the pre inserted by the test runner.
        (BenchmarkRunner.prototype.step): Initializes _measuredValues.
        (BenchmarkRunner.prototype.runAllSteps): Merged callNextStep in benchmark.html.
        (BenchmarkRunner.prototype.runMultipleIterations): Added.
        (BenchmarkRunner.prototype._runTestAndRecordResults): Compute the grand total among suites.
        Also push down the sync and async time into tests property for consistency.
        (BenchmarkRunner.prototype._finalize):

        * Dromaeo/resources/dromaeorunner.js:
        (DRT.testObject): Renamed dromaeoIterationCount to customIterationCount as this option is also
        used by DoYouEvenBench.

        * resources/runner.js: Ditto.
        (.finish): Spit out the aggregator name.

2014-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Turn BenchmarkRunner into a real class
        https://bugs.webkit.org/show_bug.cgi?id=126613

        Reviewed by Stephanie Lewis.

        Made BenchmarkRunner an instantiatable class. Made tests.js simply create an array of suite objects
        instead of calling BenchmarkRunner.Suite now that we can have mulitple instances of BenchmarkRunner.

        * DoYouEvenBench/benchmark.html:
        (formatTestName): Moved and renamed from BenchmarkRunner._testName.
        (createUIForSuites): Extracted from a giant blob of code.
        (startTest): Ditto.
        * DoYouEvenBench/resources/benchmark-runner.js:
        (BenchmarkRunner): Added.
        (BenchmarkRunner.prototype.waitForElement):
        (BenchmarkRunner.prototype._removeFrame):
        (BenchmarkRunner.prototype._appendFrame):
        (BenchmarkRunner.prototype._waitAndWarmUp):
        (BenchmarkRunner.prototype._runTest):
        (BenchmarkState.prototype.prepareCurrentSuite):
        (BenchmarkRunner.prototype.step):
        (BenchmarkRunner.prototype._runTestAndRecordResults):
        (BenchmarkRunner.prototype._finalize):
        * DoYouEvenBench/resources/tests.js:

2014-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Extract tests and runner code from benchmark.js/html
        https://bugs.webkit.org/show_bug.cgi?id=126596

        Reviewed by Stephanie Lewis.

        Extracted benchmark-runner.js and tests.js out of benchmark.js and benchmark.html.

        Added a "client" interface to BenchmarkRunner so that benchmark.html could register necessary hooks to
        update its UI. Also made BenchmarkRunner store a tree of results so that the serialization of test names
        could be isolated from BenchmarkRunner itself in the future.

        * DoYouEvenBench/benchmark.html:
        Moved the code to instantiate and update UI here from benchmark.js. The test code was moved out of this
        file into resources/tests.js.

        * DoYouEvenBench/resources/benchmark-runner.js: Renamed from PerformanceTests/DoYouEvenBench/benchmark.js.
        (SimplePromise): Moved from benchmark.js
        (SimplePromise.prototype.then): Ditto.
        (SimplePromise.prototype.resolve): Ditto.
        (BenchmarkTestStep): Added. Wraps each test step.
        (BenchmarkRunner.suite): Moved from benchmark.js.
        (BenchmarkRunner.setClient): Added.
        (BenchmarkRunner.waitForElement): Moved.
        (BenchmarkRunner._removeFrame): Ditto.
        (BenchmarkRunner._appendFrame): Ditto. Set the width and the height of the iframe as they're more than
        presentational as they affect performance.
        (BenchmarkRunner._waitAndWarmUp): Ditto.
        (BenchmarkRunner._runTest): Ditto.
        (BenchmarkRunner._testName): Ditto.
        (BenchmarkState): Ditto.
        (BenchmarkState.prototype.currentSuite): Ditto.
        (BenchmarkState.prototype.currentTest): Ditto.
        (BenchmarkState.prototype.next): Ditto.
        (BenchmarkState.prototype.isFirstTest): Ditto.
        (BenchmarkState.prototype.prepareCurrentSuite): Ditto.
        (BenchmarkRunner.step): Ditto.
        (BenchmarkRunner._runTestAndRecordResults): Ditto. Note the code to update the UI has been move to
        benchmark.html. Also moved the code to accumulate the totals here from _finalize.
        (BenchmarkRunner._finalize): Moved.

        * DoYouEvenBench/resources/tests.js: Copied from PerformanceTests/DoYouEvenBench/benchmark.html.
        Uses BenchmarkTestStep instead of an array for each test step.

2014-01-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen.

        This test times creating a variety of different sizes of canvases
        once some have already been created. The second creation of the
        canvases should re-use the existing IOSurfaces.

        * Canvas/reuse.html: Added.

2013-12-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160945.
        http://trac.webkit.org/changeset/160945
        https://bugs.webkit.org/show_bug.cgi?id=126164

        Seems to have broken multiple canvas tests (Requested by ap on
        #webkit).

        * Canvas/reuse.html: Removed.

2013-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen.

        This test times creating a variety of different sizes of canvases
        once some have already been created. The second creation of the
        canvases should re-use the existing IOSurfaces.

        * Canvas/reuse.html: Added.

2013-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: 2x regression on Dromaeo DOM query tests
        https://bugs.webkit.org/show_bug.cgi?id=125377

        Reviewed by Filip Pizlo.

        Added a micro-benchmark for updating a named property on document.

        * Bindings/update-name-getter.html: Added.
        * Skipped:

2013-12-03  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Fix Layout/RegionsSelection.html in Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=124963

        Reviewed by Ryosuke Niwa.

        Layout/RegionsSelection.html introduced in r159488 was not working in
        Mac platform because of it was trying to use mouse events out of the
        window dimensions. Use collapse() and extend() methods from Selection
        object to solve the issue.

        * Layout/resources/regions.js: Use collapse() and extend() instead of
        mouse events.

2013-11-27  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r159805.

        * resources/runner.js:

2013-11-26  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Support grid-definition-{rows|columns} repeat() syntax
        https://bugs.webkit.org/show_bug.cgi?id=103312

        Reviewed by Andreas Kling.

        Use the repeat() syntax to build the huge grids used by the
        performance tests.

        * Layout/auto-grid-lots-of-data.html:
        * Layout/fixed-grid-lots-of-data.html:

2013-11-26  Ryosuke Niwa  <rniwa@webkit.org>

        Record subtest values in Dromaeo tests
        https://bugs.webkit.org/show_bug.cgi?id=124498

        Reviewed by Andreas Kling.

        Made Dromaeo's test runner report values in DRT.progress via newly added PerfTestRunner.reportValues.

        * Dromaeo/resources/dromaeorunner.js:
        (.): Moved the definition out of DRT.setup.
        (DRT.setup): Ditto.
        (DRT.testObject): Extracted from DRT.setup. Set the subtest name and continueTesting.
        continueTesting is set true for subtests; i.e. when name is specified.
        (DRT.progress): Call PerfTestRunner.reportValues to report subtest results.
        (DRT.teardown): Call PerfTestRunner.reportValues instead of measureValueAsync.

        * resources/runner.js: Made various changes for newly added PerfTestRunner.reportValues.
        (.): Moved the initialization of completedIterations, results, jsHeapResults, and mallocHeapResults into
        start since they need to be initialized before running each subtest. Initialize logLines here since we
        need to use the same logger for all subtests.
        (.start): Initialize the variables mentioned above here. Also respect doNotLogStart used by reportValues.
        (ignoreWarmUpAndLog): Added doNotLogProgress. Used by reportValues since it reports all values at once.
        (finish): Compute the metric name such as FrameFrame and Runs from unit. Also don't log or notify done
        when continueTesting is set on the test object.
        (PerfTestRunner.reportValues): Added. Reports all values for the main/sub test.

2013-11-26  Ryosuke Niwa  <rniwa@webkit.org>

        Remove replay performance tests as it's not actively maintained
        https://bugs.webkit.org/show_bug.cgi?id=124764

        Reviewed by Andreas Kling.

        Removed the replay performance tests. We can add them back when time comes.

        * Replay/Chinese/chinaz.com.replay: Removed.
        * Replay/Chinese/www.163.com.replay: Removed.
        * Replay/Chinese/www.alipay.com.replay: Removed.
        * Replay/Chinese/www.baidu.com.replay: Removed.
        * Replay/Chinese/www.csdn.net.replay: Removed.
        * Replay/Chinese/www.douban.com.replay: Removed.
        * Replay/Chinese/www.hao123.com.replay: Removed.
        * Replay/Chinese/www.xinhuanet.com.replay: Removed.
        * Replay/Chinese/www.xunlei.com.replay: Removed.
        * Replay/Chinese/www.youku.com.replay: Removed.
        * Replay/English/beatonna.livejournal.com.replay: Removed.
        * Replay/English/cakewrecks.blogspot.com.replay: Removed.
        * Replay/English/chemistry.about.com.replay: Removed.
        * Replay/English/digg.com.replay: Removed.
        * Replay/English/en.wikipedia.org-rorschach_test.replay: Removed.
        * Replay/English/icanhascheezburger.com.replay: Removed.
        * Replay/English/imgur.com-gallery.replay: Removed.
        * Replay/English/online.wsj.com.replay: Removed.
        * Replay/English/stockoverflow.com-best-comment.replay: Removed.
        * Replay/English/www.alibaba.com.replay: Removed.
        * Replay/English/www.amazon.com-kindle.replay: Removed.
        * Replay/English/www.apple.com.replay: Removed.
        * Replay/English/www.cnet.com.replay: Removed.
        * Replay/English/www.dailymotion.com.replay: Removed.
        * Replay/English/www.ehow.com-prevent-fire.replay: Removed.
        * Replay/English/www.filestube.com-amy-adams.replay: Removed.
        * Replay/English/www.foxnews.replay: Removed.
        * Replay/English/www.huffingtonpost.com.replay: Removed.
        * Replay/English/www.imdb.com-twilight.replay: Removed.
        * Replay/English/www.mozilla.com-all-order.replay: Removed.
        * Replay/English/www.php.net.replay: Removed.
        * Replay/English/www.reddit.com.replay: Removed.
        * Replay/English/www.telegraph.co.uk.replay: Removed.
        * Replay/English/www.w3.org-htmlcss.replay: Removed.
        * Replay/English/www.w3schools.com-html.replay: Removed.
        * Replay/English/www.youtube.com-music.replay: Removed.
        * Replay/French/www.orange.fr.replay: Removed.
        * Replay/Italian/www.repubblica.it.replay: Removed.
        * Replay/Japanese/2ch.net-newsplus.replay: Removed.
        * Replay/Japanese/entameblog.seesaa.net.replay: Removed.
        * Replay/Japanese/ja.wikipedia.org.replay: Removed.
        * Replay/Japanese/www.hatena.ne.jp.replay: Removed.
        * Replay/Japanese/www.livedoor.com.replay: Removed.
        * Replay/Japanese/www.nicovideo.jp.replay: Removed.
        * Replay/Japanese/www.rakuten.co.jp.replay: Removed.
        * Replay/Japanese/www.yahoo.co.jp.replay: Removed.
        * Replay/Korean/www.naver.com.replay: Removed.
        * Replay/Persian/blogfa.com.replay: Removed.
        * Replay/Polish/www.wp.pl.replay: Removed.
        * Replay/Portuguese/www.uol.com.br.replay: Removed.
        * Replay/Russian/lenta.ru.replay: Removed.
        * Replay/Russian/vkontakte.ru-help.replay: Removed.
        * Replay/Russian/www.ixbt.com.replay: Removed.
        * Replay/Russian/www.kp.ru.replay: Removed.
        * Replay/Russian/www.liveinternet.ru.replay: Removed.
        * Replay/Russian/www.pravda.ru.replay: Removed.
        * Replay/Russian/www.rambler.ru.replay: Removed.
        * Replay/Russian/www.ucoz.ru.replay: Removed.
        * Replay/Russian/www.yandex.ru.replay: Removed.
        * Replay/Spanish/www.taringa.net.replay: Removed.
        * Replay/Swedish/www.flashback.se.replay: Removed.
        * Replay/Swedish/www.tradera.com.replay: Removed.
        * Replay/www.google.com.replay: Removed.
        * Replay/www.techcrunch.com.replay: Removed.
        * Replay/www.youtube.com.replay: Removed.

2013-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Layout Test editing/deleting/password-delete-performance.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=124781

        Reviewed by Alexey Proskuryakov.

        Add a new performance test to replace editing/deleting/password-delete-performance.html.
        We skip this test by default since it's a micro benchmark.

        * Interactive/DeletingInPasswordField.html: Added.
        * Skipped:

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Improve content-sized track layout
        https://bugs.webkit.org/show_bug.cgi?id=124408

        Reviewed by Dean Jackson.

        From Blink r156122 by <jchaffraix@chromium.org>

        New test to check the performance of layouting grids with content sized tracks.

        * Layout/auto-grid-lots-of-data.html: Added.

2013-11-08  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Run the content-sized tracks sizing algorithm only when required
        https://bugs.webkit.org/show_bug.cgi?id=124039

        Reviewed by Dean Jackson.

        From Blink r156028 and r156168 by <jchaffraix@chromium.org>.

        New performance tests for layouts in grids with fixed size tracks.

        * Layout/fixed-grid-lots-of-data.html: Added.

2013-11-19  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Add performance test for selection
        https://bugs.webkit.org/show_bug.cgi?id=119230

        Reviewed by Ryosuke Niwa.

        Add new performance test for selection in CSS Regions. It checks a
        selection from the first region to the last one, passing through all the
        regions.

        Test is skipped for now while implementation of selection in CSS Regions
        is still evolving.

        * Layout/RegionsSelection.html: Added.
        * Layout/resources/regions.js:
        (.):
        * Skipped:

2013-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify and reformat the output of performance tests inside test runners
        https://bugs.webkit.org/show_bug.cgi?id=124496

        Reviewed by Antti Koivisto.

        As a preparation to support subtests for Dromaeo and DoYouEvenBench, simplify the output performance tests generate.
        Also modernize the output to better support "metric" concept we introduced a while ago.

        New output on Dromaeo/dom-attr looks like this:
        -----------------------------------------------
        Running 5 times
        getAttribute -> [1105, 1108, 1134, 1137, 1154]
        element.property -> [1634, 1655, 1685, 1696, 1723]
        setAttribute -> [646.3536463536464, 651, 651, 656.3436563436563, 658]
        element.property = value -> [934, 949, 963, 964, 974]
        element.expando = value -> [419, 419.5804195804196, 421.57842157842157, 425.57442557442556, 429]
        element.expando -> [501, 517, 519.4805194805194, 521.4785214785214, 525]

            1: 117.40644785571585 runs/s
            2: 118.84720469666297 runs/s
            3: 119.80547640905021 runs/s
            4: 120.51886194758805 runs/s
            5: 121.51924380569295 runs/s

        :Time -> [117.40644785571585, 118.84720469666297, 119.80547640905021, 120.51886194758805, 121.51924380569295] runs/s
            mean: 119.619446942942 runs/s
            median: 119.80547640905021 runs/s
            stdev: 1.5769040458730506 runs/s
            min: 117.40644785571585 runs/s
            max: 121.51924380569295 runs/s
        -----------------------------------------------

        * Dromaeo/resources/dromaeorunner.js:
        (DRT.progress): Use the new format for subtest reports.
        * resources/runner.js:
        (.): Declare verboseLogging, which is set to true outside of test runners.
        (PerfTestRunner.logInfo): Use verboseLogging instead of directly checking window.testRunner.
        (PerfTestRunner.logDetail): Added. Logs informative text with a label such as "mean: 123 s" with 4-space indentation.
        (PerfTestRunner.logStatistics): Use logDetail.
        (.start): Initialize verboseLogging. Also log "Running 20 times" as an informative log using logDetail.
        (.ignoreWarmUpAndLog): Use logDetail for showing the progress. These logs were useless inside test runners anyway
        because perftest didn't get to see any output until the test finished running.
        (.finish): Call logStatistics with metric name as opposed to a label. Each metric name is now prefixed with ':' to be
        distinguishable from subtests, making the new format forward compatible.

2013-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        [Performance tests] Interactive/SelectAll.html throws an exception
        https://bugs.webkit.org/show_bug.cgi?id=124495

        Reviewed by Antti Koivisto

        Return a boolean indicating whether more values are needed or not in
        PerfTestRunner.measureValueAsync so that runTest can terminate gracefully.

        * Interactive/SelectAll.html:
        (runTest): Don't schedule a timer for runTest if we've got enough values.
        * resources/runner.js:
        (PerfTestRunner.measureValueAsync): Returns true iff more values are needed.

2013-11-13  Antti Koivisto  <antti@apple.com>

        This was supposed to test overflow-wrap:break-word instead of word-break:break-all.

        Rubber-stamped by Andreas Kling.

        * Layout/line-layout-simple.html:

2013-11-12  Andreas Kling  <akling@apple.com>

        Remove body onload handler from html5-8266.html that was causing
        the test to sometimes finish before doing anything interesting.

        Unskip Parser/HTML5-8266-FullRender.html now that it's stable.

        Rubber-stamped by Antti Koivisto.

        * Parser/resources/html5-8266.html:
        * Skipped:

2013-11-12  Andreas Kling  <akling@apple.com>

        Neutralize external resource loads in the new HTML5 spec copy.

        Skip Parser/HTML5-8266-FullRender.html until I can make it less flaky.

        * Parser/resources/html5-8266.html:
        * Skipped:

2013-11-12  Andreas Kling  <akling@apple.com>

        Import a fresh version of the full HTML5 spec for perf testing.

        Rubber-stamped by Antti Koivisto.

        * Parser/HTML5-8266-FullRender.html: Added.
        * Parser/HTML5-8266-ParseOnly.html: Added.
        * Parser/resources/html5-8266.html: Added.

2013-11-09  Antti Koivisto  <antti@apple.com>

        Add subtest for word-break:break-all to Layout/line-layout-simple.html
        https://bugs.webkit.org/show_bug.cgi?id=124103

        Reviewed by Andreas Kling.

        * Layout/line-layout-simple.html:

        Combination "white-space:pre-wrap; word-break:break-all" is common for pure text.

2013-11-08  Antti Koivisto  <antti@apple.com>

        Add line layout performance test that exercises more cases
        https://bugs.webkit.org/show_bug.cgi?id=124041

        Reviewed by Anders Carlsson.

        The existing line-layout.html covers the most basic left-aligned case only.
        Add a test with more coverage for things that are mostly not yet supported by the simple
        line layout path:

        - centered text
        - right aligned text
        - justified text
        - pre
        - white-space:pre-wrap
        - text with simple inlines
        - text with br

        * Layout/line-layout-simple.html: Added.

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        From Blink r152960 by <ojan@chromium.org>

        New performance test for layouts in flexboxes.

        * Layout/flexbox-lots-of-data.html: Added.

2013-10-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157916.
        http://trac.webkit.org/changeset/157916
        https://bugs.webkit.org/show_bug.cgi?id=123274

        Broke Layout/flexbox-lots-of-data.html on perfbot (Requested
        by ap on #webkit).

        * Layout/flexbox-lots-of-data.html: Removed.

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        From Blink r152960 by <ojan@chromium.org>

        New performance test for layouts in flexboxes.

        * Layout/flexbox-lots-of-data.html: Added.

2013-10-06  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Make it work on Internet Explorer 11 Release Preview
        https://bugs.webkit.org/show_bug.cgi?id=122406

        Reviewed by Darin Adler.

        On Internet Explorer 11, $(elem).closest('li').data('id') fails to find the containig li of elem once
        the first item is marked complete or deleted until we get back to the event loop in the jQuery/TodoMVC.
        Worked around this limitation by overriding app.getTodo to use each item's id computed in advance.

        Also use $.text instead of execCommand('InsertText') in FlightJS/MailClient since Internet Explorer
        doesn't support execCommand('InsertText'). Also select the recipient to avoid exceptions.

        * DoYouEvenBench/benchmark.html:

2013-10-05  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Add Facebook's React TodoMVC test case
        https://bugs.webkit.org/show_bug.cgi?id=122379

        Reviewed by Andreas Kling.

        Add React/TodoMVC as a new test case. Somehow we beat Firefox on this one as well.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/todomvc/labs: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower.json: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/LICENSE: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/README.md: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/director.min.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/director/build/ender.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/JSXTransformer.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/bower.json: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/react/react.min.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/index.html: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/app.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/footer.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/todoItem.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/js/utils.jsx: Added.
        * DoYouEvenBench/todomvc/labs/architecture-examples/react/readme.md: Added.

2013-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Add a test case for FlightJS
        https://bugs.webkit.org/show_bug.cgi?id=121926

        Reviewed by Antti Koivisto.

        Add a FlightJS test case.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/benchmark.js:
        * DoYouEvenBench/flightjs-example-app: Added.
        * DoYouEvenBench/flightjs-example-app/LICENSE.md: Added.
        * DoYouEvenBench/flightjs-example-app/README.md: Added.
        * DoYouEvenBench/flightjs-example-app/app: Added.
        * DoYouEvenBench/flightjs-example-app/app/boot: Added.
        * DoYouEvenBench/flightjs-example-app/app/boot/page.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data/compose_box.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data/mail_items.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_data/move_to.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/compose_box.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/folders.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_controls.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/mail_items.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/move_to_selector.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/component_ui/with_select.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/css: Added.
        * DoYouEvenBench/flightjs-example-app/app/css/custom.css: Added.
        * DoYouEvenBench/flightjs-example-app/app/data.js: Added.
        * DoYouEvenBench/flightjs-example-app/app/templates.js: Added.
        * DoYouEvenBench/flightjs-example-app/components: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap-responsive.min.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/css/bootstrap.min.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings-white.png: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/img/glyphicons-halflings.png: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/bootstrap/js/bootstrap.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/.gitignore: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CHANGES: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/CONTRIBUTORS.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/LICENSE: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/README.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/component.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-sham.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/es5-shim.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/package.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-kill.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h-matchers.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/helpers/h.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/index.html: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine-html.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.css: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/jasmine_favicon.png: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/lib/json2.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-array.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-date.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-function.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-object.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/es5-shim/tests/spec/s-string.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/.travis.yml: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/advice.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/component.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/compose.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/index.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/logger.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/registry.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/lib/utils.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug: Added.
        * DoYouEvenBench/flightjs-example-app/components/flight/tools/debug/debug.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/LICENSE.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/README.md: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/bower.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-flight/lib/jasmine-flight.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib: Added.
        * DoYouEvenBench/flightjs-example-app/components/jasmine-jquery/lib/jasmine-jquery.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/component.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/composer.json: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/jquery/jquery.min.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/mustache: Added.
        * DoYouEvenBench/flightjs-example-app/components/mustache/mustache.js: Added.
        * DoYouEvenBench/flightjs-example-app/components/requirejs: Added.
        * DoYouEvenBench/flightjs-example-app/components/requirejs/require.js: Added.
        * DoYouEvenBench/flightjs-example-app/index.html: Added.
        * DoYouEvenBench/flightjs-example-app/karma.conf.js: Added.
        * DoYouEvenBench/flightjs-example-app/package.json: Added.
        * DoYouEvenBench/flightjs-example-app/requireMain.js: Added.

2013-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        DoYouEvenBench: Indentations in benchmark.js and benchmark.html are all messed up
        https://bugs.webkit.org/show_bug.cgi?id=121597

        Reviewed by Anders Carlsson.

        Fixed indentations.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/benchmark.js:
        (SimplePromise.prototype.resolve.else):
        (SimplePromise.prototype.resolve):
        (BenchmarkRunner.waitForElement.resolveIfReady):
        (BenchmarkRunner.waitForElement):
        (BenchmarkRunner._waitAndWarmUp.Fibonacci):
        (BenchmarkRunner._finalize):

2013-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        Add an AngularJS test to DoYouEvenBench
        https://bugs.webkit.org/show_bug.cgi?id=121595

        Reviewed by Antti Koivisto.

        * DoYouEvenBench/benchmark.html:
        * DoYouEvenBench/todomvc/architecture-examples/angularjs: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular-mocks/angular-mocks.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/angular/angular.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/controllers/todoCtrl.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoBlur.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoEscape.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/directives/todoFocus.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/js/services/todoStorage.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/config/testacular.conf.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/package.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/directivesSpec.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/angularjs/test/unit/todoCtrlSpec.js: Added.

2013-09-17  Ryosuke Niwa  <rniwa@webkit.org>

        Add a not completely unrealistic DOM Benchmark
        https://bugs.webkit.org/show_bug.cgi?id=121361

        Reviewed by Filip Pizlo.

        Add a DOM benchmark based on TodoMVC for vanilla JS, Ember.js, Backbone.js, and jQuery.
        We'll add more frameworks and demo apps as we go.

        * DoYouEvenBench: Added.
        * DoYouEvenBench/benchmark.html: Added.
        * DoYouEvenBench/benchmark.js: Added.
        (SimplePromise):
        (SimplePromise.prototype.then):
        (SimplePromise.prototype.resolve.else):
        (SimplePromise.prototype.resolve):
        (BenchmarkRunner.suite):
        (BenchmarkRunner.waitForElement.resolveIfReady):
        (BenchmarkRunner.waitForElement):
        (BenchmarkRunner._removeFrame):
        (BenchmarkRunner._appendFrame):
        (BenchmarkRunner._waitAndWarmUp.Fibonacci):
        (BenchmarkRunner._testName):
        (BenchmarkRunner._testItemId):
        (BenchmarkRunner.listSuites.button.onclick):
        (BenchmarkRunner.listSuites.callNextStep):
        (BenchmarkRunner.listSuites):
        (BenchmarkState):
        (BenchmarkState.prototype.currentSuite):
        (BenchmarkState.prototype.currentTest):
        (BenchmarkState.prototype.next):
        (BenchmarkState.prototype.isFirstTest):
        (BenchmarkState.prototype.prepareCurrentSuite.frame.onload):
        (BenchmarkRunner.step):
        (BenchmarkRunner._runTestAndRecordResults):
        (BenchmarkRunner._finalize):
        * DoYouEvenBench/todomvc: Added.
        * DoYouEvenBench/todomvc/architecture-examples: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone.localStorage/backbone.localStorage.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/backbone/backbone.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/bower_components/underscore/underscore.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/collections/todos.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/models/todo.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/routers/router.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/app-view.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/js/views/todo-view.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/backbone/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember-localstorage-adapter/localstorage_adapter.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/ember/ember.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/handlebars/handlebars.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todo_controller.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/controllers/todos_controller.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/libs/ember-data.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/store.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/models/todo.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/js/views/edit_todo_view.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/readme.md: Added.
        * DoYouEvenBench/todomvc/architecture-examples/emberjs/test.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower.json: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/handlebars/handlebars.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/jquery/jquery.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/css/app.css: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/index.html: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/js/app.js: Added.
        * DoYouEvenBench/todomvc/architecture-examples/jquery/readme.md: Added.
        * DoYouEvenBench/todomvc/license.md: Added.
        * DoYouEvenBench/todomvc/readme.md: Added.
        * DoYouEvenBench/todomvc/vanilla-examples: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower.json: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.css: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/base.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/bower_components/todomvc-common/bg.png: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/index.html: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/app.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/controller.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/helpers.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/model.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/store.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/js/view.js: Added.
        * DoYouEvenBench/todomvc/vanilla-examples/vanillajs/readme.md: Added.
        * Skipped:

2013-09-04  Filip Pizlo  <fpizlo@apple.com>

        Introduce a version of SunSpider that runs for a really long time (about 1 sec on my machine)

        Rubber stamped by Mark Hahnenberg.

        This isn't meant for serious VM-to-VM performance comparisons, but it is useful
        to see how these benchmarks behave when they're completely warmed up.

        * LongSpider: Added.
        * LongSpider/3d-cube.js: Added.
        (DrawLine):
        (CalcCross):
        (CalcNormal):
        (CreateP):
        (MMulti):
        (VMulti):
        (VMulti2):
        (MAdd):
        (Translate):
        (RotateX):
        (RotateY):
        (RotateZ):
        (DrawQube):
        (Loop):
        (Init):
        * LongSpider/3d-morph.js: Added.
        (loops.3500.nx.120.nz.120.morph):
        * LongSpider/3d-raytrace.js: Added.
        (createVector):
        (sqrLengthVector):
        (lengthVector):
        (addVector):
        (subVector):
        (scaleVector):
        (normaliseVector):
        (add):
        (sub):
        (scalev):
        (dot):
        (scale):
        (cross):
        (normalise):
        (transformMatrix):
        (invertMatrix):
        (Triangle):
        (Triangle.prototype.intersect):
        (Scene):
        (Scene.prototype.intersect):
        (Scene.prototype.blocked):
        (Camera):
        (Camera.prototype.generateRayPair):
        (renderRows):
        (Camera.prototype.render):
        (raytraceScene.floorShader):
        (raytraceScene):
        (arrayToCanvasCommands):
        * LongSpider/access-binary-trees.js: Added.
        (TreeNode):
        (TreeNode.prototype.itemCheck):
        (bottomUpTree):
        * LongSpider/access-fannkuch.js: Added.
        (fannkuch):
        * LongSpider/access-nbody.js: Added.
        (Body):
        (Body.prototype.offsetMomentum):
        (Jupiter):
        (Saturn):
        (Uranus):
        (Neptune):
        (Sun):
        (NBodySystem):
        (NBodySystem.prototype.advance):
        (NBodySystem.prototype.energy):
        * LongSpider/access-nsieve.js: Added.
        (pad):
        (nsieve):
        (sieve):
        * LongSpider/bitops-3bit-bits-in-byte.js: Added.
        (fast3bitlookup):
        (TimeFunc):
        * LongSpider/bitops-bits-in-byte.js: Added.
        (bitsinbyte):
        (TimeFunc):
        * LongSpider/bitops-nsieve-bits.js: Added.
        (pad):
        (primes):
        (sieve):
        * LongSpider/controlflow-recursive.js: Added.
        (ack):
        (fib):
        (tak):
        * LongSpider/crypto-aes.js: Added.
        (Cipher):
        (SubBytes):
        (ShiftRows):
        (MixColumns):
        (AddRoundKey):
        (KeyExpansion):
        (SubWord):
        (RotWord):
        (AESEncryptCtr):
        (AESDecryptCtr):
        (escCtrlChars):
        * LongSpider/crypto-md5.js: Added.
        (hex_md5):
        (b64_md5):
        (str_md5):
        (hex_hmac_md5):
        (b64_hmac_md5):
        (str_hmac_md5):
        (md5_vm_test):
        (core_md5):
        (md5_cmn):
        (md5_ff):
        (md5_gg):
        (md5_hh):
        (md5_ii):
        (core_hmac_md5):
        (safe_add):
        (bit_rol):
        (str2binl):
        (binl2str):
        (binl2hex):
        (binl2b64):
        * LongSpider/crypto-sha1.js: Added.
        (hex_sha1):
        (b64_sha1):
        (str_sha1):
        (hex_hmac_sha1):
        (b64_hmac_sha1):
        (str_hmac_sha1):
        (sha1_vm_test):
        (core_sha1):
        (sha1_ft):
        (sha1_kt):
        (core_hmac_sha1):
        (safe_add):
        (rol):
        (str2binb):
        (binb2str):
        (binb2hex):
        (binb2b64):
        * LongSpider/date-format-tofte.js: Added.
        (arrayExists):
        (.a):
        (.A):
        (.B):
        (.d):
        (.D):
        (.F):
        (.g):
        (.G):
        (.h):
        (.H):
        (.i):
        (.j):
        (.l):
        (.L):
        (.m):
        (.M):
        (.n):
        (.O):
        (.r):
        (.S):
        (.s):
        (.t):
        (.U):
        (.W):
        (.w):
        (.Y):
        (.y):
        (.z):
        (Date.prototype.formatDate):
        * LongSpider/date-format-xparb.js: Added.
        (Date.prototype.dateFormat):
        (Date.createNewFormat):
        (Date.getFormatCode):
        (Date.parseDate):
        (Date.createParser):
        (Date.formatCodeToRegex):
        (Date.prototype.getTimezone):
        (Date.prototype.getGMTOffset):
        (Date.prototype.getDayOfYear):
        (Date.prototype.getWeekOfYear):
        (Date.prototype.isLeapYear):
        (Date.prototype.getFirstDayOfMonth):
        (Date.prototype.getLastDayOfMonth):
        (Date.prototype.getDaysInMonth):
        (Date.prototype.getSuffix):
        (String.escape):
        * LongSpider/math-cordic.js: Added.
        (FIXED):
        (FLOAT):
        (DEG2RAD):
        (cordicsincos):
        (cordic):
        * LongSpider/math-partial-sums.js: Added.
        (partial):
        * LongSpider/math-spectral-norm.js: Added.
        (A):
        (Au):
        (Atu):
        (AtAu):
        (spectralnorm):
        * LongSpider/string-base64.js: Added.
        (toBase64):
        (base64ToString):
        * LongSpider/string-fasta.js: Added.
        (rand):
        (makeCumulative):
        (fastaRepeat):
        (fastaRandom):
        * LongSpider/string-tagcloud.js: Added.
        (.Array.prototype.toJSONString):
        (.Boolean.prototype.toJSONString):
        (.Date.prototype.toJSONString):
        (.Number.prototype.toJSONString):
        (.Object.prototype.toJSONString):
        (.):

2013-06-10  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Rename region-overflow to region-fragment
        https://bugs.webkit.org/show_bug.cgi?id=117397

        Renamed -webkit-region-overflow to -webkit-region-fragment according to the new working draft
        at http://www.w3.org/TR/2013/WD-css3-regions-20130528/#the-region-fragment-property

        Reviewed by Alexander Pavlov.

        * Layout/resources/regions.css:

2013-06-05  Zan Dobersek  <zdobersek@igalia.com>

        Move MemoryInfo under window.internals
        https://bugs.webkit.org/show_bug.cgi?id=117197

        Reviewed by Ryosuke Niwa.

        * resources/runner.js: Remove the setMemoryEnabled call, it's not required anymore as the memory
        info is now accessed through window.internals and doesn't need the setting to be enabled to work.

2013-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Web Inspector: tests in PerformanceTests/inspector/ are timing out
        https://bugs.webkit.org/show_bug.cgi?id=77024

        Reviewed by Andreas Kling.

        These tests have been disabled for ages and don't conform to the standard format.

        * Skipped:
        * inspector: Removed.
        * inspector/console-300-lines.html: Removed.
        * inspector/first-open-elements.html: Removed.
        * inspector/first-open-resources.html: Removed.
        * inspector/first-open-scripts.html.broken: Removed.
        * inspector/heap-snapshot-advanced.html: Removed.
        * inspector/heap-snapshot-performance-test.js: Removed.
        * inspector/heap-snapshot.html: Removed.
        * inspector/inspector-startup-time.html: Removed.
        * inspector/network-append-30-requests.html.broken: Removed.
        * inspector/performance-test.js: Removed.
        * inspector/show-panel.html.broken: Removed.

2013-05-27  Benjamin Poulain  <benjamin@webkit.org>

        Add a balanced benchmark for QuerySelector
        https://bugs.webkit.org/show_bug.cgi?id=116811

        Reviewed by Sam Weinig.

        The goal of this benchmark is to have an overview of querySelector as typically used
        by webpages.

        It uses queries similar to what is used by popular websites and applies somewhat
        similar weighting for each type of query.

        The tree used for the queries is intentionally kept simple to ensure we measure QuerySelector
        a not purely the overhead of traversal.

        * CSS/QuerySelector.html: Added.
        * CSS/resources/query-selector.html: Added.

2013-05-18  Ryosuke Niwa  <rniwa@webkit.org>

        Add a performance test for copying
        https://bugs.webkit.org/show_bug.cgi?id=116394

        Reviewed by Andreas Kling.

        Added. We're going to skip this test by default since it's such a microbenchmark, and also because
        it currently takes 30 minutes to run. As insane as it sounds, each copy takes rouhgly 57 seconds.

        Running Interactive/CopyAll.html (1 of 1)
        RESULT Interactive: CopyAll: Time= 57618.05 ms
        median= 57135.0 ms, stdev= 1542.07271571 ms, min= 55095.0 ms, max= 60913.0 ms
        RESULT Interactive: CopyAll: JSHeap= 102811.2 bytes
        median= 103272.0 bytes, stdev= 1115.28148913 bytes, min= 100648.0 bytes, max= 103504.0 bytes
        RESULT Interactive: CopyAll: Malloc= 446408712.0 bytes
        median= 459156772.0 bytes, stdev= 20007346.3266 bytes, min= 415564040.0 bytes, max= 462011928.0 bytes
        Finished: 1766.883236 s

        * Interactive/CopyAll.html: Added.
        * Skipped:

2013-05-13  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Get rid of native-memory-snapshot in performance test
        https://bugs.webkit.org/show_bug.cgi?id=116013

        Reviewed by Andreas Kling.

        Remove native-memory-snapshot.html from PerformanceTests.

        * inspector/native-memory-snapshot.html: Removed.
        * inspector/performance-test.js:
        (initialize_TimeTracker.Timer):
        (initialize_TimeTracker.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):

2013-04-10  Benjamin Poulain  <bpoulain@apple.com>

        Mass remove all the empty directories

        Rubberstamped by Ryosuke Niwa.

        * Bindings/resources: Removed.

2013-04-02  Glenn Adams  <glenn@skynav.com>

        Need japanese line layout performance test
        https://bugs.webkit.org/show_bug.cgi?id=113811

        Reviewed by Ryosuke Niwa.

        Will be used by https://bugs.webkit.org/show_bug.cgi?id=105692 to test potential performance regression
        for Japanese (and other CJK) line break changes.

        * Layout/LineLayoutJapanese.html: Added.
        * Skipped: Skip this test by default.

2013-03-29  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Add performance tests
        https://bugs.webkit.org/show_bug.cgi?id=113303

        Reviewed by Antti Koivisto.

        Add simple performance tests for regions, without nested named flows: a region chain and a flow article.
        The regions.js script is used to generate the tests and can set the following parameters: the number of regions,
        the number of paragraphs, the regions width, height, max-height and the propability of a forced break after a paragraph.

        The tests are skipped for now. They should be enabled once the regions performance is stable enough to create a baseline.

        * Layout/RegionsAuto.html: Added. A few regions with a short article. The regions have auto-height and some
        paragraphs (80%) have forced breaks after. Stress test for the auto-height algorithm.
        * Layout/RegionsAutoMaxHeight.html: Added. A lot of regions with auto-height and max-height. Tests the impact of
        max-height on the auto-height algorithm.
        * Layout/RegionsFixed.html: Added. A lot of regions with a long article. Some paragraphs (50%) have forced breaks after.
        Stress test for the regions layout algorithm.
        * Layout/RegionsFixedShort.html: Added. A lot of short regions with a long content. Tests the impact of unforced breaks
        on the layout speed.
        * Layout/resources/regions.css: Added.
        (.articleInFlow):
        (.articleNone):
        (.region):
        (.contentParagraph):
        (.breakAfter):
        (.regionContainer):
        * Layout/resources/regions.js: Added.
        (.):
        * Skipped:

2013-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Add a performance tests for selecting all content in a document
        https://bugs.webkit.org/show_bug.cgi?id=113358

        Reviewed by Levi Weintraub.

        Add a performance test for selecting all. We wait for paint to happen by setTimeout(~, 0).

        Example outputs:
            RESULT Interactive: SelectAll: Time= 652.6 ms
            median= 644.5 ms, stdev= 54.6177144967 ms, min= 599.0 ms, max= 773.0 ms

            RESULT Interactive: SelectAll: Time= 654.4 ms
            median= 633.5 ms, stdev= 55.9223145368 ms, min= 600.0 ms, max= 769.0 ms

            RESULT Interactive: SelectAll: Time= 657.9 ms
            median= 640.0 ms, stdev= 54.1420159833 ms, min= 604.0 ms, max= 774.0 ms

        * Interactive/SelectAll.html: Added.
        * Skipped:

2013-03-19  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Fix heap profiler performance tests.
        https://bugs.webkit.org/show_bug.cgi?id=112701

        Reviewed by Yury Semikhatsky.

        The tests were broken by profile types refactoring.

        * inspector/heap-snapshot-performance-test.js:
        (test.performanceTest.step0):
        (test.performanceTest.step1):

2013-03-05  Eric Seidel  <eric@webkit.org>

        Add html-parser-threaded perf test now that the threaded parser is enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=111200

        Reviewed by Ryosuke Niwa.

        The old srcdoc test no longer triggers the threaded parser due to compatibility fixes.

        * Parser/html-parser-threaded.html: Renamed from PerformanceTests/Parser/html-parser-srcdoc.html.
        * Skipped: Unfortunately this new test is still skipped too.

2013-03-04  Eric Seidel  <eric@webkit.org>

        Add PerformanceTest for document startup via iframe append/remove
        https://bugs.webkit.org/show_bug.cgi?id=111389

        Reviewed by Kentaro Hara.

        We'd like pages with lots of iframes to be fast.
        This test shows that at least for V8/Chromium we spend
        all our time booting v8.

        On my 32-core linux machine I see about 70 runs/sec in
        Release and 5 runs/sec in Debug.

        * DOM/iframe-append-remove.html: Added.

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Some perf. tests have variances that differ greatly between runs
        https://bugs.webkit.org/show_bug.cgi?id=97510

        Reviewed by Benjamin Poulain.

        In order to control the number of iterations and processes to use from run-perf-tests, always use 20
        iterations on all tests except Dromaeo, where even doing 5 iterations is prohibitively slow, by default.
        Without this change, it'll become extremely hard for us to tweak the number of iterations and processes
        to use from run-perf-tests.

        * Animation/balls.html:
        * DOM/DOMTable.html:
        * DOM/resources/dom-perf.js:
        (runBenchmarkSuite.PerfTestRunner.measureTime):
        * Dromaeo/resources/dromaeorunner.js:
        * Layout/floats_100_100.html:
        * Layout/floats_100_100_nested.html:
        * Layout/floats_20_100.html:
        * Layout/floats_20_100_nested.html:
        * Layout/floats_2_100.html:
        * Layout/floats_2_100_nested.html:
        * Layout/floats_50_100.html:
        * Layout/floats_50_100_nested.html:
        * Layout/subtree-detaching.html:
        * Parser/html5-full-render.html:
        * SVG/SvgHitTesting.html:
        * resources/runner.js:
        * resources/results-template.html:

2013-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Use perf.webkit.org JSON format in results page
        https://bugs.webkit.org/show_bug.cgi?id=110842

        Reviewed by Benjamin Poulain.

        Updated the results page template to use the new JSON format.

        Since new JSON format doesn't contain statistics such as stdev and min, added statistics.js to compute
        these values. Also use 95% percentile confidence interval instead of standard deviation in various places.

        * resources/results-template.html: Added statistics.js as dependency.
        (TestResult): Updated to take a metric instead of its test. Replaced stdev() with confidenceIntervalDelta()
        now that we have a fancy Statistics class.

        (TestRun.webkitRevision):
        (PerfTestMetric): Renamed from PerfTest since this object now encapsulates each measurement (such as time,
        JS heap, and malloc) in test. Also added a conversion table from a metric name to a unit since new format
        doesn't contain units.
        (PerfTestMetric.name): Updated to compute the full metric name from test name and metric name, matching
        the old behavior.
        (PerfTestMetric.isMemoryTest): Explicitly look for 'JSHeap' and 'Malloc' tests.
        (PerfTestMetric.smallerIsBetter):

        (attachPlot): Deleted the code to deal with tests that don't provide individual iteration measurement
        since such tests no longer exist. Also fixed up the code compute y-axis range.

        (createTableRow.markupForRun): Updated to use confidenceIntervalDelta() instead of stdev().

        (init.addTests): Added. Recursively add metrics.

        * resources/statistics.js: Added. Imported from perf.webkit.org.
        (Statistics.max):
        (Statistics.min):
        (Statistics.sum):
        (Statistics.squareSum):
        (Statistics.sampleStandardDeviation):
        (Statistics.supportedConfidenceLevels):
        (Statistics.confidenceIntervalDelta):
        (Statistics.confidenceInterval):

2013-02-11  Alexei Filippov  <alph@chromium.org>

        Web Inspector: Split Profiler domain in protocol into Profiler and HeapProfiler
        https://bugs.webkit.org/show_bug.cgi?id=108653

        Reviewed by Yury Semikhatsky.

        Currently CPU and heap profilers share the same domain 'Profiler' in the protocol.
        In fact these two profile types have not too much in common. So put each into its own domain.
        It should also help when Profiles panel gets split into several tools.
        This is the phase 1 which adds InspectorHeapProfilerAgent but doesn't
        change the original InspectorProfilerAgent.

        * inspector/heap-snapshot-performance-test.js:
        (test.performanceTest.cleanup):

2013-02-05  Dominik Röttsches  <dominik.rottsches@intel.com>

        Add a performance test for arabic line breaking
        https://bugs.webkit.org/show_bug.cgi?id=108948

        Reviewed by Eric Seidel.

        Adding a perfomance test based to exercise the complex
        font path used in rendering arabic script.

        * Layout/ArabicLineLayout.html: Added.
        * Skipped: New test skipped by default as per Ryosuke's request.

2013-01-23  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: some measurements are missing in PerformanceTests/inspector/heap-*.html
        https://bugs.webkit.org/show_bug.cgi?id=107687

        Reviewed by Pavel Feldman.

        * inspector/heap-snapshot-performance-test.js: override methods on JSHeapSnapshot instead
        of HeapSnapshot, otherwise overrides from JSHeapSnapshot will rule.

2013-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        Skip DOM/TraverseChildNodes.html as intended in r140070.

        * Skipped:

2013-01-17  Dominic Cooney  <dominicc@chromium.org>

        Unreviewed, re-land r140051.

        I overzealously rolled this out; the test was intended to be
        skipped, but was not skipped because of a typo in Skipped. See
        <https://bugs.webkit.org/show_bug.cgi?id=107210>

        * Parser/html-parser-srcdoc.html: Added.
        * Skipped: Big-P Parser.

2013-01-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140051.
        http://trac.webkit.org/changeset/140051
        https://bugs.webkit.org/show_bug.cgi?id=107210

        html-parser-srcdoc.html failing on Chromium Linux Perf and
        Chromium Mac Perf with a lot of error spew about blocked
        script execution in 'about:srcdoc' (Requested by dominicc on
        #webkit).

        * Parser/html-parser-srcdoc.html: Removed.
        * Skipped:

2013-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Remove NodeListsNodeData when it's no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=107074

        Reviewed by Darin Adler.

        Added a micro benchmark to see the benefit of removing NodeListsNodeData.
        The test traverses all elements in the html5 specification page and accesses childNodes.

        Don't enable this test for now since it's really a micro benchmark specifically
        designed to test this patch.

        * DOM/TraverseChildNodes.html: Added.
        * Skipped: Don't enable newly added test by default.
        * resources/results-template.html: Compare against the unscaled unit (e.g. "bytes") as
        opposed to scaled units such as "K bytes".
        * resources/runner.js:
        (.start): Moved the code to call currentTest.setup from measureRunsPerSecondOnce so that
        it'll be ran for all test types, namely of PerfTestRunner.measureTime.
        (.measureRunsPerSecondOnce):

2013-01-17  Eric Seidel  <eric@webkit.org>

        Add a version of the html-parser benchmark which uses srcdoc instead of document.write so it tests the threaded parser
        https://bugs.webkit.org/show_bug.cgi?id=107158

        Reviewed by Ryosuke Niwa.

        Currently this test even opts-in to the threaded parser if available.
        We'll remove that line when the threaded parser becomes default or goes away.

        * Parser/html-parser-srcdoc.html: Added.

2013-01-16  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        inconsistency in drawImage with target rect negative dimensions.
        https://bugs.webkit.org/show_bug.cgi?id=100026

        Reviewed by Dean Jackson.

        Create a drawImage performance test. There is no significative change
        in performance: 27144.6851528 runs/s without the patch; 27153.517612
        runs/s with the patch. Test is currently skipped.

        * Canvas/drawimage.html: Added.
        * Skipped:

2013-01-15  Dominic Cooney  <dominicc@chromium.org>

        Allow zero values as results from the runFunction.
        https://bugs.webkit.org/show_bug.cgi?id=102500

        Reviewed by Kentaro Hara.

        DOM/DOMWalk.js fails on the Chromium Win perf bot because one or
        more parts of the test usually return zero at some point.

        * resources/runner.js: Accept merely non-negative results.

2012-12-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: rename distanceToWindow to distance
        https://bugs.webkit.org/show_bug.cgi?id=105823

        Reviewed by Pavel Feldman.

        Updated heap profiler performance test after renaming distanceToWindow to distance.

        * inspector/heap-snapshot-performance-test.js:

2012-12-18  Hayato Ito  <hayato@chromium.org>

        Use element.webkitCreateShadowRoot instead of WebKitShadowRoot in PerformanceTests.
        https://bugs.webkit.org/show_bug.cgi?id=105256

        Reviewed by Dimitri Glazkov.

        WebKitShadowRoot constructor was deleted in favor of element.webkitCreateShadowRoot().

        * ShadowDOM/ChangingClassNameShadowDOM.html:
        * ShadowDOM/ChangingSelect.html:
        * ShadowDOM/ContentReprojection.html:
        * ShadowDOM/DistributionWithMultipleShadowRoots.html:
        * ShadowDOM/LargeDistributionWithLayout.html:
        * ShadowDOM/MultipleInsertionPoints.html:
        * ShadowDOM/ShadowReprojection.html:
        * ShadowDOM/SmallDistributionWithLayout.html:

2012-12-17  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] LargeDistributionWithLayout.html should be updated
        https://bugs.webkit.org/show_bug.cgi?id=105242

        Reviewed by Ryosuke Niwa.

        Since this test was written when distribution took O(N^2). However, now it's almost O(N), so this test finishes
        in very short time. We should convert it unit to runs/s.

        This test contains a some error to cause test failure, e.g. using obsolete API, so they also should be fixed.

        * ShadowDOM/LargeDistributionWithLayout.html:

2012-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        [chromium perf] DOM/DOMWalk.html failures
        https://bugs.webkit.org/show_bug.cgi?id=104866

        Reviewed by Eric Seidel.

        Use PerfTestRunner.now which in turn uses window.performance.now() when it's available.

        * DOM/resources/dom-perf.js:
        (Interval.start):
        (Interval.stop):
        (BenchmarkSuite.prototype.RunSingle):

2012-12-05  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Performance tests for ShadowDOM distribution
        https://bugs.webkit.org/show_bug.cgi?id=103617

        Reviewed by Dimitri Glazkov.

        We would like to measure ShadowDOM distribution performance in various cases.
        In this patch, we add performance tests for several distribution patterns.

        * ShadowDOM/ContentReprojection.html: Added.
        * ShadowDOM/DistributionWithMultipleShadowRoots.html: Added.
        * ShadowDOM/LargeDistributionWithLayout.html: Added.
        * ShadowDOM/MultipleInsertionPoints.html: Added.
        * ShadowDOM/ShadowReprojection.html: Added.
        * ShadowDOM/SmallDistributionWithLayout.html: Added.

2012-12-05  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Performance tests of distribution for changing className
        https://bugs.webkit.org/show_bug.cgi?id=103612

        Reviewed by Dimitri Glazkov.

        We would like to measure ShadowDOM performance and compare it to the similar functional HTML without using ShadowDOM.
        In this patch, we add a case when classNames of distributed elemeents are changed.

        * ShadowDOM/ChangingClassName.html: Added.
        * ShadowDOM/ChangingClassNameShadowDOM.html: Added.

2012-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Dromaeo should report individual test result
        https://bugs.webkit.org/show_bug.cgi?id=99800

        Reviewed by Eric Seidel.

        Made one small modification to Droameo's webrunner.js so that it reports individual runs/s values
        for each subtest. This allows us to compute the aggregated run/s for each iteration like other
        performance tests.

        Also stop measuring memory usage in Dromaeo tests because some Dromaeo tests (e.g. jslib-modify-jquery)
        have unrealistic memory usage, and measuring them at the time of teardown doesn't make much sense.

        * Animation/balls.html: Fixed typo: measureValueAync.
        * Dromaeo/resources/dromaeo/web/webrunner.js:

        * Dromaeo/resources/dromaeorunner.js:
        (DRT.setup): Call prepareToMeasureValuesAsync so that DRT.teardown can use meausreValueAsync, and log
        "Running 5 times". Since the log container will be inserted before iframe, we need to explicitly insert
        the iframe as the first child of the body element to avoid logs from affecting the iframe's position.
        Also specify the number of iterations by calling PerfTestRunner.iterationCount() so that we may adjust
        the number of iterations in PerfTestRunner.

        (DRT.progress): Log individual measurement for each subtest.
        (DRT.teardown): Compute the aggregated result for each iteration, and log them using measureValueAsync.

        * resources/runner.js:
        (PerfTestRunner.logStatistics): Merged printStatistics since it's no longer needed after r131638.
        (PerfTestRunner): Removed getAndPrintMemoryStatistics since it was used only in Dromaeo tests but
        we no longer measure memory usage in Dromaeo tests.

        (start): Increment completedRuns from -1 to 0 for Dromaeo tests where we don't want to ignore the initial
        measurement. Note that ignoreWarmUpAndLog ignores the measurements for which completedRuns is negative.

        (ignoreWarmUpAndLog): We don't measure memory usage in Dromaeo tests. See above.
        (PerfTestRunner.iterationCount): Added. This abstraction allows us to auto-adjust the number of iterations from
        run-perf-tests in near future.
        (PerfTestRunner.measureValueAsync): Renamed from measureValueAync.

2012-11-29  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Performance tests of distribution for changing select attribute
        https://bugs.webkit.org/show_bug.cgi?id=103611

        Reviewed by Hajime Morita.

        We would like to measure ShadowDOM performance and compare it to the similar functional HTML without using ShadowDOM.
        In this patch, we add a case when select attribute of HTMLContentElement is changed.

        * ShadowDOM/ChangingSelect.html: Added.
        * ShadowDOM/ChangingSelectWithoutShadow.html: Added.
        * Skipped:

2012-11-19  Shinya Kawanaka  <shinyak@chromium.org>

        Changing id, className, or attribute should invalidate distribution
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Reviewed by Dimitri Glazkov.

        Added test code to modify id/class/attribute.

        * DOM/ModifyAttribute.html: Added.
        * DOM/resources/dom-perf/modify-attribute.js: Added.
        (ModifyAttribute.CreateElementToSetUp):
        (ModifyAttribute.ModifyId):
        (ModifyAttribute.ModifyClass):
        (ModifyAttribute.ModifyTitle):

2012-11-14  Ryosuke Niwa  <rniwa@webkit.org>

        runCount in runner.js should be renamed to iterationCount
        https://bugs.webkit.org/show_bug.cgi?id=102208

        Reviewed by Tony Chang.

        Prior to this patch, there were terminology confusions between "runs" and "iterations".
        The term "run" should refer to running a performance test once, and "iteration" should
        refer to one measurement in the test. i.e. Executing run-perf-should once will result in
        a single "run" of performance tests and each test may execute multiple "iterations"
        to complete the run.

        Unfortunately, we still overload the meaning of "runs" in "runs/s" (is "function calls/s")
        but that could be addressed in a separate patch.

        * Animation/balls.html:
        * DOM/DOMTable.html:
        * DOM/resources/dom-perf.js:
        * Layout/floats_100_100.html:
        * Layout/floats_100_100_nested.html:
        * Layout/floats_20_100.html:
        * Layout/floats_20_100_nested.html:
        * Layout/floats_2_100.html:
        * Layout/floats_2_100_nested.html:
        * Layout/floats_50_100.html:
        * Layout/floats_50_100_nested.html:
        * Layout/subtree-detaching.html:
        * Parser/html5-full-render.html:
        * SVG/SvgHitTesting.html:
        * resources/runner.js:

2012-11-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r134367.
        http://trac.webkit.org/changeset/134367
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Speculative rollout, could have cause Dromaeo setAttribute
        perf regression.

        * DOM/ModifyAttribute.html: Removed.
        * DOM/resources/dom-perf/modify-attribute.js: Removed.

2012-11-12  Shinya Kawanaka  <shinyak@chromium.org>

        Changing id, className, or attribute should invalidate distribution
        https://bugs.webkit.org/show_bug.cgi?id=100738

        Reviewed by Dimitri Glazkov.

        Added test code to modify id/class/attribute.

        * DOM/ModifyAttribute.html: Added.
        * DOM/resources/dom-perf/modify-attribute.js: Added.
        (ModifyAttribute.CreateElementToSetUp):
        (ModifyAttribute.ModifyId):
        (ModifyAttribute.ModifyClass):
        (ModifyAttribute.ModifyTitle):

2012-11-06  Adam Barth  <abarth@webkit.org>

        DOMImplementation should use ScriptWrappable
        https://bugs.webkit.org/show_bug.cgi?id=101279

        Reviewed by Eric Seidel.

        This simple PerformanceTest measure how quickly we can access
        document.implementation. The goal of this performance test is just to
        validate that using ScriptWrappable actually makes the bindings faster.

        * Bindings/document-implementation.html: Added.

2012-11-05  Geoffrey Garen  <ggaren@apple.com>

        WebKit should have performance tests for book chapter reflow
        https://bugs.webkit.org/show_bug.cgi?id=101271

        Reviewed by Dan Bernstein.

        I grabbed a book chapter from the Project Gutenberg front page:

        * Layout/chapter-reflow-once.html: Added.
        * Layout/chapter-reflow-thrice.html: Added.
        * Layout/chapter-reflow-twice.html: Added.
        * Layout/chapter-reflow.html: Added.

        I also created a torture-test random text generator:

        * Layout/chapter-reflow-once-random.html: Added.

2012-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #7 (last)
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #7 (last) commit of the whole patch.

        * PageLoad: Removed.
        * PageLoad/svg: Removed.
        * PageLoad/svg/LICENSES: Removed.
        * PageLoad/svg/files: Removed.
        * PageLoad/svg/files/33041-Samurai.svg: Removed.
        * PageLoad/svg/files/42450-under the see.svg: Removed.
        * PageLoad/svg/files/world-iso.svg: Removed.
        * PageLoad/svg/svg.pltsuite: Removed.
        * SVG/Samurai.html: Added.
        * SVG/UnderTheSee.html: Added.
        * SVG/WorldIso.html: Added.
        * SVG/resources/LICENSES: Copied from PerformanceTests/PageLoad/svg/LICENSES.
        * SVG/resources/Samurai.svg: Copied from PerformanceTests/PageLoad/svg/files/33041-Samurai.svg.
        * SVG/resources/UnderTheSee.svg: Copied from PerformanceTests/PageLoad/svg/files/42450-under%20the%20see.svg.
        * SVG/resources/WorldIso.svg: Copied from PerformanceTests/PageLoad/svg/files/world-iso.svg.
        * SVG/resources/svg.pltsuite: Copied from PerformanceTests/PageLoad/svg/svg.pltsuite.
        * Skipped: Rename the files on the skipped list also.

2012-10-26  Eric Seidel  <eric@webkit.org>

        Add a microbenchmark for Hindi (complex-text) line-layout
        https://bugs.webkit.org/show_bug.cgi?id=100024

        Reviewed by Ryosuke Niwa.

        I wrote this to make sure that we don't regress line-breaking performance
        for the complex-text codepath. This test has shown me that TOT is
        already 5% slower than Safari 6.0.1 here. :(

        * Layout/hindi-line-layout.html: Added.

2012-10-26  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #6
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #6 commit of the whole patch.

        * PageLoad/svg/files/gearflowers.svg: Removed.
        * PageLoad/svg/files/hereGear4.svg: Removed.
        * PageLoad/svg/files/worldcup.svg: Removed.
        * SVG/GearFlowers.html: Added.
        * SVG/HereGear.html: Added.
        * SVG/Worldcup.html: Added.
        * SVG/resources/GearFlowers.svg: Copied from PerformanceTests/PageLoad/svg/files/gearflowers.svg.
        * SVG/resources/HereGear.svg: Copied from PerformanceTests/PageLoad/svg/files/hereGear4.svg.
        * SVG/resources/Worldcup.svg: Copied from PerformanceTests/PageLoad/svg/files/worldcup.svg.
        * Skipped: Rename the files on the skipped list also.

2012-10-26  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #5
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #5 commit of the whole patch.

        * PageLoad/svg/files/Harvey_Rayner.svg: Removed.
        * PageLoad/svg/files/Sierpinski_carpet_6.svg: Removed.
        * PageLoad/svg/files/mtsthelens.svg: Removed.
        * PageLoad/svg/files/mtsthelens0.jpg: Removed.
        * SVG/HarveyRayner.html: Added.
        * SVG/MtSaintHelens.html: Added.
        * SVG/SierpinskiCarpet.html: Added.
        * SVG/resources/HarveyRayner.svg: Copied from PerformanceTests/PageLoad/svg/files/Harvey_Rayner.svg.
        * SVG/resources/MtSaintHelens.svg: Copied from PerformanceTests/PageLoad/svg/files/mtsthelens.svg.
        * SVG/resources/SierpinskiCarpet.svg: Copied from PerformanceTests/PageLoad/svg/files/Sierpinski_carpet_6.svg.
        * SVG/resources/mtsthelens0.jpg: Copied from PerformanceTests/PageLoad/svg/files/mtsthelens0.jpg.
        * Skipped: Rename the files on the skipped list also.

2012-10-25  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #4
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #4 commit of the whole patch.

        * PageLoad/svg/files/france.svg: Removed.
        * PageLoad/svg/files/francobollo_gnome_ezechi_02.svg: Removed.
        * SVG/France.html: Added.
        * SVG/FrancoBolloGnomeEzechi.html: Added.
        * SVG/resources/France.svg: Copied from PerformanceTests/PageLoad/svg/files/france.svg.
        * SVG/resources/FrancoBolloGnomeEzechi.svg: Copied from PerformanceTests/PageLoad/svg/files/francobollo_gnome_ezechi_02.svg.
        * Skipped: Rename the files on the skipped list also.

2012-10-25  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #3
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #3 commit of the whole patch.

        * PageLoad/svg/files/42470-flower_from_my_garden_v2.svg: Removed.
        * PageLoad/svg/files/44057-drops on a blade.svg: Removed.
        * PageLoad/svg/files/deb9frac1.svg: Removed.
        * PageLoad/svg/files/food_leif_lodahl_01.svg: Removed.
        * SVG/Debian.html: Added.
        * SVG/DropsOnABlade.html: Added.
        * SVG/FlowerFromMyGarden.html: Added.
        * SVG/FoodLeifLodahl.html: Added.
        * SVG/resources/Debian.svg: Copied from PerformanceTests/PageLoad/svg/files/deb9frac1.svg.
        * SVG/resources/DropsOnABlade.svg: Copied from PerformanceTests/PageLoad/svg/files/44057-drops%20on%20a%20blade.svg.
        * SVG/resources/FlowerFromMyGarden.svg: Copied from PerformanceTests/PageLoad/svg/files/42470-flower_from_my_garden_v2.svg.
        * SVG/resources/FoodLeifLodahl.svg: Copied from PerformanceTests/PageLoad/svg/files/food_leif_lodahl_01.svg.

2012-10-24  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #2
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #2 commit of the whole patch.

        * PageLoad/svg/files/cacuts_01.svg: Removed.
        * PageLoad/svg/files/cowboy.svg: Removed.
        * PageLoad/svg/files/crawfish2_ganson.svg: Removed.
        * SVG/Cactus.html: Added.
        * SVG/Cowboy.html: Added.
        * SVG/CrawFishGanson.html: Added.
        * SVG/resources/Cactus.svg: Copied from PerformanceTests/PageLoad/svg/files/cacuts_01.svg.
        * SVG/resources/Cowboy.svg: Copied from PerformanceTests/PageLoad/svg/files/cowboy.svg.
        * SVG/resources/CrawFishGanson.svg: Copied from PerformanceTests/PageLoad/svg/files/crawfish2_ganson.svg.
        * Skipped: Remove az-lizard_benji_park_01.svg from the skipped list.

2012-10-24  Zoltan Horvath  <zoltan@webkit.org>

        Turn PageLoad tests into simple performancetests, commit #1
        https://bugs.webkit.org/show_bug.cgi?id=99899

        Reviewed by Ryosuke Niwa.

        We cannot provide an elegant way to measure the memory consumption of the PageLoad tests, but we can turn them into simple
        performance tests and measure their memory footprint and performance that way. This change moves and renames the related files
        to their new location and adds html/js wrappers for them.

        This is the #1 commit of the whole patch.

        * PageLoad/svg/files/az-lizard_benji_park_01.svg: Removed.
        * PageLoad/svg/files/bamboo_01.svg: Removed.
        * SVG/AzLizardBenjiPark.html: Added.
        * SVG/Bamboo.html: Added.
        * SVG/resources: Added.
        * SVG/resources/AzLizardBenjiPark.svg: Copied from PerformanceTests/PageLoad/svg/files/az-lizard_benji_park_01.svg.
        * SVG/resources/Bamboo.svg: Copied from PerformanceTests/PageLoad/svg/files/bamboo_01.svg.

2012-10-24  Zoltan Horvath  <zoltan@webkit.org>

        REGRESSION(r131982): Skip SVG/SvgNestedUse.html performancetest since it is crashing
        https://bugs.webkit.org/show_bug.cgi?id=100262

        Unreviewed.

        Skip until proper fix.

        * Skipped: Add SVG/SvgNestedUse.html

2012-10-23  Zoltan Horvath  <zoltan@webkit.org>

        Store the loaded file locally in measurePageLoadTime
        https://bugs.webkit.org/show_bug.cgi?id=100172

        Reviewed by Csaba Osztrogonác.

        Store the loaded file as a local variable instead of attaching it to the test object.
        Handle chunkSize inside test.run.

        * resources/runner.js:
        (.):

2012-10-23  Zoltan Horvath  <zoltan@webkit.org>

        Add measurePageLoadTime function to PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=100029

        Reviewed by Ryosuke Niwa.

        Adopt chunk based loading logic from html5-full-render.html into measurePageLoadTime function,
        this is needed to measure the performance and the memory consumption of the PageLoadTests as
        we do it for all other performancetests.

        * Parser/html5-full-render.html: Move the behavior to runner.js.
        * resources/runner.js:
        (.): Add measurePageLoadTime function.

2012-10-22  Adam Barth  <abarth@webkit.org>

        [V8] Vastly simplify V8GCController's NodeVisitor
        https://bugs.webkit.org/show_bug.cgi?id=99884

        Reviewed by Kentaro Hara.

        Adds some performance tests for the garbage collector.

        * Bindings/gc-forest.html: Added.
        * Bindings/gc-mini-tree.html: Added.
        * Bindings/gc-tree.html: Added.

2012-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Bump up the number of iterations of html5-full-render to 5
        https://bugs.webkit.org/show_bug.cgi?id=99657

        Reviewed by Andreas Kling.

        Now that html5-full-render.html runs in less than 15 seconds after r131553,
        we can afford to get 5 instead of 2 samples.

        * Parser/html5-full-render.html:

2012-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rename PerfTestRunner.runPerSecond to PerfTestRunner.measureRunsPerSecond for consistency
        https://bugs.webkit.org/show_bug.cgi?id=99642

        Reviewed by Dirk Pranke.

        Renamed the method.

        * Bindings/append-child.html:
        * Bindings/create-element.html:
        * Bindings/event-target-wrapper.html:
        * Bindings/first-child.html:
        * Bindings/get-attribute.html:
        * Bindings/get-element-by-id.html:
        * Bindings/get-elements-by-tag-name.html:
        * Bindings/id-getter.html:
        * Bindings/id-setter.html:
        * Bindings/insert-before.html:
        * Bindings/node-list-access.html:
        * Bindings/scroll-top.html:
        * Bindings/set-attribute.html:
        * Bindings/typed-array-construct-from-array.html:
        * Bindings/typed-array-construct-from-same-type.html:
        * Bindings/typed-array-construct-from-typed.html:
        * Bindings/typed-array-set-from-typed.html:
        * Bindings/undefined-first-child.html:
        * Bindings/undefined-get-element-by-id.html:
        * Bindings/undefined-id-getter.html:
        * CSS/CSSPropertySetterGetter.html:
        * CSS/CSSPropertyUpdateValue.html:
        * CSS/PseudoClassSelectors.html:
        * DOM/textarea-dom.html:
        * DOM/textarea-edit.html:
        * Interactive/resources/window-resize.js:
        * Layout/flexbox-column-nowrap.html:
        * Layout/flexbox-column-wrap.html:
        * Layout/flexbox-row-nowrap.html:
        * Layout/flexbox-row-wrap.html:
        * Layout/line-layout.html:
        * Parser/css-parser-yui.html:
        * Parser/innerHTML-setter.html:
        * Parser/query-selector-deep.html:
        * Parser/query-selector-first.html:
        * Parser/query-selector-last.html:
        * Parser/simple-url.html:
        * Parser/textarea-parsing.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * SVG/SvgNestedUse.html:
        * resources/runner.js:

2012-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Performance test should support asynchronous tests
        https://bugs.webkit.org/show_bug.cgi?id=95668

        Reviewed by Dirk Pranke.

        Added PerfTestRunner.prepareToMeasureValuesAsync and PerfTestRunner.measureValueAsync,
        and deployed it in Animation/balls.

        * Animation/balls.html:
        * resources/runner.js:

2012-10-16  Elliott Sprehn  <esprehn@chromium.org>

        html5-full-render.html test uses substring but meant substr
        https://bugs.webkit.org/show_bug.cgi?id=99495

        Reviewed by Adam Barth.

        This test intended to chunk up the HTML5 spec into chunks of 500k chars, but used
        substring(to,from) instead of substr(from,length) so it actually loaded 5x more
        content than was in the HTML5 spec.

        * Parser/html5-full-render.html:

2012-10-11  James Simonsen  <simonjam@chromium.org>

        unprefix window.performance.webkitNow()
        https://bugs.webkit.org/show_bug.cgi?id=88278

        Reviewed by Tony Gentilcore.

        * resources/runner.js: Bind to proper object to avoid invalid invocation errors.

2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Skip Layout/subtree-detaching.html temporarily as it's very noisy and
        takes 112s to run on Chromium Mac. This is tracked by the bug 98708.

        * Skipped:

2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Perf. test results page is broken when runs have different sets of tests
        https://bugs.webkit.org/show_bug.cgi?id=98691

        Reviewed by Daniel Bates.

        Add "missing" columns for tests that are missing some runs.

        Also fix regressions from the previous patch:
        - Make reference run switch work again
        - Load jquery plugins from the remote server when the jquery is loaded from the remote server.

        * resources/results-template.html:

2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Perf test pesults page takes forever to load on a machine with a slow Internet connection
        https://bugs.webkit.org/show_bug.cgi?id=98561

        Reviewed by Ojan Vafai.

        Try loading jquery both locally and remotely, and use the same method to load the remaining
        jquery plugins when either one succeeds.

        * resources/results-template.html:

2012-10-04  Hayato Ito  <hayato@chromium.org>

        [Refactoring] Introduce a traversal strategy in SelectorChecker
        https://bugs.webkit.org/show_bug.cgi?id=97298

        Reviewed by Antti Koivisto.

        Introduces querySelector() performance tests to check SelectorChecker performance.

        * CSS/PseudoClassSelectors.html: Added.

2012-10-03  Philip Rogers  <pdr@google.com>

        Force GC between PageLoad tests.
        https://bugs.webkit.org/show_bug.cgi?id=98203

        Reviewed by Ryosuke Niwa.

        Previously, our PageLoad PerfTests had multi-modal distributions,
        typically with a small cluster at 1-2x the median. This turned out
        to be caused by not garbage collecting between tests!

        This patch adds a new file, force-gc.html, and loads this file between
        PageLoad tests to force a GC. I manually verified that this cleans up
        our perf test outliers.

        * resources/force-gc.html: Added.

2012-10-03  Julien Chaffraix  <jchaffraix@webkit.org>

        Add a performance test for subtree detaching
        https://bugs.webkit.org/show_bug.cgi?id=98281

        Reviewed by Eric Seidel.

        The new test tries to stress detaching on a heavy subtree (2 levels deep but with 1,000 nodes per level).
        We set display: none on the root and measure the time it takes to update the tree. Note that we will also
        measure the time taken by recalcStyle and relayout but I don't think we can avoid that.

        * Layout/subtree-detaching.html: Added.

2012-10-02  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r130135. Dromaeo tests only report single memory value,
        and computeStatistics should report variance as 0 in such cases.

        * resources/runner.js:

2012-10-02  Philip Rogers  <pdr@google.com>

        Fix PerfTest standard deviation calculation.
        https://bugs.webkit.org/show_bug.cgi?id=98115

        Reviewed by Ryosuke Niwa.

        Previously our standard deviation calculation was incorrect. This patch
        updates perftest.py's algorithm to calculate the sample standard deviation
        (with Bessel's correction) using Knuth's online algorithm:
        http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm
        An existing test has been modified to prove our new results.

        This patch also updates runner.js to use Bessel's correction in
        its sample standard deviation calculation, which is more accurate
        for small sample sizes.

        Additionally, runner.js has been modified to not calculate
        the 'sum' statistic, which was not very useful.

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):

2012-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner: Move all functions into the closure and always use double quotation for string literals
        https://bugs.webkit.org/show_bug.cgi?id=98093

        Reviewed by Ojan Vafai.

        Move all methods of PerfTestRunner into the closure that defines it.
        Also always use double quotations for string literals for consistency.

        * resources/runner.js:

2012-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        Encapsulate private properties in PerfTestRunner better
        https://bugs.webkit.org/show_bug.cgi?id=97833

        Reviewed by Ojan Vafai.

        This patch moves "private" methods and properties of PerfTestRunner into a closure so that they're
        inaccssible from outside. Also catch exceptions from test.run, test.done, and other runner code
        to ensure we call notifyDone() even if we broke tests. Otherwise DRT will timeout and we end up
        waiting for 10 minutes per each broken test on bots.

        * resources/runner.js:
        (PerfTestRunner.gc):
        (logInDocument): Extracted from PerfTestRunner.log.
        (PerfTestRunner.log): Moved.
        (logFatalError): Added.
        (start): Renamed from PerfTestRunner._start.
        (scheduleNextRun): Extracted from PerfTestRunner._runLoop. Also catch any exceptions that happen
        in the runner and ignoreWarmUpAndLog so that we don't end up timing out. We call logFatalError in
        such cases, which in turn ensures notifyDone() is called.
        (ignoreWarmUpAndLog): Renamed from PerfTestRunner._ignoreWarmUpAndLog.
        (finish): Extracted from PerfTestRunner._runLoop.
        (PerfTestRunner.measureTime): Moved. The initialization of runCount is moved into start().
        (measureTimeOnce): Renamed from PerfTestRunner._measureTimeOnce.
        (PerfTestRunner.runPerSecond): Moved. Ditto about runCount.
        (measureRunsPerSecondOnce): Renamed from PerfTestRunner._measureRunsPerSecondOnce.
        (callRunAndMeasureTime): Renamed from PerfTestRunner._perSecondRunnerIterator.

2012-10-01  Florin Malita  <fmalita@chromium.org>

        Add a performance test for nested <use> elements
        https://bugs.webkit.org/show_bug.cgi?id=98047

        Reviewed by Ryosuke Niwa.

        Currently at ~5 runs per second on my workstation, but should go up significantly (100+)
        after landing a fix for https://bugs.webkit.org/show_bug.cgi?id=97905.

        * SVG/SvgNestedUse.html: Added.

2012-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Add back test.runCount for runPerSecond as it's used by tests in fast/harness/perftests.

        * resources/runner.js:
        (PerfTestRunner.runPerSecond):

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r129824.

        * DOM/resources/dom-perf.js:
        (runBenchmarkSuite):

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused features and reduce code duplications in PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=97852

        Reviewed by Kentaro Hara.

        Made the following refactoring changes:
        - Remove PerfTestRunner.info since it's never used.
        - Moved the js heap/malloc related functions up to where they belong.
        - Moved the initialization of _callsPerIteration, _test, and -description into _start,
          and stopped initializing _runFunction and _doneFunction since both test times now
          use _test object.
        - Made _measureTimeOnce and _measureRunsPerSecondOnce return the measured value
          instead of calling ignoreWarmUpAndLog and _runLoop to share the code; they're now
          called in _measureRunsPerSecondOnce.

        * resources/runner.js:
        (PerfTestRunner.storeHeapResults): Moved.
        (PerfTestRunner.getUsedMallocHeap): Moved.
        (PerfTestRunner.getUsedJSHeap): Moved.
        (PerfTestRunner.getAndPrintMemoryStatistics): Moved.
        (PerfTestRunner._scheduleNextMeasurementOrNotifyDone): Renamed from _runLoop. Calls
        ignoreWarmUpAndLog and schedules the next call.
        (PerfTestRunner._measureTimeOnce): Renamed from _runner.
        (PerfTestRunner._start): Renamed from initAndStartLoop.
        (PerfTestRunner.measureTime):
        (PerfTestRunner.runPerSecond):
        (PerfTestRunner._measureRunsPerSecondOnce): Renamed from _measureRunsPerSecondOnce.
        (PerfTestRunner._perSecondRunnerIterator):

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner.run should take an object
        https://bugs.webkit.org/show_bug.cgi?id=97743

        Reviewed by Kentaro Hara.

        Rename PerfTestRunner.run to PerfTestRunner.measureTime and make it take an object instead of
        5 arguments. Also get rid of PerfTestRunner._loopsPerRun since it's no longer used (it's always 1).

        * CSS/StyleSheetInsert.html:
        * DOM/resources/dom-perf.js:
        * Layout/floats_100_100.html:
        * Layout/floats_100_100_nested.html:
        * Layout/floats_20_100.html:
        * Layout/floats_20_100_nested.html:
        * Layout/floats_2_100.html:
        * Layout/floats_2_100_nested.html:
        * Layout/floats_50_100.html:
        * Layout/floats_50_100_nested.html:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * SVG/SvgCubics.html:
        * SVG/SvgHitTesting.html:
        * resources/runner.js:

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        PerformanceTests/CSS/StyleSheetInsert.html has a time-dependent non-Gaussian distribution
        https://bugs.webkit.org/show_bug.cgi?id=97741

        Reviewed by Antti Koivisto.

        Reset the content in the iframe in each run so that the runtime from each run follows a normal distribution.
        We can cleanup this code once my patch to replace the argument list of run by an object is landed.

        * CSS/StyleSheetInsert.html:

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed. Minor appearance tweaks after r129813.

        * resources/results-template.html:

2012-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Results page should warn about time-dependent distributions
        https://bugs.webkit.org/show_bug.cgi?id=97818

        Reviewed by Ojan Vafai.

        Add a simple linear regression analysis on results page to detect time-dependent distributions.
        We add a warning sign (inline SVG) when the regression gave us a slope of at least 0.01 and a R^2 of at least 0.6.
        Also added time-series graphs per run under the bar graphs so that humans can manually inspect them.

        A nice follow up would be to add some normality test (e.g. Shapiro-Wilk) to detect bi-modal distributions
        but we probably need to restructure the code to run it asynchronously since normality tests are slow.

        * resources/results-template.html:

2012-09-26  Ryosuke Niwa  <rniwa@webkit.org>

        Use runPerSecond in PerformanceTests/Bindings/typed-array* and event-target-wrapper
        https://bugs.webkit.org/show_bug.cgi?id=97625

        Reviewed by Eric Seidel.

        Use PerfTestRunner.runPerSecond instead of PerfTestRunner.run. Also reduce the fixed number of
        elements and iterations in these tests by a factor of 10 since runPerSecond can dynamically
        adjust the number of function calls.

        * Bindings/event-target-wrapper.html:
        * Bindings/typed-array-construct-from-array.html:
        * Bindings/typed-array-construct-from-same-type.html:
        * Bindings/typed-array-construct-from-typed.html:
        * Bindings/typed-array-set-from-typed.html:

2012-09-25  Antti Koivisto  <antti@apple.com>

        Optimize stylesheet insertions
        https://bugs.webkit.org/show_bug.cgi?id=97627

        Reviewed by Andreas Kling.

        Add synthetic performance test for avoiding style recalcs on stylesheet inserts.

        * CSS/StyleSheetInsert.html: Added.

2012-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        Skip Dromaeo/jslib-modify-jquery.html per bug 95376.
        It runs out of memory on Chromium port, and it takes unreasonably long time (~5 minutes)
        to run on other ports.

        * Skipped:

2012-09-20  Ryosuke Niwa  <rniwa@webkit.org>

        Results page should show indivisual value
        https://bugs.webkit.org/show_bug.cgi?id=97178

        Reviewed by Tony Chang.

        Show indivisual values instead of statistics (min, max, stdev).

        * resources/results-template.html:

2012-09-20  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should record individual value instead of statistics
        https://bugs.webkit.org/show_bug.cgi?id=97155

        Reviewed by Hajime Morita.

        Report the list of values as "values" so that run-perf-tests can parse them.

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-09-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r129091.
        http://trac.webkit.org/changeset/129091
        https://bugs.webkit.org/show_bug.cgi?id=97205

        It broke perf tests everywhere (Requested by Ossy on #webkit).

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should record indivisual value instead of statistics
        https://bugs.webkit.org/show_bug.cgi?id=97155

        Reviewed by Hajime Morita.

        Report the list of values as "values" so that run-perf-tests can parse them.

        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-09-17  Ryosuke Niwa  <rniwa@webkit.org>

        Perf test results is incomprehensive
        https://bugs.webkit.org/show_bug.cgi?id=94668

        Reviewed by Eric Seidel.

        Overhauled the results page to have a tabular view. Clicking on each row shows a flot graph we used to have.
        For each run and test, we show the mean value with the standard deviation along with the percent difference
        against the reference run chosen by the user if the difference is statistically significant; it also indicates
        whether the new value is progression or not.

        The unit of each test is adjusted automatically using SI prefixes (Kilo, Mega, Milli), and rows can be sorted
        by each column. Time and memory results are separated into two tabs.

        * resources/jquery.tablesorter.min.js: Added.
        * resources/results-template.html:

2012-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Use performance.webkitNow in PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=92826

        Reviewed by Eric Seidel.

        Use performance.webkitNow with Date.now as a fallback for more accurate time measurements.

        * resources/runner.js:
        (PerfTestRunner._runner):
        (PerfTestRunner._perSecondRunnerIterator):

2012-09-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128562.
        http://trac.webkit.org/changeset/128562
        https://bugs.webkit.org/show_bug.cgi?id=96747

        It broke perf tests on Qt and Chromium (Requested by Ossy on
        #webkit).

        * resources/runner.js:
        (PerfTestRunner._runner):
        (PerfTestRunner._perSecondRunnerIterator):

2012-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Use performance.webkitNow in PerfTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=92826

        Reviewed by Eric Seidel.

        Use performance.webkitNow with Date.now as a fallback for more acurate time measurements.

        * resources/runner.js:
        (PerfTestRunner._runner):
        (PerfTestRunner._perSecondRunnerIterator):

2012-08-23  Ilya Tikhonovsky  <loislo@chromium.org>

        WebInspector: unreviewed single line test fix.

        The test has to open profiles panel explicitly because it is creating lazily.

        * inspector/heap-snapshot-performance-test.js:

2012-08-15  Scott Graham  <scottmg@chromium.org>

        Rename window.internals.fastMallocStatistics to mallocStatistics
        https://bugs.webkit.org/show_bug.cgi?id=94033

        Reviewed by Adam Barth.

        * resources/runner.js:
        (PerfTestRunner.storeHeapResults):
        (PerfTestRunner.getUsedMallocHeap):
        (PerfTestRunner.getAndPrintMemoryStatistics):
        (PerfTestRunner.initAndStartLoop):

2012-08-10  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed; fix an insanely silly typo.

        * resources/results-template.html:

2012-08-09  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r125178.

        * resources/runner.js:

2012-08-09  Zoltan Horvath  <zoltan@webkit.org>

        Add memory measurement to balls.html and dromaeorunner.js
        https://bugs.webkit.org/show_bug.cgi?id=93617

        Reviewed by Adam Barth.

        Since we added memory measurement support to performance tests we need to modify these tests.

        * Animation/balls.html:
        * Dromaeo/resources/dromaeorunner.js:

2012-08-09  Zoltan Horvath  <zoltan@webkit.org>

        JSHeap and FastMallocStatistics based memory measurement for performance-tests
        https://bugs.webkit.org/show_bug.cgi?id=90858

        Reviewed Ryosuke Niwa.

        Measure the memory usage of the performancetests with the help of the windows.memory.usedJSHeapSize
        object and the window.internals.fastMallocStatistics() function call.

        * resources/runner.js:
        (PerfTestRunner.logStatistics):
        (PerfTestRunner.printStatistics):
        (PerfTestRunner.storeHeapResults):
        (PerfTestRunner.getUsedFastMallocHeap):
        (PerfTestRunner.getUsedJSHeap):
        (PerfTestRunner.getAndPrintMemoryStatistics):
        (PerfTestRunner.ignoreWarmUpAndLog):
        (PerfTestRunner.initAndStartLoop):

2012-08-08  Benjamin Poulain  <benjamin@webkit.org>

        Calling internals from the performance test runner prevents manual running
        https://bugs.webkit.org/show_bug.cgi?id=93527

        Reviewed by Ryosuke Niwa.

        Since r125065, it is impossible to run the Performance tests manually. The problem is
        "internals" is not defined when running outside the test runner, so the whole script
        evaluation fails.

        * resources/runner.js: Verify is window.internals is available before invoking something on it.

2012-08-08  Zoltan Horvath  <zoltan@webkit.org>

        Set access to MemoryInfo enabled for the performance tests
        https://bugs.webkit.org/show_bug.cgi?id=92498

        Reviewed by Ryosuke Niwa.

        We need access to console.memory for the memory measurements.

        * resources/runner.js:

2012-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support --no-show-results
        https://bugs.webkit.org/show_bug.cgi?id=93409

        Reviewed by Dirk Pranke.

        Add a flot as a separate file and load it as an external resource.

        Also include scripts as external resources from both local filesystem and webkit.org
        so that it continues to work regardless of where you put it.

        It breaks when someone else receives the file and save it somewhere and doesn't have
        a network connection but that seems like a scenario we don't care that much.

        * resources/jquery.flot.min.js: Added.
        * resources/results-template.html:

2012-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        run-webkit-tests should have ability to add description to its JSON output
        https://bugs.webkit.org/show_bug.cgi?id=93296

        Reviewed by Dirk Pranke.

        Parse description and show it with the WebKit revision on the results page. Also use bar graphs
        instead of line graphs since we're not depicting the time series here per arv's suggestion.
        Finally, add the ability to adjust y-axis between the adjusted value and 0 (plot even doesn't adjust
        y-axis automatically now) by a mouse click.

        * resources/results-template.html:

2012-08-04  Ryosuke Niwa  <rniwa@webkit.org>

        Use testRunner instead of layoutTestController in performance tests
        https://bugs.webkit.org/show_bug.cgi?id=93184

        Reviewed by Adam Barth.

        * Animation/balls.html:
        * Dromaeo/resources/dromaeorunner.js:
        * inspector/console-300-lines.html:
        * inspector/inspector-startup-time.html:
        * inspector/network-append-30-requests.html.broken:
        * inspector/show-panel.html.broken:
        * resources/runner.js:
        (PerfTestRunner.logInfo):
        (PerfTestRunner.initAndStartLoop):

2012-08-02  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        TypedArray set method is slow when called with another typed array
        https://bugs.webkit.org/show_bug.cgi?id=92556

        Reviewed by Kenneth Russell.

        * Bindings/typed-array-set-from-typed.html: Added.

2012-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should generate a results page
        https://bugs.webkit.org/show_bug.cgi?id=92575

        Reviewed by Eric Seidel.

        Add a results page template. This page includes flot and flot.fillbetween.
        jQuery and the json that contains test results are injected by run-perf-tests.

        * resources/results-template.html: Added.

2012-07-27  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        use createUninitialized when creating TypedArray from another array
        https://bugs.webkit.org/show_bug.cgi?id=92518

        Reviewed by Kenneth Russell.

        * Bindings/typed-array-construct-from-array.html: Added.

2012-07-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add more Russian replay performance tests
        https://bugs.webkit.org/show_bug.cgi?id=92462

        Reviewed by Tony Chang.

        Add more Russian sites as suggested by loislo.

        * Replay/Russian/lenta.ru.replay: Added.
        * Replay/Russian/www.ixbt.com.replay: Added.
        * Replay/Russian/www.kp.ru.replay: Added.
        * Replay/Russian/www.liveinternet.ru.replay: Added.
        * Replay/Russian/www.pravda.ru.replay: Added.

2012-07-26  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        constructing TypedArray from another TypedArray is slow
        https://bugs.webkit.org/show_bug.cgi?id=90838

        Reviewed by Kenneth Russell.

        * Bindings/typed-array-construct-from-same-type.html: Added.
        * Bindings/typed-array-construct-from-typed.html: Added.

2012-07-25  Ryosuke Niwa  <rniwa@webkit.org>

        Import more replay performance tests from Mozilla's Tp5 test suite
        https://bugs.webkit.org/show_bug.cgi?id=92229

        Reviewed by Andreas Kling.

        Add more replay tests based on Mozilla's Tp5 test suite [1]. Unfortunately,
        we cannot import all URLs because some of them are not archived on archive.org
        and others do not replay well on web-page-replay. Nonethless, we're still adding
        60+ URLs in this patch.

        [1] http://people.mozilla.org/~jmaher/tp5.manifest

        * Replay/Chinese: Added.
        * Replay/Chinese/chinaz.com.replay: Added.
        * Replay/Chinese/www.163.com.replay: Added.
        * Replay/Chinese/www.alipay.com.replay: Added.
        * Replay/Chinese/www.baidu.com.replay: Added.
        * Replay/Chinese/www.csdn.net.replay: Added.
        * Replay/Chinese/www.douban.com.replay: Added.
        * Replay/Chinese/www.hao123.com.replay: Added.
        * Replay/Chinese/www.xinhuanet.com.replay: Added.
        * Replay/Chinese/www.xunlei.com.replay: Added.
        * Replay/Chinese/www.youku.com.replay: Added.
        * Replay/English: Added.
        * Replay/English/beatonna.livejournal.com.replay: Added.
        * Replay/English/cakewrecks.blogspot.com.replay: Added.
        * Replay/English/chemistry.about.com.replay: Added.
        * Replay/English/digg.com.replay: Added.
        * Replay/English/en.wikipedia.org-rorschach_test.replay: Added.
        * Replay/English/icanhascheezburger.com.replay: Added.
        * Replay/English/imgur.com-gallery.replay: Added.
        * Replay/English/online.wsj.com.replay: Added.
        * Replay/English/stockoverflow.com-best-comment.replay: Added.
        * Replay/English/www.alibaba.com.replay: Added.
        * Replay/English/www.amazon.com-kindle.replay: Added.
        * Replay/English/www.apple.com.replay: Added.
        * Replay/English/www.cnet.com.replay: Added.
        * Replay/English/www.dailymotion.com.replay: Added.
        * Replay/English/www.ehow.com-prevent-fire.replay: Added.
        * Replay/English/www.filestube.com-amy-adams.replay: Added.
        * Replay/English/www.foxnews.replay: Added.
        * Replay/English/www.huffingtonpost.com.replay: Added.
        * Replay/English/www.imdb.com-twilight.replay: Added.
        * Replay/English/www.mozilla.com-all-order.replay: Added.
        * Replay/English/www.php.net.replay: Added.
        * Replay/English/www.reddit.com.replay: Added.
        * Replay/English/www.telegraph.co.uk.replay: Added.
        * Replay/English/www.w3.org-htmlcss.replay: Added.
        * Replay/English/www.w3schools.com-html.replay: Added.
        * Replay/English/www.youtube.com-music.replay: Added.
        * Replay/French: Added.
        * Replay/French/www.orange.fr.replay: Added.
        * Replay/German: Added.
        * Replay/Italian: Added.
        * Replay/Italian/www.repubblica.it.replay: Added.
        * Replay/Japanese/entameblog.seesaa.net.replay: Added.
        * Replay/Japanese/www.hatena.ne.jp.replay: Added.
        * Replay/Japanese/www.nicovideo.jp.replay: Added.
        * Replay/Korean: Added.
        * Replay/Korean/www.naver.com.replay: Added.
        * Replay/Persian: Added.
        * Replay/Persian/blogfa.com.replay: Added.
        * Replay/Polish: Added.
        * Replay/Polish/www.wp.pl.replay: Added.
        * Replay/Portuguese: Added.
        * Replay/Portuguese/www.uol.com.br.replay: Added.
        * Replay/Russian: Added.
        * Replay/Russian/vkontakte.ru-help.replay: Added.
        * Replay/Russian/www.rambler.ru.replay: Added.
        * Replay/Russian/www.ucoz.ru.replay: Added.
        * Replay/Russian/www.yandex.ru.replay: Added.
        * Replay/Spanish: Added.
        * Replay/Spanish/www.taringa.net.replay: Added.

2012-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        Add some Japanese and Swedish websites to replay tests
        https://bugs.webkit.org/show_bug.cgi?id=92076

        Reviewed by Andreas Kling.

        Added new replay tests as follows.

        * Replay/Japanese: Added.
        * Replay/Japanese/2ch.net-newsplus.replay: Added.
        * Replay/Japanese/ja.wikipedia.org.replay: Added.
        * Replay/Japanese/www.livedoor.com.replay: Added.
        * Replay/Japanese/www.rakuten.co.jp.replay: Added.
        * Replay/Japanese/www.yahoo.co.jp.replay: Added.
        * Replay/Swedish: Added.
        * Replay/Swedish/www.flashback.se.replay: Added.
        * Replay/Swedish/www.tradera.com.replay: Added.
        * Replay/www.techcrunch.com.replay: Added.

2012-07-18  MORITA Hajime  <morrita@google.com>

        Add window resize benchmark
        https://bugs.webkit.org/show_bug.cgi?id=91070

        Reviewed by Ryosuke Niwa.

        Added window-resize.html which exercise html5.html. This test
        resizes the window and forces re-layout repeatedly.

        * Interactive/resources/window-resize.js: Added.
        * Interactive/window-resize.html: Added.
        * Parser/resources/html5.html: Modified to inject driver scripts.

2012-07-11  Philip Rogers  <pdr@google.com>

        Add a performance test for hit testing in SVG
        https://bugs.webkit.org/show_bug.cgi?id=90811

        Reviewed by Ryosuke Niwa.

        The shape rendering code is changing a lot and I'd like a performance test to
        make sure we don't regress, and to track our improvements.

        Performance results in my Linux desktop:
            RESULT SVG: SvgHitTesting= 105.0 ms
            median= 103.5 ms, stdev= 4.60434577329 ms, min= 101.0 ms, max= 116.0 ms

            RESULT SVG: SvgHitTesting= 97.8 ms
            median= 96.5 ms, stdev= 2.67581763205 ms, min= 95.0 ms, max= 102.0 ms

            RESULT SVG: SvgHitTesting= 104.3 ms
            median= 104.0 ms, stdev= 1.41774468788 ms, min= 102.0 ms, max= 107.0 ms

            RESULT SVG: SvgHitTesting= 103.6 ms
            median= 103.5 ms, stdev= 1.2 ms, min= 102.0 ms, max= 106.0 ms

        * SVG/SvgHitTesting.html: Added.

2012-07-03  Jan Keromnes  <janx@linux.com>

        Web Inspector: WebInspector.TextViewer should be renamed WebInspector.TextEditor
        https://bugs.webkit.org/show_bug.cgi?id=89939

        Reviewed by Vsevolod Vlasov.

        * inspector/first-open-scripts.html.broken:

2012-06-22  Philip Rogers  <pdr@google.com>

        Make SvgCubics performance test more consistent
        https://bugs.webkit.org/show_bug.cgi?id=89778

        Reviewed by Ryosuke Niwa.

        Previously this test ran twice for each iteration, but this led to inconsistent repaints.
        This change updates the test to only run once per iteration, and adds even more cubics
        so that the test runs consistently in the 80ms range on my Linux desktop.

        Performance results on my desktop:
            RESULT SVG: SvgCubics= 80.5 ms
            median= 82.0 ms, stdev= 3.04138126515 ms, min= 75.0 ms, max= 85.0 ms

            RESULT SVG: SvgCubics= 80.1 ms
            median= 81.0 ms, stdev= 4.27668095607 ms, min= 74.0 ms, max= 88.0 ms

            RESULT SVG: SvgCubics= 81.45 ms
            median= 83.0 ms, stdev= 4.01839520207 ms, min= 75.0 ms, max= 89.0 ms

            RESULT SVG: SvgCubics= 78.9 ms
            median= 80.0 ms, stdev= 4.75289385533 ms, min= 72.0 ms, max= 87.0 ms

        * SVG/SvgCubics.html:

2012-06-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: partially instrument DOM Tree native memory.
        https://bugs.webkit.org/show_bug.cgi?id=89568

        This patch adds MemoryInstrumentation class that counts all visited
        objects and calls reportMemoryUsage.

        Reviewed by Yury Semikhatsky.

        * inspector/native-memory-snapshot.html:

2012-06-21  Kentaro Hara  <haraken@chromium.org>

        Add a perf-test for innerHTML setter for a large DOM tree
        https://bugs.webkit.org/show_bug.cgi?id=89723

        Reviewed by Ryosuke Niwa.

        We want a benchmark for innerHTML setter for the following reason:

        - innerHTML setter is widely used in the real world.
        - I am planning to optimize innerHTML setter in the near future.
        - I want to use the innerHTML setter benchmark for the patch of bug 88834.

        Performance results in my Linux desktop:

        RESULT Parser: innerHTML-setter= 289.782649995 runs/s
        median= 290.046269741 runs/s, stdev= 1.06575112224 runs/s, min= 286.831812256 runs/s, max= 291.005291005 runs/s

        RESULT Parser: innerHTML-setter= 289.020706132 runs/s
        median= 289.093298292 runs/s, stdev= 0.985203313093 runs/s, min= 286.831812256 runs/s, max= 290.620871863 runs/s

        RESULT Parser: innerHTML-setter= 288.912051701 runs/s
        median= 291.005291005 runs/s, stdev= 3.65241325588 runs/s, min= 283.505154639 runs/s, max= 292.553191489 runs/s

        RESULT Parser: innerHTML-setter= 288.644186666 runs/s
        median= 288.713910761 runs/s, stdev= 1.31889053717 runs/s, min= 286.085825748 runs/s, max= 290.620871863 runs/s

        RESULT Parser: innerHTML-setter= 288.698714577 runs/s
        median= 288.713910761 runs/s, stdev= 1.03938198202 runs/s, min= 286.458333333 runs/s, max= 290.237467018 runs/s

        * Parser/innerHTML-setter.html: Added.

2012-06-20  Philip Rogers  <pdr@google.com>

        Add a performance test for paths in SVG
        https://bugs.webkit.org/show_bug.cgi?id=89547

        Reviewed by Ryosuke Niwa.

        This change adds the first performance test for SVG paths.
        In the test we modify complex cubic paths in several ways, testing:
        transformations, clipping, d attribute changes, stroke properties,
        text on a path, and opacity.

        Sample test results on my Linux desktop:
            RESULT SVG: SvgCubics= 68.85 ms
            median= 69.5 ms, stdev= 4.70398767005 ms, min= 56.0 ms, max= 75.0 ms

            RESULT SVG: SvgCubics= 68.4 ms
            median= 69.0 ms, stdev= 3.51283361405 ms, min= 59.0 ms, max= 74.0 ms

            RESULT SVG: SvgCubics= 66.95 ms
            median= 67.0 ms, stdev= 3.4420197559 ms, min= 59.0 ms, max= 74.0 ms

            RESULT SVG: SvgCubics= 70.2 ms
            median= 71.5 ms, stdev= 3.23419232576 ms, min= 63.0 ms, max= 74.0 ms

        * SVG: Added.
        * SVG/SvgCubics.html: Added.

2012-06-20  Tom Zakrajsek  <tomz@codeaurora.org>

        Import themaninblue.com/experiment/AnimationBenchmark/ as performance tests
        https://bugs.webkit.org/show_bug.cgi?id=78789

        Reviewed by Ryosuke Niwa.

        Added PerfTestRunner fixture around it.

        * Animation/balls.html: Added.

2012-06-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: native memory snapshot performance and coverage test implementation.
        https://bugs.webkit.org/show_bug.cgi?id=89363

        We have to track the performance of MemoryAgent.getProcessMemoryDistribution.
        Also this test will work as a burn down chart for Unknown memory metric.

        Reviewed by Pavel Feldman.

        * inspector/native-memory-snapshot.html: Added.
        * inspector/performance-test.js:
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.reportSize):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):

2012-06-05  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: serialize edge counts instead of indexes in heap snapshot
        https://bugs.webkit.org/show_bug.cgi?id=88324

        The serialized node structure currently holds an index
        of its first containment edge in the edges array.
        The index can be quite big (up to 7 digits for large snapshots).
        The patch changes the serialization format to pass
        node containment edge count instead. For most nodes the count
        is just a single digit number.
        This reduces serialized snapshot size and therefore its transfer time.

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot-performance-test.js:

2012-06-04  Alexei Filippov  <alexeif@chromium.org>

        Web Inspector: speed up _calculateRetainedSizes function
        https://bugs.webkit.org/show_bug.cgi?id=87863

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot-advanced.html: Added.
        * inspector/heap-snapshot-performance-test.js: Copied from PerformanceTests/inspector/heap-snapshot.html.
        (test.performanceTest.step0):
        (test.performanceTest.step1):
        (test.performanceTest.step2):
        (test.performanceTest.cleanup):
        (test.performanceTest.done):
        (test.performanceTest):
        (test):
        * inspector/heap-snapshot.html:

2012-06-03  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a benchmark of querySelector() for an element that appears in the depths in the document
        https://bugs.webkit.org/show_bug.cgi?id=88202

        Reviewed by Ryosuke Niwa.

        query-selector-first.html tests querySelector() for an element
        that appears at the head of the document. query-selector-last.html
        tests querySelector() for an element that appears at the tail of
        the document. In addition, we want a benchmark of querySelector()
        for an element that appears in the depths in the document.

        Test results in my Linux desktop:

        RESULT Parser: query-selector-deep= 460.776980611 runs/s
        median= 460.947503201 runs/s, stdev= 1.72274941942 runs/s, min= 455.696202532 runs/s, max= 463.32046332 runs/s

        RESULT Parser: query-selector-deep= 458.925050915 runs/s
        median= 459.183673469 runs/s, stdev= 1.47930124139 runs/s, min= 454.545454545 runs/s, max= 460.947503201 runs/s

        RESULT Parser: query-selector-deep= 461.866981491 runs/s
        median= 461.538461538 runs/s, stdev= 1.14613123359 runs/s, min= 459.183673469 runs/s, max= 463.917525773 runs/s

        RESULT Parser: query-selector-deep= 453.922010788 runs/s
        median= 454.258855898 runs/s, stdev= 1.77279123317 runs/s, min= 447.204968944 runs/s, max= 455.696202532 runs/s

        RESULT Parser: query-selector-deep= 454.666321221 runs/s
        median= 454.545454545 runs/s, stdev= 1.65775667417 runs/s, min= 451.127819549 runs/s, max= 456.852791878 runs/s

        * Parser/query-selector-deep.html: Added.

2012-06-03  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Make query-selector-last.html more realistic
        https://bugs.webkit.org/show_bug.cgi?id=88203

        Reviewed by Ryosuke Niwa.

        query-selector-last.html tests querySelector() for an element
        that appears after 1000 div elements, all of which have the same
        id and class. To test the performance of querySelector() under
        a lot of ids and classes, we should make the ids and classes of
        the 1000 elements different.

        This patch degrades the performance of query-selector-last.html
        by 3.6%.

        [Before]
        RESULT Parser: query-selector-last= 476.382274152 runs/s
        median= 476.821192053 runs/s, stdev= 1.14578875814 runs/s, min= 474.308300395 runs/s, max= 478.087649402 runs/s

        RESULT Parser: query-selector-last= 478.423061861 runs/s
        median= 478.723404255 runs/s, stdev= 1.54876867255 runs/s, min= 473.684210526 runs/s, max= 481.347773767 runs/s

        RESULT Parser: query-selector-last= 479.849287174 runs/s
        median= 480.0 runs/s, stdev= 1.69849752498 runs/s, min= 475.561426684 runs/s, max= 481.927710843 runs/s

        RESULT Parser: query-selector-last= 476.765438846 runs/s
        median= 477.453580902 runs/s, stdev= 1.8724488664 runs/s, min= 471.821756225 runs/s, max= 478.723404255 runs/s

        RESULT Parser: query-selector-last= 481.715340644 runs/s
        median= 481.637742305 runs/s, stdev= 1.81446361145 runs/s, min= 475.561426684 runs/s, max= 483.675937122 runs/s

        [After]
        RESULT Parser: query-selector-last= 458.866623582 runs/s
        median= 459.183673469 runs/s, stdev= 1.48881464737 runs/s, min= 453.972257251 runs/s, max= 460.947503201 runs/s

        RESULT Parser: query-selector-last= 460.363532897 runs/s
        median= 460.358056266 runs/s, stdev= 1.58512056995 runs/s, min= 456.273764259 runs/s, max= 462.130937099 runs/s

        RESULT Parser: query-selector-last= 457.727448451 runs/s
        median= 458.015267176 runs/s, stdev= 1.23681915516 runs/s, min= 453.972257251 runs/s, max= 459.183673469 runs/s

        RESULT Parser: query-selector-last= 465.57336853 runs/s
        median= 465.717981889 runs/s, stdev= 1.6616925374 runs/s, min= 460.947503201 runs/s, max= 467.532467532 runs/s

        RESULT Parser: query-selector-last= 459.836252019 runs/s
        median= 459.770114943 runs/s, stdev= 1.84485630505 runs/s, min= 455.696202532 runs/s, max= 462.724935733 runs/s

        * Parser/query-selector-last.html:

2012-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        Add public page loading performance tests using web-page-replay
        https://bugs.webkit.org/show_bug.cgi?id=84008

        Reviewed by Dirk Pranke.

        Add replay tests for google.com and youtube.com as examples.

        * Replay: Added.
        * Replay/www.google.com.replay: Added.
        * Replay/www.youtube.com.replay: Added.

2012-05-30  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a benchmark for querySelector()
        https://bugs.webkit.org/show_bug.cgi?id=87742

        Reviewed by Ryosuke Niwa.

        Now I am optimizing querySelector() (bug 87625).
        This patch adds a performance test for querySelector().
        query-selector-first.html queries an element that appears
        at the head of the document. On the other hand,
        query-selector-last.html queries an element that appears
        at the tail of the document.

        Test results in my desktop:

        [query-selector-first.html]
        RESULT Parser: query-selector-first= 252.339803014 runs/s
        median= 253.646265594 runs/s, stdev= 2.32610873209 runs/s, min= 248.138957816 runs/s, max= 254.777070064 runs/s

        RESULT Parser: query-selector-first= 252.688468897 runs/s
        median= 252.684876579 runs/s, stdev= 3.60008778708 runs/s, min= 246.002460025 runs/s, max= 258.397932817 runs/s

        RESULT Parser: query-selector-first= 253.466019656 runs/s
        median= 254.129606099 runs/s, stdev= 1.78002675664 runs/s, min= 247.831474597 runs/s, max= 254.777070064 runs/s

        RESULT Parser: query-selector-first= 256.245078189 runs/s
        median= 257.06940874 runs/s, stdev= 2.84722072201 runs/s, min= 249.687890137 runs/s, max= 259.74025974 runs/s

        RESULT Parser: query-selector-first= 252.203100497 runs/s
        median= 252.047989175 runs/s, stdev= 1.75233446036 runs/s, min= 248.138957816 runs/s, max= 255.427841635 runs/s

        [query-selector-last.html]
        RESULT Parser: query-selector-last= 356.009616076 runs/s
        median= 355.781448539 runs/s, stdev= 0.841519086864 runs/s, min= 354.430379747 runs/s, max= 358.056265985 runs/s

        RESULT Parser: query-selector-last= 360.735271001 runs/s
        median= 361.057532424 runs/s, stdev= 1.12253219867 runs/s, min= 358.514724712 runs/s, max= 362.225097025 runs/s

        RESULT Parser: query-selector-last= 359.598592463 runs/s
        median= 359.435173299 runs/s, stdev= 0.816538258728 runs/s, min= 358.056265985 runs/s, max= 360.824742268 runs/s

        RESULT Parser: query-selector-last= 357.260651715 runs/s
        median= 357.598978289 runs/s, stdev= 1.17393159885 runs/s, min= 353.982300885 runs/s, max= 358.974358974 runs/s

        RESULT Parser: query-selector-last= 351.696240713 runs/s
        median= 351.980025916 runs/s, stdev= 1.14200564038 runs/s, min= 348.692403487 runs/s, max= 353.535353535 runs/s

        * Parser/query-selector-first.html: Added.
        * Parser/query-selector-last.html: Added.

2012-05-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapSnapshot: introduce performance counter for HeapSnapshotConstructorsDataGrid._aggregatesReceived method.
        https://bugs.webkit.org/show_bug.cgi?id=87393

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html:

2012-05-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler's perf test: each N-th run pushes the run results N-th times.
        https://bugs.webkit.org/show_bug.cgi?id=87476

        The time tracking wrappers were attaching on each run.

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html:

2012-05-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: HeapProfiler: upstream retainedSize calculation.
        https://bugs.webkit.org/show_bug.cgi?id=87107

        This patch upstreams V8::HeapSnapshotGenerator::CalculateRetainedSizes function to front-end.
        After that we will be able to drop retainedSize field from the snapshot serialized data.
        See meta-bug https://bugs.webkit.org/show_bug.cgi?id=87089

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html: add counter for the _calculateRetainedSize method.

2012-05-21  Kent Tamura  <tkent@chromium.org>

        Add performance tests for <textarea>
        https://bugs.webkit.org/show_bug.cgi?id=86994

        Reviewed by Ryosuke Niwa.

        * DOM/textarea-dom.html: Added.
        * DOM/textarea-edit.html: Added.
        * Parser/textarea-parsing.html: Added.

2012-05-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: upstream build dominators tree procedure from v8.
        https://bugs.webkit.org/show_bug.cgi?id=86640

        The idea is to reduce transfer size and move all the post-processing steps to the front-end.
        The JS implementation is ~1.5 times slower.

        Reviewed by Yury Semikhatsky.

        Covered by existing tests and performance tests.

        * inspector/heap-snapshot.html:

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Remove Bindings/dom-attributes.html
        https://bugs.webkit.org/show_bug.cgi?id=86820

        Reviewed by Ryosuke Niwa.

        Bindings/dom-attributes.html is just a collection of random
        DOM attributes and methods. Now we've added more reasonable
        micro benchmarks by classifying DOM binding call paths, we
        can remove Bindings/dom-attributes.html.

        * Bindings/dom-attributes.html: Removed.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for getElementById() for an undefined id
        https://bugs.webkit.org/show_bug.cgi?id=86812

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for document.getElementById() for an undefined id.
        This benchmark covers 'getElementById (not in document)' in Dromaeo/dom-query.html,
        and other Node-query methods that return a null.'

        (Note: This benchmark is slower than document.getElementById() for a defined id.
        We will fix the performance issue soon.)

        Test results in my Linux desktop:

        RESULT Bindings: undefined-get-element-by-id= 271.945751345 runs/s
        median= 273.122389532 runs/s, stdev= 6.78219237299 runs/s, min= 257.4002574 runs/s, max= 281.690140845 runs/s

        RESULT Bindings: undefined-get-element-by-id= 269.105872408 runs/s
        median= 268.948655257 runs/s, stdev= 5.73707323755 runs/s, min= 257.4002574 runs/s, max= 278.128950695 runs/s

        RESULT Bindings: undefined-get-element-by-id= 269.987513372 runs/s
        median= 272.952853598 runs/s, stdev= 5.30252336078 runs/s, min= 255.754475703 runs/s, max= 273.97260274 runs/s

        RESULT Bindings: undefined-get-element-by-id= 270.169625901 runs/s
        median= 271.604938272 runs/s, stdev= 5.29502391906 runs/s, min= 258.064516129 runs/s, max= 278.481012658 runs/s

        RESULT Bindings: undefined-get-element-by-id= 269.054631422 runs/s
        median= 267.966292802 runs/s, stdev= 6.27197240579 runs/s, min= 258.064516129 runs/s, max= 278.481012658 runs/s

        * Bindings/undefined-get-element-by-id.html: Added.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for getElementsByTagName()
        https://bugs.webkit.org/show_bug.cgi?id=86810

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for document.getElementsByTagName().
        This benchmark covers 'getElementsByTagName (not in document)',
        'getElementsByTagName', 'getElementsByName (not in document)'
        and 'getElementsByName' in Dromaeo/dom-query.html, and other DOM
        methods that return a NodeList.

        Test results in my Linux desktop:

        RESULT Bindings: get-elements-by-tag-name= 364.542328875 runs/s
        median= 366.972477064 runs/s, stdev= 5.25387955333 runs/s, min= 351.317440402 runs/s, max= 368.421052632 runs/s

        RESULT Bindings: get-elements-by-tag-name= 364.341569369 runs/s
        median= 366.492146597 runs/s, stdev= 4.867374197 runs/s, min= 352.644836272 runs/s, max= 367.936925099 runs/s

        RESULT Bindings: get-elements-by-tag-name= 363.924242967 runs/s
        median= 366.013071895 runs/s, stdev= 5.16768212289 runs/s, min= 351.317440402 runs/s, max= 367.936925099 runs/s

        RESULT Bindings: get-elements-by-tag-name= 365.332594438 runs/s
        median= 367.454068241 runs/s, stdev= 6.17046918572 runs/s, min= 350.0 runs/s, max= 370.37037037 runs/s

        RESULT Bindings: get-elements-by-tag-name= 363.999514324 runs/s
        median= 366.492146597 runs/s, stdev= 5.31235674905 runs/s, min= 350.877192982 runs/s, max= 368.421052632 runs/s

        * Bindings/get-elements-by-tag-name.html: Added.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add 7 micro benchmarks for DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=86816

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.
        This patch adds seven micro benchmarks for DOM bindings.

        id-getter.html covers 'element.property' in Dromaeo/dom-attr.html,
        'innerHTML' in Dromaeo/dom-modify.html, and other DOM attributes that
        return a String.

        id-setter.html covers 'element.property = value' in Dromaeo/dom-attr.html,
        and other DOM attributes that sets a String.

        undefined-id-getter.html covers undefined DOM attributes that return an empty String.

        append-child.html covers 'appendChild' and 'removeChild' in Dromaeo/dom-modify.html.

        insert-before.html covers 'insertBefore' in Dromaeo/dom-modify.html and replaceChild().

        create-element.html covers 'createElement', 'createTextNode' and 'cloneNode'
        in Dromaeo/dom-modify.html, and other DOM methods that return a new Node object.

        node-list-access.html covers 'childNodes' in Dromaeo/dom-traverse.html,
        and other DOM attributes that access NodeList.

        Test results in my Linux desktop:

        [id-getter]
        RESULT Bindings: id-getter= 550.517821097 runs/s
        median= 550.688360451 runs/s, stdev= 0.970723739106 runs/s, min= 548.628428928 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 550.655839847 runs/s
        median= 550.688360451 runs/s, stdev= 1.03312821884 runs/s, min= 549.313358302 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 550.277753355 runs/s
        median= 550.344180225 runs/s, stdev= 1.19960683464 runs/s, min= 547.945205479 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 550.072271009 runs/s
        median= 550.344180225 runs/s, stdev= 1.38925152131 runs/s, min= 547.263681592 runs/s, max= 552.070263488 runs/s

        RESULT Bindings: id-getter= 548.802050235 runs/s
        median= 548.628428928 runs/s, stdev= 1.18244513683 runs/s, min= 545.905707196 runs/s, max= 550.688360451 runs/s

        [id-setter]
        RESULT Bindings: id-setter= 211.370591663 runs/s
        median= 210.803689065 runs/s, stdev= 1.4555795889 runs/s, min= 209.973753281 runs/s, max= 214.285714286 runs/s

        RESULT Bindings: id-setter= 215.439081352 runs/s
        median= 214.797136038 runs/s, stdev= 1.50920388121 runs/s, min= 213.049267643 runs/s, max= 218.446601942 runs/s

        RESULT Bindings: id-setter= 216.721698466 runs/s
        median= 215.956886352 runs/s, stdev= 1.54090749644 runs/s, min= 214.285714286 runs/s, max= 219.78021978 runs/s

        RESULT Bindings: id-setter= 216.343019087 runs/s
        median= 215.827338129 runs/s, stdev= 1.46619894553 runs/s, min= 215.053763441 runs/s, max= 218.97810219 runs/s

        RESULT Bindings: id-setter= 216.799288017 runs/s
        median= 215.956886352 runs/s, stdev= 1.49100776978 runs/s, min= 215.311004785 runs/s, max= 219.78021978 runs/s

        [undefined-id-getter]
        RESULT Bindings: undefined-id-getter= 494.104255241 runs/s
        median= 494.132368875 runs/s, stdev= 1.13092821109 runs/s, min= 490.797546012 runs/s, max= 495.662949195 runs/s

        RESULT Bindings: undefined-id-getter= 493.921802916 runs/s
        median= 493.827160494 runs/s, stdev= 1.25097443119 runs/s, min= 490.196078431 runs/s, max= 495.662949195 runs/s

        RESULT Bindings: undefined-id-getter= 491.976485667 runs/s
        median= 492.004920049 runs/s, stdev= 0.947090576896 runs/s, min= 490.196078431 runs/s, max= 493.827160494 runs/s

        RESULT Bindings: undefined-id-getter= 491.987710185 runs/s
        median= 494.132368875 runs/s, stdev= 8.66602543327 runs/s, min= 454.545454545 runs/s, max= 495.662949195 runs/s

        RESULT Bindings: undefined-id-getter= 494.195515847 runs/s
        median= 494.437577256 runs/s, stdev= 1.06135681702 runs/s, min= 490.797546012 runs/s, max= 495.662949195 runs/s

        [append-child]
        RESULT Bindings: append-child= 260.628237026 runs/s
        median= 260.926399352 runs/s, stdev= 2.55231060598 runs/s, min= 256.739409499 runs/s, max= 265.604249668 runs/s

        RESULT Bindings: append-child= 280.796193436 runs/s
        median= 280.791435348 runs/s, stdev= 2.53961321867 runs/s, min= 277.427490542 runs/s, max= 286.085825748 runs/s

        RESULT Bindings: append-child= 279.856209714 runs/s
        median= 280.25477707 runs/s, stdev= 2.85447647301 runs/s, min= 275.344180225 runs/s, max= 284.237726098 runs/s

        RESULT Bindings: append-child= 280.834502714 runs/s
        median= 280.25477707 runs/s, stdev= 2.67738046429 runs/s, min= 277.427490542 runs/s, max= 287.206266319 runs/s

        RESULT Bindings: append-child= 274.723872106 runs/s
        median= 273.291925466 runs/s, stdev= 3.03671746706 runs/s, min= 272.614622057 runs/s, max= 282.413350449 runs/s

        [insert-before]
        RESULT Bindings: insert-before= 180.986913006 runs/s
        median= 180.878552972 runs/s, stdev= 0.758038687299 runs/s, min= 180.18018018 runs/s, max= 183.968462549 runs/s

        RESULT Bindings: insert-before= 186.339916144 runs/s
        median= 186.170212766 runs/s, stdev= 0.869022097127 runs/s, min= 185.676392573 runs/s, max= 189.798339265 runs/s

        RESULT Bindings: insert-before= 189.45344838 runs/s
        median= 189.349112426 runs/s, stdev= 0.811854866567 runs/s, min= 187.79342723 runs/s, max= 192.539109507 runs/s

        RESULT Bindings: insert-before= 189.363295991 runs/s
        median= 189.349112426 runs/s, stdev= 0.75387713097 runs/s, min= 188.014101058 runs/s, max= 192.076830732 runs/s

        RESULT Bindings: insert-before= 189.252041642 runs/s
        median= 189.349112426 runs/s, stdev= 0.840447225363 runs/s, min= 187.573270809 runs/s, max= 192.076830732 runs/s

        [create-element]
        RESULT Bindings: create-element= 280.675830077 runs/s
        median= 280.701824914 runs/s, stdev= 0.788606343054 runs/s, min= 279.441117764 runs/s, max= 282.542885974 runs/s

        RESULT Bindings: create-element= 276.427631436 runs/s
        median= 277.227722772 runs/s, stdev= 3.39874667549 runs/s, min= 262.417994377 runs/s, max= 279.162512463 runs/s

        RESULT Bindings: create-element= 277.156894411 runs/s
        median= 277.227722772 runs/s, stdev= 1.13255119226 runs/s, min= 274.914089347 runs/s, max= 278.884462151 runs/s

        RESULT Bindings: create-element= 278.066825356 runs/s
        median= 278.191822254 runs/s, stdev= 0.686497782792 runs/s, min= 276.953511375 runs/s, max= 279.162512463 runs/s

        RESULT Bindings: create-element= 276.431538109 runs/s
        median= 276.406712734 runs/s, stdev= 0.759593662298 runs/s, min= 275.229357798 runs/s, max= 278.053624628 runs/s

        [node-list-access]
        RESULT Bindings: node-list-access= 222.747504073 runs/s
        median= 222.772277228 runs/s, stdev= 0.789027527555 runs/s, min= 221.674876847 runs/s, max= 224.159402242 runs/s

        RESULT Bindings: node-list-access= 220.722448287 runs/s
        median= 221.266217576 runs/s, stdev= 1.65463497875 runs/s, min= 217.391304348 runs/s, max= 222.222222222 runs/s

        RESULT Bindings: node-list-access= 222.195870443 runs/s
        median= 222.222222222 runs/s, stdev= 0.489709262091 runs/s, min= 221.13022113 runs/s, max= 223.048327138 runs/s

        RESULT Bindings: node-list-access= 221.431121677 runs/s
        median= 221.538545435 runs/s, stdev= 0.608292116087 runs/s, min= 220.048899756 runs/s, max= 222.772277228 runs/s

        RESULT Bindings: node-list-access= 219.001367135 runs/s
        median= 221.538545435 runs/s, stdev= 4.65773933007 runs/s, min= 209.973753281 runs/s, max= 222.496909765 runs/s

        * Bindings/append-child.html: Added.
        * Bindings/create-element.html: Added.
        * Bindings/id-getter.html: Added.
        * Bindings/id-setter.html: Added.
        * Bindings/insert-before.html: Added.
        * Bindings/node-list-access.html: Added.
        * Bindings/undefined-id-getter.html: Added.

2012-05-18  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for div.setAttribute()
        https://bugs.webkit.org/show_bug.cgi?id=86815

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for div.setAttribute(). This benchmark
        covers 'setAttribute' in Dromaeo/dom-attr.html and other DOM methods
        that return an undefined.

        Test results in my Linux desktop:

        RESULT Bindings: set-attribute= 793.745073252 runs/s
        median= 791.589665765 runs/s, stdev= 6.00467159709 runs/s, min= 785.27607362 runs/s, max= 808.080808081 runs/s

        RESULT Bindings: set-attribute= 790.858444164 runs/s
        median= 787.918921436 runs/s, stdev= 7.86264953655 runs/s, min= 780.234070221 runs/s, max= 806.04534005 runs/s

        RESULT Bindings: set-attribute= 787.277571417 runs/s
        median= 784.31372549 runs/s, stdev= 7.45363346657 runs/s, min= 778.588807786 runs/s, max= 804.020100503 runs/s

        RESULT Bindings: set-attribute= 782.401393791 runs/s
        median= 779.062978802 runs/s, stdev= 6.48250081621 runs/s, min= 777.642770352 runs/s, max= 796.019900498 runs/s

        RESULT Bindings: set-attribute= 791.792516608 runs/s
        median= 791.556728232 runs/s, stdev= 6.49182980397 runs/s, min= 779.220779221 runs/s, max= 808.080808081 runs/s

        * Bindings/set-attribute.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for div.getAttribute()
        https://bugs.webkit.org/show_bug.cgi?id=86814

        Reviewed by Ryosuke Niwa.

        We should remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for div.getAttribute(). This benchmark
        covers 'getAttribute' in Dromaeo/dom-attr.html, and other DOM methods
        that return a String.

        Test results in my Linux desktop:

        RESULT Bindings: get-attribute= 250.088158538 runs/s
        median= 250.469728765 runs/s, stdev= 4.66551901315 runs/s, min= 240.673886883 runs/s, max= 256.739409499 runs/s

        RESULT Bindings: get-attribute= 250.209764698 runs/s
        median= 250.626959986 runs/s, stdev= 4.12030002477 runs/s, min= 241.254523522 runs/s, max= 255.102040816 runs/s

        RESULT Bindings: get-attribute= 248.907532887 runs/s
        median= 250.312891114 runs/s, stdev= 3.23173125874 runs/s, min= 240.673886883 runs/s, max= 251.572327044 runs/s

        RESULT Bindings: get-attribute= 250.243680844 runs/s
        median= 250.783797637 runs/s, stdev= 4.19327170024 runs/s, min= 240.963855422 runs/s, max= 255.102040816 runs/s

        RESULT Bindings: get-attribute= 245.329046608 runs/s
        median= 244.948040416 runs/s, stdev= 2.24314248534 runs/s, min= 240.384615385 runs/s, max= 248.756218905 runs/s

        * Bindings/get-attribute.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a binding benchmark for getElementById()
        https://bugs.webkit.org/show_bug.cgi?id=86808

        Reviewed by Ryosuke Niwa.

        Currently Bindings/dom-attributes.html is just a collection
        of random DOM attributes and methods. We should remove it and
        instead add more reasonable micro benchmarks by classifying
        DOM binding call paths.

        This patch adds a benchmark for document.getElementById(),
        which covers other DOM methods that return a Node Object.

        The reason why we want to add a benchmark for document.getElementById()
        in spite of the fact that Dromaeo/dom-query.html is already testing
        document.getElementById(), is that Dromaeo/dom-query.html outputs one
        result for several benchmarks (i.e. getElementById().nodeType,
        getElementsByTagName()[0].nodeType etc), and thus we cannot observe
        regression of getElementById() itself. (Catching regression of
        getElementById() would be critical.)

        Test results in my Linux desktop:

        RESULT Bindings: get-element-by-id= 300.933707795 runs/s
        median= 302.267002519 runs/s, stdev= 3.04954648504 runs/s, min= 295.930949445 runs/s, max= 305.34351145 runs/s

        RESULT Bindings: get-element-by-id= 302.030324483 runs/s
        median= 302.267481977 runs/s, stdev= 1.78518068367 runs/s, min= 298.507462687 runs/s, max= 304.568527919 runs/s

        RESULT Bindings: get-element-by-id= 301.993483538 runs/s
        median= 302.648171501 runs/s, stdev= 1.87604126626 runs/s, min= 296.662546354 runs/s, max= 304.568527919 runs/s

        RESULT Bindings: get-element-by-id= 301.936607982 runs/s
        median= 302.45758701 runs/s, stdev= 1.88991087072 runs/s, min= 298.879202989 runs/s, max= 304.955527319 runs/s

        RESULT Bindings: get-element-by-id= 301.952234563 runs/s
        median= 302.648171501 runs/s, stdev= 1.59929752614 runs/s, min= 299.625468165 runs/s, max= 304.568527919 runs/s

        * Bindings/get-element-by-id.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a benchmark for body.scrollTop
        https://bugs.webkit.org/show_bug.cgi?id=86806

        Reviewed by Ryosuke Niwa.

        Currently Bindings/dom-attributes.html is just a collection of random
        DOM attributes and methods. We should remove it and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        This patch adds a benchmark for body.scrollTop, which covers other
        DOM attributes that return small integers.

        (Note: Performance optimization for the benchmark will be coming soon.)

        Test results in my Linux desktop:

        RESULT Bindings: scroll-top= 209.410654239 runs/s
        median= 211.64021164 runs/s, stdev= 4.09958741195 runs/s, min= 201.005025126 runs/s, max= 212.483399734 runs/s

        RESULT Bindings: scroll-top= 195.651111157 runs/s
        median= 196.319018405 runs/s, stdev= 1.77011627406 runs/s, min= 191.846522782 runs/s, max= 197.28729963 runs/s
        RESULT Bindings: scroll-top= 200.004907612 runs/s
        median= 201.511335013 runs/s, stdev= 3.27455403827 runs/s, min= 193.236714976 runs/s, max= 202.53164557 runs/s

        RESULT Bindings: scroll-top= 209.582737512 runs/s
        median= 210.803689065 runs/s, stdev= 3.16769655464 runs/s, min= 203.045685279 runs/s, max= 211.920529801 runs/s

        RESULT Bindings: scroll-top= 199.924607687 runs/s
        median= 201.13144338 runs/s, stdev= 3.11080503619 runs/s, min= 193.003618818 runs/s, max= 202.02020202 runs/s

        * Bindings/scroll-top.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [perf-test] Add a micro benchmark for div.firstChild getter for an undefined firstChild
        https://bugs.webkit.org/show_bug.cgi?id=86725

        Reviewed by Ryosuke Niwa.

        We are going to remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        In this bug, we add a micro benchmark for div.firstChild getter for an
        undefined firstChild. This benchmark covers other undefined DOM attributes
        that return a null.

        (Note: In V8, div.firstChild for an undefined firstChild is currently slower
        than div.firstChild for a defined firstChild.)

        Test results in my Linux desktop:

        RESULT Bindings: undefined-first-child= 541.408311042 runs/s
        median= 541.205412054 runs/s, stdev= 1.29841219187 runs/s, min= 537.897310513 runs/s, max= 543.209876543 runs/s

        RESULT Bindings: undefined-first-child= 541.00750695 runs/s
        median= 540.540540541 runs/s, stdev= 0.967521230965 runs/s, min= 539.215686275 runs/s, max= 543.209876543 runs/s

        RESULT Bindings: undefined-first-child= 523.630714897 runs/s
        median= 523.560209424 runs/s, stdev= 1.01570919645 runs/s, min= 522.193211488 runs/s, max= 525.624178712 runs/s

        RESULT Bindings: undefined-first-child= 553.077663588 runs/s
        median= 553.459119497 runs/s, stdev= 0.805697397863 runs/s, min= 551.378446115 runs/s, max= 554.156171285 runs/s

        RESULT Bindings: undefined-first-child= 541.5401432 runs/s
        median= 541.538666618 runs/s, stdev= 0.954301364767 runs/s, min= 539.877300613 runs/s, max= 543.209876543 runs/s

        * Bindings/undefined-first-child.html: Added.

2012-05-17  Kentaro Hara  <haraken@chromium.org>

        [Performance test] Add a micro benchmark for div.firstChild getter
        https://bugs.webkit.org/show_bug.cgi?id=86582

        Reviewed by Ryosuke Niwa.

        We are going to remove Bindings/dom-attributes.html and instead add more
        reasonable micro benchmarks by classifying DOM binding call paths.

        In this bug, we add a micro benchmark for div.firstChild getter.
        This benchmark covers 'firstChild', 'lastChild', 'nextSibling' and
        'previousSibling' in Dromaeo/dom-traverse.html, and other DOM attributes
        that return a Node object.

        Multiple test results in my Linux desktop:

        RESULT Bindings: first-child= 798.157160346 runs/s
        median= 798.004987531 runs/s, stdev= 1.52006063407 runs/s, min= 796.019900498 runs/s, max= 801.001251564 runs/s
        RESULT Bindings: first-child= 797.603608554 runs/s
        median= 797.872340426 runs/s, stdev= 2.2522621261 runs/s, min= 791.556728232 runs/s, max= 801.001251564 runs/s
        RESULT Bindings: first-child= 798.656295468 runs/s
        median= 798.004987531 runs/s, stdev= 1.79367478063 runs/s, min= 797.01120797 runs/s, max= 803.011292346 runs/s
        RESULT Bindings: first-child= 797.812784267 runs/s
        median= 798.004987531 runs/s, stdev= 2.31766523191 runs/s, min= 791.100123609 runs/s, max= 802.005012531 runs/s
        RESULT Bindings: first-child= 797.963311597 runs/s
        median= 798.004987531 runs/s, stdev= 2.53014907337 runs/s, min= 789.14919852 runs/s, max= 801.001251564 runs/s

        * Bindings/first-child.html: Added.

2012-05-16  Kentaro Hara  <haraken@chromium.org>

        [Performance test] Support "description" for PerfTestRunner.run and PerfTestRunner.runPerSecond
        https://bugs.webkit.org/show_bug.cgi?id=86696

        Reviewed by Ryosuke Niwa.

        We want to add some description for each PerfTestRunner.run and
        PerfTestRunner.runPerSecond, so that people can know what each
        run is testing.

        Output example:

        $ ./Tools/Scripts/run-perf-tests Bindings/first-child.html
        Running Bindings/first-child.html (1 of 1)
        DESCRIPTION: Benchmark for DOM attributes that return a Node object.
        RESULT Bindings: first-child= 788.359076534 runs/s
        median= 797.508097751 runs/s, stdev= 19.0972905207 runs/s, min= 746.666666667 runs/s, max= 801.001251564 runs/s

        * resources/runner.js:
        (PerfTestRunner.logStatistics):
        (PerfTestRunner.printStatistics):
        (PerfTestRunner.runPerSecond):

2012-05-16  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix heap profiler performance test after r117234.

        * inspector/heap-snapshot.html:

2012-05-14  Ryosuke Niwa  <rniwa@webkit.org>

        Convert CSS and Parser tests to runs/s tests
        https://bugs.webkit.org/show_bug.cgi?id=86399

        Reviewed by Ojan Vafai.

        Use runPerSecond instead of run to measure results in function calls per second (run/s) instead of time (ms).
        This allows us to continue measuring performance reliably even when WebKit's performance improves and results
        become too small for Date.now()'s precision (around 15 ms).

        It should also reduce perf. bots cycle time for slower tests because we limit the number of function calls by time.

        * CSS/CSSPropertySetterGetter.html:
        * CSS/CSSPropertyUpdateValue.html:
        * Parser/css-parser-yui.html:
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:

2012-05-14  Dan Bernstein  <mitz@apple.com>

        Add a line layout performance test
        https://bugs.webkit.org/show_bug.cgi?id=86216

        Reviewed by Ryosuke Niwa.

        * Layout/line-layout.html: Added.

2012-05-14  Tony Chang  <tony@chromium.org>

        Don't append log lines while perf tests are running.
        https://bugs.webkit.org/show_bug.cgi?id=86028

        Reviewed by Ryosuke Niwa.

        In some tests, the extra DOM nodes can cause the test timing to change.
        Avoid adding DOM nodes until the test is over. When running in a browser,
        we append nodes as we run so the user can have some feedback.

        * resources/runner.js:
        (PerfTestRunner.log): Store the log lines in an array until the test is finished.

2012-05-14  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Don't adjust calls per iteration in the second run.

        * resources/runner.js:
        (PerfTestRunner._perSecondRunner):

2012-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        performance tests should be able to measure runs/sec rather than time
        https://bugs.webkit.org/show_bug.cgi?id=86021

        Reviewed by Ojan Vafai.

        Add PerfTestRunner.runPerSecond. It uses _runLoop but replaces _runner by _perSecondRunner
        to compute runs/s of runFunction.

        When _perSecondRunner is called for the first time, i.e. _completedRuns is 0 (notice this is -1
        in regular run/_runner), it slowly increases the number of function calls to runFunction between
        time measurements in order to discount the time used by new Date() calls themselves until the
        total time spent reaches 100 milliseconds.

        By default, runPerSecond runs the test for at least 750 milliseconds in each run, and executes
        21 runs, yielding the total run time of roughly 18 seconds. This is significantly faster than
        most of existing performance tests. Also see http://ejohn.org/blog/accuracy-of-javascript-time/.

        Finally, refactored the existing methods of PerfTestRunner to allow "runs/s" unit and share code.

        * Layout/flexbox-column-nowrap.html:
        * Layout/flexbox-column-wrap.html:
        * Layout/flexbox-row-nowrap.html:
        * Layout/flexbox-row-wrap.html:
        * resources/runner.js:
        (PerfTestRunner.computeStatistics): Takes unit.
        (PerfTestRunner.logStatistics): Ditto.
        (PerfTestRunner._runLoop):
        (PerfTestRunner._runner):
        (PerfTestRunner.runPerSecond): Added.
        (PerfTestRunner._perSecondRunner): Added. Called by _runLoop.
        (PerfTestRunner._perSecondRunnerIterator): Added.

2012-05-09  Tony Chang  <tony@chromium.org>

        add some basic perf-o-matic tests for flexbox
        https://bugs.webkit.org/show_bug.cgi?id=86017

        Reviewed by Ryosuke Niwa.

        Each of these tests take < 3s on my machine.

        * Layout/flexbox-column-nowrap.html: Added.
        * Layout/flexbox-column-wrap.html: Added.
        * Layout/flexbox-row-nowrap.html: Added.
        * Layout/flexbox-row-wrap.html: Added.

2012-05-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: unreviewed followup fix for the performance test after r116218.

        * inspector/heap-snapshot.html:

2012-05-02  Tom Zakrajsek  <tomz@codeaurora.org>

        Need tests for PerfTestRunner.computeStatistics
        https://bugs.webkit.org/show_bug.cgi?id=85410

        Reviewed by Ryosuke Niwa.

        * resources/runner.js:

2012-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r115905.
        http://trac.webkit.org/changeset/115905
        https://bugs.webkit.org/show_bug.cgi?id=85435

        New computeStatistics test is failing on chromium ports
        (Requested by tomz on #webkit).

        * resources/runner.js:

2012-05-02  Tom Zakrajsek  <tomz@codeaurora.org>

        Need tests for PerfTestRunner.computeStatistics
        https://bugs.webkit.org/show_bug.cgi?id=85410

        Reviewed by Ryosuke Niwa.

        * resources/runner.js:

2012-04-29  Tom Zakrajsek  <tomz@codeaurora.org>

        PerfTestRunner.computeStatistics incorrectly calculates min, max and median
        https://bugs.webkit.org/show_bug.cgi?id=85111

        Reviewed by Ryosuke Niwa.

        The sort of the data input was being done alphabetically.
        So I provided a numeric compare function.

        * resources/runner.js:

2012-04-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: the fix for test after massive rename in r114271.
        https://bugs.webkit.org/show_bug.cgi?id=84147

        Drive by fix. The test was renamed to heap-snapshot.html

        Reviewed by Yury Semikhatsky.

        * inspector/heap-snapshot.html: Renamed from PerformanceTests/inspector/detailed-heapshots-smoke-test.html.

2012-04-16  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: rename heap profiler files and classes DetailedHeapshot* ->HeapSnapshot*
        https://bugs.webkit.org/show_bug.cgi?id=84038

        A bunch of renames "detailed heapshot" -> "heap snapshot".

        Reviewed by Pavel Feldman.

        * inspector/detailed-heapshots-smoke-test.html:

2012-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Fix skipped list.

        * Skipped:

2012-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Enable SVG page loading performance tests
        https://bugs.webkit.org/show_bug.cgi?id=83861

        Reviewed by Adam Barth.

        Unskip PageLoad directory and skip tests that load too fast (less than 100ms) and are unstable,
        and the ones that take too long to load (more than 20s).

        * Skipped:

2012-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Unreviewed. temporary disable broken inspector tests.

        * inspector/first-open-scripts.html.broken: Renamed from PerformanceTests/inspector/first-open-scripts.html.
        * inspector/network-append-30-requests.html.broken: Renamed from PerformanceTests/inspector/network-append-30-requests.html.
        * inspector/show-panel.html.broken: Renamed from PerformanceTests/inspector/show-panel.html.

2012-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: linearise aggregate's retaining size calculation.
        https://bugs.webkit.org/show_bug.cgi?id=83125

        This version is twice as fast as the original and it is non-recursive.

        Reviewed by Yury Semikhatsky.

        * inspector/detailed-heapshots-smoke-test.html:

2012-03-30  David Barr  <davidbarr@chromium.org>

        Split up top-level .gitignore and .gitattributes
        https://bugs.webkit.org/show_bug.cgi?id=82687

        Reviewed by Tor Arne Vestbø.

        * .gitattributes: Added.

2012-03-28  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: switch heap profiler front-end to separate storage of nodes and edges
        https://bugs.webkit.org/show_bug.cgi?id=82453

        Updated heap profiler performance test after heap profiler front-end
        changes.

        Reviewed by Pavel Feldman.

        * inspector/detailed-heapshots-smoke-test.html:

2012-03-27  Alexis Menard  <alexis.menard@openbossa.org>

        Add a perf test which updates the value of an already declared CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=82321

        Reviewed by Andreas Kling.

        This benchmark update CSS existing properties of the style from JS.

        * CSS/CSSPropertyUpdateValue.html: Added.

2012-03-15  Kentaro Hara  <haraken@chromium.org>

        [PerformanceTests] run-perf-tests should output correct units
        https://bugs.webkit.org/show_bug.cgi?id=78303

        Reviewed by Ryosuke Niwa.

        Previously run-perf-tests just supported "ms" for units.
        Consequently, Dromaeo perf tests had been reporting runs/s as "ms".
        This patch fixes run-perf-tests so that they can support custom units.
        The default unit is "ms".

        The test result looks like this:

        $ ./Tools/Scripts/run-perf-tests Dromaeo/dom-attr.html
        RESULT Dromaeo: dom-attr= 6465.9525483 runs/s
        median= 0.0 runs/s, stdev= 24.2983433436 runs/s, min= 6435.87649402 runs/s, max= 6515.63693392 runs/s

        * Dromaeo/resources/dromaeorunner.js:
        (.):
        * resources/runner.js:
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.printStatistics):

2012-03-15  Alexis Menard  <alexis.menard@openbossa.org>

        Fix the test failing with run-perf-tests.

        Rubber stamped by Ryosuke Niwa.

        * CSS/CSSPropertySetterGetter.html:

2012-03-14  Alexis Menard  <alexis.menard@openbossa.org>

        Add a new perf test to benchmark setting and reading CSS properties from JS.
        https://bugs.webkit.org/show_bug.cgi?id=81155

        Reviewed by Ryosuke Niwa.

        This benchmark read and set CSS properties from JS. It contains a list
        of common CSS properties.

        * CSS/CSSPropertySetterGetter.html: Added.

2012-03-14  Alexandru Chiculita  <achicu@adobe.com>

        Layout/floats.html should be runnable by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=77051

        Reviewed by Ryosuke Niwa.

        I've split Layout/floats.html into multiple tests for each button in the original manual test.
        Some tests take longer to run and I've changed the number of iterations, so that each tests finishes under 30s per run.

        * DOM/resources/dom-perf.js:
        * Layout/floats.html: Removed.
        * Layout/floats_100_100.html: Added.
        * Layout/floats_100_100_nested.html: Added.
        * Layout/floats_20_100.html: Added.
        * Layout/floats_20_100_nested.html: Added.
        * Layout/floats_2_100.html: Added.
        * Layout/floats_2_100_nested.html: Added.
        * Layout/floats_50_100.html: Added.
        * Layout/floats_50_100_nested.html: Added.
        * Layout/resources/floats.css: Added.
        (.container):
        (.float):
        (.big):
        (.float-end):
        * Layout/resources/floats.js: Added.
        (.):
        * Skipped:
        * resources/runner.js:
        (PerfTestRunner.resetRandomSeed):
        (PerfTestRunner.random):
        (Math.random):
            Moved the Math.random to runner.js to be used by all tests.
            Added resetRandomSeed to bring the randomizer back to initial seed.
            It is useful to get the same results at every run and minimize the
            differences between runs.

2012-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110559.
        http://trac.webkit.org/changeset/110559
        https://bugs.webkit.org/show_bug.cgi?id=81142

        Broke Dromaeo tests (Requested by rniwa on #webkit).

        * Dromaeo/resources/dromaeorunner.js:
        (.):

2012-03-13  Kentaro Hara  <haraken@chromium.org>

        Dromaeo perf-tests results are wrong
        https://bugs.webkit.org/show_bug.cgi?id=80974

        Reviewed by Hajime Morita.

        Dromaeo perf-tests had reported the sum of runs/seconds as "ms".
        This patch fixes them to report the execution time per run.

        At present, they report "0.0ms" for "stdev". This is because
        dromaeorunner.js can just know stdev of "runs/seconds"
        and cannot calculate stdev of "ms" from that. We can fix it later.

        * Dromaeo/resources/dromaeorunner.js:
        (.):

2012-03-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: increase heap snapshot performance coverage.
        https://bugs.webkit.org/show_bug.cgi?id=80829

        Reviewed by Yury Semikhatsky.

        * inspector/detailed-heapshots-smoke-test.html:
        * inspector/performance-test.js:
        (initialize_TimeTracker.InspectorTest.measureFunction):

2012-03-06  Kentaro Hara  <haraken@chromium.org>

        [Perf tests] Reduce the number of loops in dom-attributes.html
        https://bugs.webkit.org/show_bug.cgi?id=80077

        Reviewed by Ryosuke Niwa.

        dom-attributes.html takes 100~ seconds in the perf bots. This patch reduces
        the time by reducing the number of loops.

        This is just a temporary fix. After more detailed investigation, I will reduce
        the number of tests in dom-attributes.html, and revert back the number of loops
        to guarantee the reliability of the perf test results.

        * Bindings/dom-attributes.html:

2012-03-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: Heap Snapshot test: split overal time metric into separate metrics.
        https://bugs.webkit.org/show_bug.cgi?id=80409

        Reviewed by Yury Semikhatsky.

        * inspector/detailed-heapshots-smoke-test.html:

2012-03-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: [chromium] introduce HeapSnapshot performance test.
        https://bugs.webkit.org/show_bug.cgi?id=80280

        Reviewed by Pavel Feldman.

        * inspector/detailed-heapshots-smoke-test.html: Added.

2012-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        DOM tests take too long to run
        https://bugs.webkit.org/show_bug.cgi?id=80082

        Reviewed by Eric Seidel.

        Reduce benchmark.timeToRun from 500ms to 100ms. Doesn't seem to affect test results much
        (except DOM/DOMTable.html) but significantly reduces the runtime of tests.

        * DOM/resources/dom-perf.js:
        (BenchmarkSuite.prototype.RunSingle):

2012-02-26  Kentaro Hara  <haraken@chromium.org>

        [Performance Tests] [Chromium] Bindings/dom-attributes.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=79593

        Reviewed by Adam Barth.

        This patch halves the execution time of Bindings/dom-attributes.html
        in order to avoid timeout in Chromium. The reason for the timeout is that
        V8 DOM bindings are too much slower than JSC bindings.
        I am a bit afraid that this patch will reduce the accuracy of the
        perf test results, but it would make sense to reduce the execution time
        until we fix the performance issue in V8 DOM bindings.

        * Bindings/dom-attributes.html:

2012-02-24  Ryosuke Niwa  <rniwa@webkit.org>

        Rename dom*_*attributes.html to dom*-*attributes.html to follow the WebKit convention.

        * Bindings/dom-attributes.html: Copied from PerformanceTests/Bindings/dom_attributes.html.
        * Bindings/dom_attributes.html: Removed.

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Unreviewed, rolling out r108477.
        http://trac.webkit.org/changeset/108477
        https://bugs.webkit.org/show_bug.cgi?id=79209

        The perf tests committed in r108748 covers the perf tests
        committed in r108477. So I'll roll out r108477.

        * Bindings/dom_attributes_id_getter.html: Removed.
        * Bindings/dom_attributes_id_setter.html: Removed.
        * Bindings/resources/dom_attributes_common.js: Removed.

2012-02-24  Kentaro Hara  <haraken@chromium.org>

        Add performance tests for DOM attribute getters and setters
        https://bugs.webkit.org/show_bug.cgi?id=79208

        Reviewed by Ryosuke Niwa.

        This patch adds performance micro-benchmarks for DOM attribute
        getters and setters. We selected DOM attributes from HTMLElement,
        Element and Node which will most impact on the DOM performance
        in the real Web and which have different call-paths from another
        DOM attribute.

        The perf test result in my local Chromium/Linux environment is as follows:
        median= 14967.0 ms, stdev= 85.2385476178 ms, min= 14861.0 ms, max= 15155.0 ms

        If we run the test with DumpRenderTree, we can get the following test results:
        Info: [HTMLElement.id] avg=65.76ms, median=65.00ms, stdev=2.14ms, min=63, max=70
        Info: [HTMLElement.title] avg=64.05ms, median=63.00ms, stdev=1.50ms, min=63, max=67
        Info: [HTMLElement.lang] avg=64.19ms, median=63.00ms, stdev=1.82ms, min=62, max=67
        Info: [HTMLElement.dir] avg=64.10ms, median=63.00ms, stdev=1.72ms, min=62, max=68
        Info: [HTMLElement.className] avg=63.33ms, median=63.00ms, stdev=0.89ms, min=63, max=67
        Info: [HTMLElement.classList] avg=1946.00ms, median=1945.00ms, stdev=38.22ms, min=1921, max=2110
        Info: [HTMLElement.tabIndex] avg=83.52ms, median=80.00ms, stdev=6.00ms, min=79, max=94
        Info: [HTMLElement.draggable] avg=78.14ms, median=81.00ms, stdev=3.51ms, min=74, max=82
        Info: [HTMLElement.webkitdropzone] avg=64.33ms, median=63.00ms, stdev=1.98ms, min=63, max=68
        Info: [HTMLElement.hidden] avg=65.57ms, median=64.00ms, stdev=3.27ms, min=63, max=71
        Info: [HTMLElement.accessKey] avg=64.43ms, median=63.00ms, stdev=2.11ms, min=62, max=68
        Info: [HTMLElement.children] avg=130.76ms, median=128.00ms, stdev=9.75ms, min=109, max=143
        Info: [HTMLElement.isContentEditable] avg=74.29ms, median=75.00ms, stdev=2.00ms, min=71, max=77
        Info: [HTMLElement.spellcheck] avg=79.52ms, median=80.00ms, stdev=2.52ms, min=76, max=82
        Info: [HTMLElement.innerHTML] avg=279.05ms, median=279.00ms, stdev=1.96ms, min=276, max=283
        Info: [HTMLElement.innerText] avg=204.14ms, median=203.00ms, stdev=2.95ms, min=200, max=210
        Info: [HTMLElement.outerHTML] avg=1544.10ms, median=1546.00ms, stdev=15.56ms, min=1514, max=1568
        Info: [HTMLElement.outerText] avg=216.05ms, median=207.00ms, stdev=18.19ms, min=201, max=247
        Info: [HTMLElement.contentEditable] avg=334.24ms, median=323.00ms, stdev=36.06ms, min=318, max=446
        Info: [HTMLElement.id="foo"] avg=53.19ms, median=53.00ms, stdev=1.76ms, min=52, max=58
        Info: [HTMLElement.title="foo"] avg=63.14ms, median=63.00ms, stdev=0.35ms, min=63, max=64
        Info: [HTMLElement.lang="foo"] avg=60.86ms, median=61.00ms, stdev=0.56ms, min=60, max=62
        Info: [HTMLElement.dir="foo"] avg=53.57ms, median=54.00ms, stdev=0.58ms, min=53, max=55
        Info: [HTMLElement.className="foo"] avg=64.52ms, median=64.00ms, stdev=0.91ms, min=63, max=66
        Info: [HTMLElement.tabIndex="foo"] avg=367.86ms, median=369.00ms, stdev=8.06ms, min=352, max=380
        Info: [HTMLElement.draggable="foo"] avg=79.43ms, median=79.00ms, stdev=0.58ms, min=79, max=81
        Info: [HTMLElement.webkitdropzone="foo"] avg=62.14ms, median=62.00ms, stdev=0.35ms, min=62, max=63
        Info: [HTMLElement.hidden="foo"] avg=61.67ms, median=62.00ms, stdev=0.71ms, min=61, max=64
        Info: [HTMLElement.accessKey="foo"] avg=61.86ms, median=62.00ms, stdev=0.56ms, min=61, max=63
        Info: [HTMLElement.spellcheck="foo"] avg=79.57ms, median=80.00ms, stdev=0.58ms, min=78, max=80
        Info: [HTMLElement.innerHTML="foo"] avg=1176.67ms, median=1169.00ms, stdev=26.60ms, min=1146, max=1246
        Info: [HTMLElement.innerText="foo"] avg=51.62ms, median=52.00ms, stdev=0.72ms, min=50, max=53
        Info: [Element.tagName] avg=79.52ms, median=80.00ms, stdev=1.05ms, min=78, max=81
        Info: [Element.style] avg=126.19ms, median=126.00ms, stdev=10.40ms, min=104, max=161
        Info: [Element.offsetLeft] avg=98.95ms, median=104.00ms, stdev=4.01ms, min=100, max=99
        Info: [Element.clientLeft] avg=98.33ms, median=102.00ms, stdev=2.59ms, min=100, max=99
        Info: [Element.scrollLeft] avg=103.29ms, median=96.00ms, stdev=15.63ms, min=100, max=97
        Info: [Element.dataset] avg=2448.62ms, median=2441.00ms, stdev=20.43ms, min=2426, max=2503
        Info: [Element.firstElementChild] avg=58.71ms, median=58.00ms, stdev=2.37ms, min=57, max=65
        Info: [Element.lastElementChild] avg=56.33ms, median=55.00ms, stdev=1.83ms, min=54, max=59
        Info: [Element.previousElementSibling] avg=52.95ms, median=52.00ms, stdev=1.70ms, min=52, max=57
        Info: [Element.nextElementSibling] avg=58.48ms, median=58.00ms, stdev=1.79ms, min=57, max=63
        Info: [Element.childElementCount] avg=64.57ms, median=64.00ms, stdev=1.81ms, min=63, max=71
        Info: [Element.onload] avg=98.38ms, median=98.00ms, stdev=0.49ms, min=98, max=99
        Info: [Element.scrollLeft="foo"] avg=95.24ms, median=95.00ms, stdev=0.92ms, min=94, max=98
        Info: [Element.onload="foo"] avg=67.14ms, median=67.00ms, stdev=0.56ms, min=66, max=68
        Info: [Node.nodeName] avg=76.29ms, median=76.00ms, stdev=0.63ms, min=75, max=77
        Info: [Node.nodeType] avg=53.05ms, median=52.00ms, stdev=2.61ms, min=52, max=61
        Info: [Node.parentNode] avg=53.52ms, median=53.00ms, stdev=1.22ms, min=52, max=56
        Info: [Node.childNodes] avg=118.33ms, median=123.00ms, stdev=8.85ms, min=107, max=129
        Info: [Node.firstChild] avg=53.62ms, median=53.00ms, stdev=1.13ms, min=51, max=55
        Info: [Node.lastChild] avg=53.14ms, median=53.00ms, stdev=1.21ms, min=52, max=55
        Info: [Node.previousSibling] avg=51.86ms, median=51.00ms, stdev=1.55ms, min=50, max=54
        Info: [Node.nextSibling] avg=52.86ms, median=54.00ms, stdev=1.81ms, min=50, max=55
        Info: [Node.attributes] avg=2027.71ms, median=2026.00ms, stdev=10.48ms, min=2010, max=2051
        Info: [Node.ownerDocument] avg=152.14ms, median=152.00ms, stdev=1.73ms, min=149, max=155
        Info: [Node.namespaceURI] avg=60.86ms, median=59.00ms, stdev=3.85ms, min=56, max=66
        Info: [Node.localName] avg=60.00ms, median=59.00ms, stdev=2.71ms, min=57, max=66
        Info: [Node.baseURI] avg=671.10ms, median=668.00ms, stdev=10.66ms, min=659, max=706
        Info: [Node.parentElement] avg=55.05ms, median=56.00ms, stdev=2.15ms, min=52, max=58
        Info: [Node.nodeValue] avg=61.24ms, median=60.00ms, stdev=2.56ms, min=59, max=68
        Info: [Node.prefix] avg=60.90ms, median=58.00ms, stdev=4.26ms, min=57, max=68
        Info: [Node.textContent] avg=149.71ms, median=149.00ms, stdev=1.12ms, min=148, max=152
        Info: [Node.nodeValue="foo"] avg=23.62ms, median=23.00ms, stdev=0.72ms, min=23, max=25
        Info: [Node.prefix="foo"] avg=49.57ms, median=49.00ms, stdev=0.73ms, min=49, max=51
        Info: [Node.textContent="foo"] avg=145.81ms, median=140.00ms, stdev=17.43ms, min=138, max=199

        * Bindings/dom_attributes.html: Added.
        * resources/runner.js:
        (PerfTestRunner.info):

2012-02-22  Kentaro Hara  <haraken@chromium.org>

        Add performance tests for the Element.id getter and setter
        https://bugs.webkit.org/show_bug.cgi?id=79209

        Reviewed by Adam Barth.

        This patch adds performance tests for the Element.id getter and setter.

        The results of 10 runs in my local Chromium/Linux are as follows:

        dom_attributes_id_getter.html:
        median= 92.0 ms, stdev= 1.65151445649 ms, min= 89.0 ms, max= 96.0 ms
        median= 87.5 ms, stdev= 1.84390889146 ms, min= 85.0 ms, max= 92.0 ms
        median= 94.0 ms, stdev= 1.46543508898 ms, min= 90.0 ms, max= 95.0 ms
        median= 86.0 ms, stdev= 1.66958078571 ms, min= 84.0 ms, max= 91.0 ms
        median= 94.0 ms, stdev= 2.25610283454 ms, min= 103.0 ms, max= 98.0 ms
        median= 86.0 ms, stdev= 1.49666295471 ms, min= 84.0 ms, max= 91.0 ms
        median= 86.0 ms, stdev= 1.5321553446 ms, min= 84.0 ms, max= 90.0 ms
        median= 86.0 ms, stdev= 2.20227155455 ms, min= 84.0 ms, max= 94.0 ms
        median= 96.0 ms, stdev= 1.74570902501 ms, min= 101.0 ms, max= 99.0 ms
        median= 86.0 ms, stdev= 1.63935963108 ms, min= 84.0 ms, max= 90.0 ms
        median= 94.0 ms, stdev= 1.49248115566 ms, min= 90.0 ms, max= 95.0 ms
        median= 88.0 ms, stdev= 5.20192272146 ms, min= 84.0 ms, max= 98.0 ms
        median= 86.0 ms, stdev= 1.41067359797 ms, min= 84.0 ms, max= 89.0 ms
        median= 86.0 ms, stdev= 1.48660687473 ms, min= 84.0 ms, max= 89.0 ms
        median= 94.0 ms, stdev= 1.58113883008 ms, min= 93.0 ms, max= 97.0 ms
        median= 86.0 ms, stdev= 1.95959179423 ms, min= 84.0 ms, max= 93.0 ms
        median= 86.0 ms, stdev= 1.8547236991 ms, min= 84.0 ms, max= 92.0 ms
        median= 86.0 ms, stdev= 1.39283882772 ms, min= 84.0 ms, max= 89.0 ms
        median= 88.0 ms, stdev= 1.48660687473 ms, min= 85.0 ms, max= 90.0 ms
        median= 86.5 ms, stdev= 2.3 ms, min= 84.0 ms, max= 93.0 ms

        dom_attributes_id_setter.html:
        median= 123.0 ms, stdev= 2.06397674406 ms, min= 119.0 ms, max= 128.0 ms
        median= 119.0 ms, stdev= 1.92028643697 ms, min= 117.0 ms, max= 123.0 ms
        median= 121.0 ms, stdev= 1.8781639971 ms, min= 118.0 ms, max= 123.0 ms
        median= 123.0 ms, stdev= 2.21585198062 ms, min= 119.0 ms, max= 130.0 ms
        median= 124.5 ms, stdev= 2.36378933071 ms, min= 119.0 ms, max= 129.0 ms
        median= 122.0 ms, stdev= 2.4474476501 ms, min= 118.0 ms, max= 128.0 ms
        median= 123.0 ms, stdev= 1.76351920885 ms, min= 118.0 ms, max= 125.0 ms
        median= 119.0 ms, stdev= 1.79652442232 ms, min= 117.0 ms, max= 125.0 ms
        median= 121.0 ms, stdev= 1.49916643506 ms, min= 119.0 ms, max= 123.0 ms
        median= 119.5 ms, stdev= 1.85135085816 ms, min= 117.0 ms, max= 125.0 ms
        median= 124.0 ms, stdev= 1.43090880213 ms, min= 120.0 ms, max= 124.0 ms
        median= 122.0 ms, stdev= 1.45859521458 ms, min= 118.0 ms, max= 123.0 ms
        median= 123.0 ms, stdev= 1.50332963784 ms, min= 120.0 ms, max= 124.0 ms
        median= 123.0 ms, stdev= 1.3638181697 ms, min= 120.0 ms, max= 125.0 ms
        median= 119.0 ms, stdev= 1.43527000944 ms, min= 117.0 ms, max= 121.0 ms
        median= 122.5 ms, stdev= 1.71682847134 ms, min= 118.0 ms, max= 124.0 ms
        median= 121.0 ms, stdev= 1.44481832768 ms, min= 118.0 ms, max= 123.0 ms
        median= 120.0 ms, stdev= 1.40978721799 ms, min= 117.0 ms, max= 122.0 ms
        median= 122.0 ms, stdev= 1.68522995464 ms, min= 119.0 ms, max= 125.0 ms
        median= 122.0 ms, stdev= 1.55804364509 ms, min= 118.0 ms, max= 123.0 ms


        * Bindings/dom_attributes_id_getter.html: Added.
        * Bindings/dom_attributes_id_setter.html: Added.
        * Bindings/resources/dom_attributes_common.js: Added.

2012-02-16  Alexis Menard  <alexis.menard@openbossa.org>

        Add a perf test for the CSS parser.
        https://bugs.webkit.org/show_bug.cgi?id=78114

        Reviewed by Ryosuke Niwa.

        Add a perf test for the CSS parser. It load a big CSS chunk
        which contains some snippets of the YUI library from Yahoo!.

        * Parser/css-parser-yui.html: Added.

2012-02-08  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] sunspider-crypto-md5.html and sunspider-crypto-sha1.html are timing out on cr-mac perf bot
        https://bugs.webkit.org/show_bug.cgi?id=78174

        Reviewed by Ryosuke Niwa.

        Pulled back removed files.

        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-md5.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-sha1.html: Added.

2012-02-02  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Each Dromaeo test needs its landing html.
        https://bugs.webkit.org/show_bug.cgi?id=77504

        Reviewed by Ryosuke Niwa.

        - Added landing pages for each test which are listed in MANIFEST.json
        - Removed some tests which depends on the library whose license is incompatible to WebKit.
        - Added local copy of corresponding library. And replace the references to the remote sources
          to the local copies.
        - Removed old library files under Dromaeo/resources/dromaeo/web/lib/.
        - Skipped Sunsupier and v8 test. Such JS centric test should have its own test instead of
          running as a part of Dromaeo.

        * Dromaeo/cssquery-dojo.html: Added.
        * Dromaeo/cssquery-jquery.html: Added.
        * Dromaeo/cssquery-prototype.html: Added.
        * Dromaeo/dom-attr.html: Added.
        * Dromaeo/dom-modify.html: Added.
        * Dromaeo/dom-traverse.html: Added.
        * Dromaeo/dromaeo-3d-cube.html: Added.
        * Dromaeo/dromaeo-core-eval.html: Added.
        * Dromaeo/dromaeo-object-array.html: Added.
        * Dromaeo/dromaeo-object-regexp.html: Added.
        * Dromaeo/dromaeo-object-string.html: Added.
        * Dromaeo/dromaeo-string-base64.html: Added.
        * Dromaeo/jslib-attr-jquery.html: Added.
        * Dromaeo/jslib-attr-prototype.html: Added.
        * Dromaeo/jslib-event-jquery.html: Added.
        * Dromaeo/jslib-event-prototype.html: Added.
        * Dromaeo/jslib-modify-jquery.html: Added.
        * Dromaeo/jslib-modify-prototype.html: Added.
        * Dromaeo/jslib-style-jquery.html: Added.
        * Dromaeo/jslib-style-prototype.html: Added.
        * Dromaeo/jslib-traverse-jquery.html: Added.
        * Dromaeo/jslib-traverse-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/lib/dojo.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/dojo-1.6.1.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/jquery.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/jquery-1.6.4.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/mootools.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/prototype.js: Removed.
        * Dromaeo/resources/dromaeo/web/lib/prototype-1.7.js: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-dojo.html:
        * Dromaeo/resources/dromaeo/web/tests/cssquery-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/cssquery-mootools.html: Removed.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-prototype.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-jquery.html:
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-prototype.html:
        * Dromaeo/sunspider-3d-morph.html: Added.
        * Dromaeo/sunspider-3d-raytrace.html: Added.
        * Dromaeo/sunspider-access-binary-trees.html: Added.
        * Dromaeo/sunspider-access-fannkuch.html: Added.
        * Dromaeo/sunspider-access-nbody.html: Added.
        * Dromaeo/sunspider-access-nsieve.html: Added.
        * Dromaeo/sunspider-bitops-3bit-bits-in-byte.html: Added.
        * Dromaeo/sunspider-bitops-bits-in-byte.html: Added.
        * Dromaeo/sunspider-bitops-bitwise-and.html: Added.
        * Dromaeo/sunspider-bitops-nsieve-bits.html: Added.
        * Dromaeo/sunspider-controlflow-recursive.html: Added.
        * Dromaeo/sunspider-crypto-aes.html: Added.
        * Dromaeo/sunspider-crypto-md5.html: Added.
        * Dromaeo/sunspider-crypto-sha1.html: Added.
        * Dromaeo/sunspider-date-format-tofte.html: Added.
        * Dromaeo/sunspider-date-format-xparb.html: Added.
        * Dromaeo/sunspider-math-cordic.html: Added.
        * Dromaeo/sunspider-math-partial-sums.html: Added.
        * Dromaeo/sunspider-math-spectral-norm.html: Added.
        * Dromaeo/sunspider-regexp-dna.html: Added.
        * Dromaeo/sunspider-string-fasta.html: Added.
        * Dromaeo/sunspider-string-tagcloud.html: Added.
        * Dromaeo/sunspider-string-unpack-code.html: Added.
        * Dromaeo/sunspider-string-validate-input.html: Added.
        * Dromaeo/v8-crypto.html: Added.
        * Dromaeo/v8-deltablue.html: Added.
        * Dromaeo/v8-earley-boyer.html: Added.
        * Dromaeo/v8-raytrace.html: Added.
        * Dromaeo/v8-richards.html: Added.
        * Skipped:

2012-02-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r106543.
        http://trac.webkit.org/changeset/106543
        https://bugs.webkit.org/show_bug.cgi?id=77671

        Made tests less stable (Requested by rniwa on #webkit).

        * resources/init.html: Removed.

2012-02-02  Ryosuke Niwa  <rniwa@webkit.org>

        [PerformanceTests] tests have dependencies
        https://bugs.webkit.org/show_bug.cgi?id=77506

        Reviewed by Hajime Morita.

        * resources/init.html: Added.

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Fix after r106386. The empty anchor element was generating an erroneous whitespace.

        * Bindings/event-target-wrapper.html:

2012-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Another fix after r106379.

        * Parser/html5-full-render.html:

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        Import Dromaeo to WebKit repository.
        https://bugs.webkit.org/show_bug.cgi?id=77328

        Reviewed by Ryosuke Niwa.

        Imported a modified version of Dromaeo which is able to
        run on the DRT.

        The imported version originally came from:
        https://github.com/omo/dromaeo/commit/c942a1452109cdd5f759b3c4aee8d68d490d44a2

        * Dromaeo/resources/dromaeo/web/application.css: Added.
        * Dromaeo/resources/dromaeo/web/favicon.ico: Added.
        * Dromaeo/resources/dromaeo/web/favicon.png: Added.
        * Dromaeo/resources/dromaeo/web/htmlrunner.js: Added.
        * Dromaeo/resources/dromaeo/web/ie.css: Added.
        * Dromaeo/resources/dromaeo/web/images/bg.png: Added.
        * Dromaeo/resources/dromaeo/web/images/clouds.png: Added.
        * Dromaeo/resources/dromaeo/web/images/clouds2.png: Added.
        * Dromaeo/resources/dromaeo/web/images/comets.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino1.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino2.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino3.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino4.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino5.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino6.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino7.png: Added.
        * Dromaeo/resources/dromaeo/web/images/dino8.png: Added.
        * Dromaeo/resources/dromaeo/web/images/left.png: Added.
        * Dromaeo/resources/dromaeo/web/images/logo.png: Added.
        * Dromaeo/resources/dromaeo/web/images/logo2.png: Added.
        * Dromaeo/resources/dromaeo/web/images/logo3.png: Added.
        * Dromaeo/resources/dromaeo/web/images/right.png: Added.
        * Dromaeo/resources/dromaeo/web/images/top.png: Added.
        * Dromaeo/resources/dromaeo/web/images/water.png: Added.
        * Dromaeo/resources/dromaeo/web/index.html: Added.
        * Dromaeo/resources/dromaeo/web/jquery.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/dojo.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/jquery.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/mootools.js: Added.
        * Dromaeo/resources/dromaeo/web/lib/prototype.js: Added.
        * Dromaeo/resources/dromaeo/web/pngfix.js: Added.
        * Dromaeo/resources/dromaeo/web/reset.css: Added.
        * Dromaeo/resources/dromaeo/web/test-head.html: Added.
        * Dromaeo/resources/dromaeo/web/test-head.js: Added.
        * Dromaeo/resources/dromaeo/web/test-tail.html: Added.
        * Dromaeo/resources/dromaeo/web/test-tail.js: Added.
        * Dromaeo/resources/dromaeo/web/tests/MANIFEST.json: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-dojo.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-mootools.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/cssquery-yui.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-attr.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-modify.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-query.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dom-traverse.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-3d-cube.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-core-eval.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-object-array.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-object-regexp.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-object-string.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/dromaeo-string-base64.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-attr-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-event-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-modify-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-style-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-jquery.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/jslib-traverse-prototype.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-3d-morph.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-3d-raytrace.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-binary-trees.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-fannkuch.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-nbody.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-access-nsieve.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-3bit-bits-in-byte.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-bits-in-byte.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-bitwise-and.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-bitops-nsieve-bits.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-controlflow-recursive.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-aes.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-md5.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-crypto-sha1.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-date-format-tofte.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-date-format-xparb.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-cordic.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-partial-sums.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-math-spectral-norm.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-regexp-dna.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-fasta.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-tagcloud.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-unpack-code.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/sunspider-string-validate-input.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-crypto.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-deltablue.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-earley-boyer.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-raytrace.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/v8-richards.html: Added.
        * Dromaeo/resources/dromaeo/web/tests/72px.png: Added.
        * Dromaeo/resources/dromaeo/web/web-style.css: Added.
        * Dromaeo/resources/dromaeo/web/webrunner.js: Added.
        * Skipped: Unskip the dromaeo driver.

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Fix Parser/html5-full-render.html after r106379.

        * Parser/html5-full-render.html:

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner should automatically create pre#log
        https://bugs.webkit.org/show_bug.cgi?id=77469

        Reviewed by Tony Chang.

        Automatically generate <pre id="log"></pre> if there isn't one.

        * Bindings/event-target-wrapper.html:
        * DOM/Accessors.html:
        * DOM/CloneNodes.html:
        * DOM/CreateNodes.html:
        * DOM/DOMDivWalk.html:
        * DOM/DOMTable.html:
        * DOM/DOMWalk.html:
        * DOM/Events.html:
        * DOM/GetElement.html:
        * DOM/GridSort.html:
        * DOM/Template.html:
        * Dromaeo/dom-query.html:
        * Dromaeo/resources/dromaeorunner.js:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * resources/runner.js:
        (PerfTestRunner.log):
        (PerfTestRunner.printStatistics):

2012-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        runner.js in performance tests should define a class
        https://bugs.webkit.org/show_bug.cgi?id=77074

        Reviewed by Eric Seidel.

        Wrap all functions in runner.js by PerfTestRunner and update tests that runner.js accordingly.
        Also replace compute* functions in runner.js by more robust code from dom-perf.js.

        * Bindings/event-target-wrapper.html:
        * DOM/DOMTable.html:
        * DOM/resources/dom-perf.js:
        (BenchmarkSuite.prototype.RunSingle):
        (runBenchmarkSuite):
        * Mutation/append-child-deep.html:
        * Mutation/append-child.html:
        * Mutation/inner-html.html:
        * Mutation/remove-child-deep.html:
        * Mutation/remove-child.html:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * resources/runner.js:
        (PerfTestRunner.log):
        (PerfTestRunner.logInfo):
        (PerfTestRunner.loadFile):
        (PerfTestRunner.computeStatistics):
        (PerfTestRunner.logStatistics):
        (PerfTestRunner._runLoop.else):
        (PerfTestRunner._runLoop):
        (PerfTestRunner._runner):

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        [PerformanceTests] Add landing html for Dromaeo dom-query test
        https://bugs.webkit.org/show_bug.cgi?id=77329

        Reviewed by Ryosuke Niwa.

        Added a "landing html" which includes actual dromaemo page and
        send messages to interact with it. The landing html also dumps the
        score in run-perf-tests friendly format.

        This test isn't enabled until Dromaemo itself is available for run-perf-tests.
        It will happen in a separate change.

        * Dromaeo/dom-query.html: Added.
        * Dromaeo/resources/dromaeorunner.js: Added.
        * Skipped: Skipping this for now.

2012-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Skip inspector tests since they have been timing out.

        * Skipped:

2012-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        DOM/DOMDivWalk.html result is unreliable
        https://bugs.webkit.org/show_bug.cgi?id=77313

        Reviewed by Adam Barth.

        Trigger garbage collection manually between test runs to avoid GC
        to occur in the middle of runs.

        * DOM/resources/dom-perf.js:
        (BenchmarkSuite.prototype.RunSingle):
        * resources/runner.js:
        (gc.else.gcRec):
        (gc):
        (runLoop):

2012-01-26  Ryosuke Niwa  <rniwa@webkit.org>

        Import Chromium's dom_perf test
        https://bugs.webkit.org/show_bug.cgi?id=77175

        Reviewed by Adam Barth.

        Import dom_perf.

        Note resources/dom/suites.js isn't used by any html file yet but it will be used by Chromium port
        once its perf bots start pulling test files from WebKit repository instead of Google's internal repository.

        * DOM: Added.
        * DOM/Accessors.html: Added.
        * DOM/CloneNodes.html: Added.
        * DOM/CreateNodes.html: Added.
        * DOM/DOMDivWalk.html: Added.
        * DOM/DOMTable.html: Added.
        * DOM/DOMWalk.html: Added.
        * DOM/Events.html: Added.
        * DOM/GetElement.html: Added.
        * DOM/GridSort.html: Added.
        * DOM/Template.html: Added.
        * DOM/resources: Added.
        * DOM/resources/dom-perf.js: Added.
        * DOM/resources/dom-perf: Added.
        * DOM/resources/dom-perf/accessors.js: Added.
        * DOM/resources/dom-perf/clonenodes.js: Added.
        * DOM/resources/dom-perf/createnodes.js: Added.
        * DOM/resources/dom-perf/domdivwalk.js: Added.
        * DOM/resources/dom-perf/domtable.js: Added.
        * DOM/resources/dom-perf/domwalk.js: Added.
        * DOM/resources/dom-perf/events.js: Added.
        * DOM/resources/dom-perf/getelement.js: Added.
        * DOM/resources/dom-perf/gridsort.js: Added.
        * DOM/resources/dom-perf/suites.js: Added.
        * DOM/resources/dom-perf/template.js: Added.
        * resources/runner.js:

2012-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        html5-full-render.html fails due to a log
        https://bugs.webkit.org/show_bug.cgi?id=77046

        Reviewed by Adam Barth.

        Replace the call to log() in html5-full-render.html by a call to newly added logInfo(),
        which doesn't print anything inside DRT.

        * Parser/html5-full-render.html:
        * resources/runner.js:
        (logInfo):

2012-01-19  Adam Barth  <abarth@webkit.org>

        PerformanceTests's runner.js shouldn't be Parser-specific
        https://bugs.webkit.org/show_bug.cgi?id=76670

        Reviewed by Ryosuke Niwa.

        This runner script is used by a bunch of difference performance tests.
        It shouldn't be in the Parser directory anymore.

        * Bindings/event-target-wrapper.html:
        * Mutation/append-child-deep.html:
        * Mutation/append-child.html:
        * Mutation/inner-html.html:
        * Mutation/remove-child-deep.html:
        * Mutation/remove-child.html:
        * Parser/html-parser.html:
        * Parser/html5-full-render.html:
        * Parser/resources/runner.js: Removed.
        * Parser/simple-url.html:
        * Parser/tiny-innerHTML.html:
        * Parser/url-parser.html:
        * Parser/xml-parser.html:
        * resources: Added.
        * resources/runner.js: Copied from PerformanceTests/Parser/resources/runner.js.

2012-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        Some perf tests time out when ran by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=76612

        Reviewed by Dirk Pranke and Eric Seidel.

        Replace all images in html5.html by geenbox.png to avoid accessing whatwg.org when
        running the parser tests. Also call dumpAsText, waitUntilDone, and notifyDone automatically
        inside runner.js to avoid having to call them in individual tests.

        * Bindings/event-target-wrapper.html: Removed calls to layoutTestController methods since
        they are now called by runner.js automatically.
        * Parser/resources/greenbox.png: Copied from LayoutTests/fast/css/resources/greenbox.png.
        * Parser/resources/html5.html:
        * Parser/resources/runner.js:
        (runLoop):

2012-01-18  Ryosuke Niwa  <rniwa@webkit.org>

        run-perf-tests should support Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=76594

        Reviewed by Adam Barth.

        Add Skipped list to be used by run-perf-tests as it can only runs tests in
        Bindings, Parser, and inspector at the moment.

        * Skipped: Added.

2012-01-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: performance: restore 'log 300 messages into console' test.
        https://bugs.webkit.org/show_bug.cgi?id=76170

        It was removed in order of transition from layout tests to perf tests.

        Reviewed by Yury Semikhatsky.

        * inspector/console-300-lines.html: Added.

2012-01-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: performance tests: fix memory leak in first-open-resources test.
        https://bugs.webkit.org/show_bug.cgi?id=76049

        first-open-resources doesn't reset resource panel properly after test run.

        Reviewed by Yury Semikhatsky.

        * inspector/first-open-resources.html:

2012-01-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. WebInspector: Remove unnecessary logging from the test.

        * inspector/first-open-resources.html:

2012-01-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Restore test that was removed during migration from LayoutTests folder.

        * inspector/first-open-resources.html: Added.

2012-01-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed test fix after r103683.

        * inspector/first-open-scripts.html:
        * inspector/show-panel.html:

2012-01-03  Adam Barth  <abarth@webkit.org>

        html-parser.html takes too long to run
        https://bugs.webkit.org/show_bug.cgi?id=75515

        Reviewed by Eric Seidel.

        In working on runner.js, we introduced a factor of 10 increase to the
        running time of this benchmark.  This patch dials down the number of
        iterations to something more user-friendly.

        * Parser/html-parser.html:

2011-12-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: move heap data stats to separate tab.
        https://bugs.webkit.org/show_bug.cgi?id=74704

        Reviewed by Pavel Feldman.

        * inspector/performance-test.js:
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):

2011-12-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: chromium: move and adapt Inspector's performance tests for running with run-inspector-perf-tests.py.
        https://bugs.webkit.org/show_bug.cgi?id=72260

        Reviewed by Pavel Feldman.

        * inspector/first-open-elements.html: Renamed from LayoutTests/inspector/performance/resources/first-open-elements.html.
        * inspector/first-open-scripts.html: Renamed from LayoutTests/inspector/performance/resources/first-open-scripts.html.
        * inspector/inspector-startup-time.html: Renamed from LayoutTests/inspector/performance/resources/inspector-startup-time.html.
        * inspector/network-append-30-requests.html: Renamed from LayoutTests/inspector/performance/resources/network-append-30-requests.html.
        * inspector/performance-test.js: Renamed from LayoutTests/inspector/performance/resources/performance-test.js.
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.start):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.finish):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._getJSHeapSize):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype.done):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._runTest):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest.Timer.prototype._dump):
        (initialize_TimeTracker.InspectorTest.runPerformanceTest):
        (initialize_TimeTracker.InspectorTest.mark):
        * inspector/show-panel.html: Renamed from LayoutTests/inspector/performance/resources/show-panel.html.

2011-11-09  Adam Klein  <adamk@chromium.org>

        [MutationObservers] Microbenchmarks for appendChild, removeChild, and innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=71939

        Reviewed by Ojan Vafai.

        These benchmarks time both the DOM mutations themselves and the time taken
        to call the MutationCallback. This measurement is achieved by
        executing the code entirely within the MutationCallback itself.

        * Mutation/append-child-deep.html: Added. Covers appendChild in a 200-node-deep tree with subtree observation.
        * Mutation/append-child.html: Added. Covers appendChild in a flat tree.
        * Mutation/inner-html.html: Added. Covers innerHTML adding and removing many nodes at a time.
        * Mutation/remove-child-deep.html: Added. Covers removeChild in a 200-node-deep tree with subtree observation.
        * Mutation/remove-child.html: Added. Covers removeChild in a flat tree.

2011-10-25  Adam Barth  <abarth@webkit.org>

        EventTargetFactory.in is not sorted
        https://bugs.webkit.org/show_bug.cgi?id=70855

        Reviewed by Eric Seidel.

        Add a microbenchmark for wrapping event target.

        * Bindings: Added.
        * Bindings/event-target-wrapper.html: Added.
        * Parser/resources/runner.js:
        (runLoop):
            - Let the user of the harness get a callback when the test is done.

2011-10-04  Eric Seidel  <eric@webkit.org>

        Update html5-full-render.html to load the HTML5 spec incrementally, closer to how the browser would
        https://bugs.webkit.org/show_bug.cgi?id=69374

        Unreviewed.

        Per https://bugs.webkit.org/show_bug.cgi?id=69374#c7
        updating the chunksize to be a bit smaller now that the total
        size of the html5 spec is smaller than when I wrote the test.

        This should increase the prevalence of style resolution in the
        sample time, which more closely matches instrument samples
        taken when loading the full page in Safari.

        * Parser/html5-full-render.html:

2011-10-04  Eric Seidel  <eric@webkit.org>

        Update html5-full-render.html to load the HTML5 spec incrementally, closer to how the browser would
        https://bugs.webkit.org/show_bug.cgi?id=69374

        Reviewed by James Robinson.

        This should finally be able to provide us with a repeatable metric
        for how fast we're currently able to load the HTML5 spec.
        There are a variety of interesting functions which show up in this
        sample, including of course style resolution.

        * Parser/html5-full-render.html:

2011-10-04  Eric Seidel  <eric@webkit.org>

        Update our copy of the HTML5 spec used for performance testing to match the latest version
        https://bugs.webkit.org/show_bug.cgi?id=69364

        Unreviewed.  The patch is too large to post, so landing this unreviewed. :(

        The copy of the html5 spec we were using for testing was over a year old
        and didn't have any of the subresources with it (we were only using it
        as an HTML parsing benchmark).  I'm about to use it for testing
        the full load/render time of the benchmark, so I've updated to the latest
        version of the spec (now 8mb instead of 5mb) and inlined two of the
        CSS files.  (Inlining the CSS was necessary to make my testing consistent
        as there seems to be a race with some timer fired after CSS load.)

        Increasing from 5mb to 8mb showed a similar 30% slowdown in our parser
        benchmarks as expected.

        * Parser/resources/html5.html:

2011-10-04  Eric Seidel  <eric@webkit.org>

        Add loopsPerRun option to Parser performance test runner
        https://bugs.webkit.org/show_bug.cgi?id=69363

        Reviewed by Antti Koivisto.

        Add loopsPerRun option and abstract out runLoop function (to make the UI more responsive).
        No change in behavior in any of the tests.

        * Parser/resources/runner.js:
        (runLoop):
        (run):
        (start):

2011-10-03  Eric Seidel  <eric@webkit.org>

        Add a microbenchmark for a full-page render of the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=69285

        Reviewed by Adam Barth.

        This was designed to be a test for https://bugs.webkit.org/show_bug.cgi?id=68944
        But it seems that by far our dominating cost for the HTML5 benchmark is
        time spent laying out lines (which isn't actually that surprising).

        I'm adding the performance test for posterity.

        * Parser/html-parser.html:
         - Removed use of "about:blank" which abarth says is a no-op.  Made comment more accurate.
        * Parser/html5-full-render.html: Copied from PerformanceTests/Parser/html-parser.html.

2011-10-03  Eric Seidel  <eric@webkit.org>

        PerformanceTests/Parser/html-parser is only testing parsing of the head element
        https://bugs.webkit.org/show_bug.cgi?id=69283

        Reviewed by Adam Barth.

        While investigating https://bugs.webkit.org/show_bug.cgi?id=68944
        I found that the html-parser benchmark was only parsing up to the
        first script tag per loop!  We've fixed this by adding the sandbox
        tag which will deny all external loads and allow the parser to
        synchronously continue parsing the entire document to completion
        (as we had expected it was doing).

        This changes the profile somewhat.  Line number counting is much
        hotter, since we're actually accounting for the parse of the entire
        document in our sample.

        Total sample time only about doubles, from 1800ms to 3800ms on my machine
        which is less than I would have expected.

        * Parser/html-parser.html:

2011-08-09  Alexandru Chiculita  <achicu@adobe.com>

        Fixing 65868 REGRESSION(r92610) caused by 65668 - Optimize floating elements lookup
        https://bugs.webkit.org/show_bug.cgi?id=65871

        Reviewed by Dave Hyatt.

        * Layout/floats.html: Added the nested divs, so that we can test the propagation impact of the floats tree.

2011-08-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r92610.
        http://trac.webkit.org/changeset/92610
        https://bugs.webkit.org/show_bug.cgi?id=65868

        Caused assertion failures when running fast/multicol tests
        (Requested by andersca on #webkit).

        * Layout/floats.html:

2011-08-08  Alexandru Chiculita  <achicu@adobe.com>

        Optimize floating elements lookup
        https://bugs.webkit.org/show_bug.cgi?id=65668

        Reviewed by David Hyatt.

        * Layout/floats.html: Added the nested divs, so that we can test the propagation impact of the floats tree.

2011-08-04  Alexandru Chiculita  <achicu@adobe.com>

        Add a performance test for floating elements layout algorithm
        https://bugs.webkit.org/show_bug.cgi?id=65741

        The test creating lots of small floats and randomly changes
        the width of one element at a time. It measures how often it can do that.

        Reviewed by Adam Barth.

        * Layout/floats.html: Added.

2011-05-30  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        Rename XSSFilter to XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=61718

        Currently we use the names XSSFilter and XSSAuditor throughout the project.
        Instead, we should choose one name for consistency.

        No functionality was changed. So, no new tests.

        * XSSAuditor: Copied from PerformanceTests/XSSFilter.
        * XSSFilter: Removed.
        * XSSFilter/large-post-many-events.html: Removed.
        * XSSFilter/large-post-many-inline-scripts-and-events.html: Removed.
        * XSSFilter/resources: Removed.
        * XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html: Removed.

2011-03-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        SVG <use> element performance improvement
        https://bugs.webkit.org/show_bug.cgi?id=57077

        Add a manual test case which is from
        http://upload.wikimedia.org/wikipedia/commons/4/4e/Sierpinski_carpet_6.svg
        for svg <use> element performance test.

        * PageLoad/svg/files/Sierpinski_carpet_6.svg: Added.
        * PageLoad/svg/svg.pltsuite:

2011-02-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add performance tests for URL parsing
        https://bugs.webkit.org/show_bug.cgi?id=53845

        The final-url-en URL corpus is from:
        http://corpus.leeds.ac.uk/internet.html

        There are also other language corpuses which we may want to use in the future.

        The usage instructions were as follows:
        "URL lists and other resources: you can freely use them in your research
        provided that you supply a link to this website: http://corpus.leeds.ac.uk/."
        Done.

        * Parser/simple-url.html: Added.
         On my machine:
         Firefox: 255ms
         TOT WebKit: 378ms
         Chrome: 286ms
         Opera: 2830ms (no, that is not a typo)
        * Parser/url-parser.html: Added.
         Firefox: 381ms
         TOT WebKit: 216ms
         Chrome: 131ms
         Opera: 1383ms (again, not a typo)
        * Parser/resources/final-url-en: Added.

2011-02-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Add another XSSFilter PerformanceTest
        https://bugs.webkit.org/show_bug.cgi?id=53750

        This PerformanceTest tests the case that was slow in
        https://bugs.webkit.org/show_bug.cgi?id=49845

        * XSSFilter/large-post-many-inline-scripts-and-events.html: Added.
        * XSSFilter/resources: Added.
        * XSSFilter/resources/target-for-large-post-many-inline-scripts-and-events.html: Added.

2011-02-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add PerformanceTest for XSSFilter
        https://bugs.webkit.org/show_bug.cgi?id=53741

        This performance tests covers the case of a large POST data and many
        small event handlers.

        * XSSFilter: Added.
        * XSSFilter/large-post-many-events.html: Added.

2011-02-02  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Merge PerformanceTests/Parser/ChangeLog and
        PerformanceTests/PageLoad/ChangeLog into PerformanceTests/ChangeLog.

        It's silly to have ChangeLogs for each of these directories separately.
        I've left SunSpider with its own ChangeLog because it's more of an
        independent entity.

        * ChangeLog: Added.

2011-02-02  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just fixing an exception seen in Firefox.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719

        Make the benchmarks work in Firefox/Opera.

        * resources/runner.js:
        (log):

2011-01-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719

        It's unclear exactly what the Peacekeeper benchmark is testing,
        because I haven't found a way to run it myself.

        However, I constructed a benchmark which shows at least one possible slow point.
        The HTML5 spec talks about creating a new document for every time we use
        the fragment parsing algorithm.  Document() it turns out, it a huge bloated
        mess, and the constructor and destructor do a huge amount of work.

        * benchmarks/parser/tiny-innerHTML.html: Added.

2011-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77050.
        http://trac.webkit.org/changeset/77050
        https://bugs.webkit.org/show_bug.cgi?id=53371

        Caused a crash in Chromium's test_shell_tests (Requested by
        rniwa on #webkit).

        * resources/performance-test.js: Removed.
        * tiny-innerHTML.html: Removed.

2011-01-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719

        It's unclear exactly what the Peacekeeper benchmark is testing,
        because I haven't found a way to run it myself.

        However, I constructed a benchmark which shows at least one possible slow point.
        The HTML5 spec talks about creating a new document for every time we use
        the fragment parsing algorithm.  Document() it turns out, it a huge bloated
        mess, and the constructor and destructor do a huge amount of work.
        To avoid constructing (or destructing) documents for each innerHTML call,
        this patch adds a shared dummy document used by all innerHTML calls.

        * benchmarks/parser/tiny-innerHTML.html: Added.

2010-12-31  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move HTML and XML parser benchmarks into PerformanceTests/Parser
        https://bugs.webkit.org/show_bug.cgi?id=51772

        Add a ChangeLog for tracking changes to the Parser PerformanceTest.

        * ChangeLog: Added.

2010-12-31  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move PageLoadTests to PerformanceTests/PageLoad
        https://bugs.webkit.org/show_bug.cgi?id=51771

        Update URLs to point to the new directory name.

        * svg/svg.pltsuite:

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by olliej.

        * svg/svg.pltsuite: re-enable word-iso.svg after fixing http://bugs.webkit.org/show_bug.cgi?id=11987

2006-12-26  Eric Seidel  <eric@webkit.org>

        Reviewed by bradee-oh.

        Add new PageLoadTests directory (this one)
        Add LICENSES file to explain where each SVG came from.

        * ChangeLog: Added.
        * svg/LICENSES: Added.
        * svg/files/33041-Samurai.svg: Added.
        * svg/files/42470-flower_from_my_garden_v2.svg: Added.
        * svg/files/Harvey_Rayner.svg: Added.
        * svg/files/az-lizard_benji_park_01.svg: Added.
        * svg/files/bamboo_01.svg: Added.
        * svg/files/cacuts_01.svg: Added.
        * svg/files/cowboy.svg: Added.
        * svg/files/crawfish2_ganson.svg: Added.
        * svg/files/deb9frac1.svg: Added.
        * svg/files/food_leif_lodahl_01.svg: Added.
        * svg/files/france.svg: Added.
        * svg/files/francobollo_gnome_ezechi_02.svg: Added.
        * svg/files/gearflowers.svg: Added.
        * svg/files/hereGear4.svg: Added.
        * svg/files/mtsthelens.svg: Added.
        * svg/files/mtsthelens0.jpg: Added.
        * svg/files/world-iso.svg: Added.
        * svg/files/worldcup.svg: Added.
        * svg/svg.pltsuite: Added.

