2009-06-19  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=26540
        Currently the SunSpider test driver lacks an option to run a test suite that
        will test JavaScriptCore parsing performance only.  This patch adds just such
        a test suite and option to SunSpider as well as the jsc test shell.  I've included
        three large javascript source files found in the wild: jquery, mootools and prototype.
        Combined with the concatenation of all three, these form a new testsuite to measure
        and test pure JavaScriptCore parsing performance.

        * resources/sunspider-standalone-driver.js:
          Load the js with parse-only flag if it is part of the parse-only suite.
        * sunspider:
          Add the parse-only suite to the list of options.
        * sunspider-compare-results:
          Add the parse-only suite to the list of options.
        * tests/LIST-PARSE-ONLY: Added.
        * tests/parse-only/concat-jquery-mootools-prototype.js: Added.
          A very large concatenation of the scripts found below.  This js takes ~30ms to parse on my machine.
        * tests/parse-only/jquery-1.3.2.js: Added.
          Latest version from jquery.com.
        * tests/parse-only/mootools-1.2.2-core-nc.js: Added.
          Latest version from mootools.net.
        * tests/parse-only/prototype-1.6.0.3.js: Added.
          Latest version from prototypejs.org.

2009-06-13  Steve Falkenburg  <sfalken@apple.com>

        Update V8 benchmark to version 4.
        
        Reviewed by Cameron Zwarich.

        * tests/LIST-V8:
        * tests/v8-crypto.js:
        * tests/v8-deltablue.js:
        * tests/v8-earley-boyer.js:
        * tests/v8-raytrace.js:
        * tests/v8-regexp.js: Added.
        * tests/v8-richards.js:
        * tests/v8-splay.js: Added.

2009-05-26  Olivier DOLE  <odole@pleyo.com>

        Reviewed by Maciej.

        Store sunspider test suite results in a specific directory for each
        different type of benchmark (sunspider, V8 or ubench).

        * sunspider:
        * sunspider-compare-results:

2009-05-12  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * SunSpider.make:

2009-05-11  Steve Falkenburg  <sfalken@apple.com>

        Include SunSpider tests in production builds.
        
        Reviewed by Adam Roben.

        * SunSpider.make: Added.
        * xcopy.excludes: Added.

2009-03-04  Oliver Hunt  <oliver@apple.com>

        Added a few more tests to ubench

        RS=Gavin Barraclough

        Adding a couple of test to cover too few and too many arguments.  This
        is needed to prevent regressions in all call paths from my current refactoring.

        * tests/LIST-UBENCH:
        * tests/ubench/function-correct-args.js: Added.
        (f):
        * tests/ubench/function-excess-args.js: Added.
        (f):

2008-10-30  Zoltan Horvath  <Horvath.Zoltan.6@stud.u-szeged.hu>

        Fix a bug where when V8's or UBENCH's test suite list file is missing
        the error message is suggesting that SunSpider's list file is missing.

        Reviewed by Sam Weinig.

        * sunspider:
        (loadTestsList): Fix the error message to use the right list name.

2008-10-07  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=18989

        Remove global substitution from SunSpider regexp test, since only Firefox was honoring it and
        we want all browsers to be doing the same thing on the test.

        Reviewed by Maciej

        * tests/regexp-dna.js:

2008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Maciej Stachowiak.

        The bleeding edge branch of V8 now supports passing fileanmes after
        '-f', so the SunSpider script should be changed to do this again.
        This allows all 3 major JavaScript engines to be used with the
        unmodified SunSpider script.

        * sunspider:

2008-09-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Add a '--args' option to SunSpider, so that we can pass '-j' to TraceMonkey
        and '--expose-gc' to V8. Also, rename the '--v8' option to '--v8-suite' and
        correct the punctuation in its documentation.

        * sunspider:

2008-09-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Oliver Hunt.

        Bug 20616: Incorporate V8 benchmarks in testing
        <https://bugs.webkit.org/show_bug.cgi?id=20616>

        This is a first attempt at running the V8 benchmarks within SunSpider,
        with the --v8 option. The number of iterations is fixed for each
        benchmark, and was chosen to make each of the benchmarks run between
        500 ms and 600 ms in V8 on my machine, a 2.16 GHz MacBook Pro.

        * sunspider:
        * tests/LIST-V8: Added.
        * tests/v8-crypto.js: Added.
        * tests/v8-deltablue.js: Added.
        * tests/v8-earley-boyer.js: Added.
        * tests/v8-raytrace.js: Added.
        * tests/v8-richards.js: Added.

2008-09-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Not reviewed.

        Remove a local change that was accidentally committed in r36034.

        * resources/sunspider-standalone-driver.js:

2008-09-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Rubber-stamped by Oliver Hunt.

        Make SunSpider work with JavaScript shells that don't take filenames
        after a '-f' argument.

        * sunspider:

2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Timothy.

        Remove the --squirrelfish option from SunSpider, as it is no longer needed.

        * sunspider:
        * tests/LIST-SQUIRRELFISH: Removed.

2008-06-03  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Mark Rowe.

        Roll out r31215 - with Mac OS X 10.5.3, there is no need to pause update daemon any more.

        * sunspider:

2008-04-15  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.
        
        - add newly working tests to squirrelfish list

        * tests/LIST-SQUIRRELFISH: Add 3d-raytrace and string-unpack-code

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.
        
        - move ubench tests properly.

        * tests/ubench: Added.
        * tests/ubench/function-closure.js: Added.
        * tests/ubench/function-empty.js: Added.
        * tests/ubench/function-missing-args.js: Added.
        * tests/ubench/function-sum.js: Added.
        * tests/ubench/loop-empty-resolve.js: Added.
        * tests/ubench/loop-empty.js: Added.
        * tests/ubench/loop-sum.js: Added.

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.

        * sunspider: Don't force --runs=1 in squirrelfish mode any more.

2008-04-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - make --squirrelfish mode use the real harness, but a reduced set of tests

        Also add a new ubench mode which runs the older squirrelfish microbenchmarks.

        * sunspider:
        * tests/LIST-SQUIRRELFISH:
        * tests/LIST-UBENCH: Added.
        * tests/squirrelfish: Moved to tests/ubench

2008-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        Removed an unused test.

        * tests/squirrelfish/loop-resolve.js: Removed.

2008-04-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        Add newly runnable tests to --squirrelfish mode.

        * tests/LIST-SQUIRRELFISH:

2008-04-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        A little more love for --squirrelfish mode:
        
        Fixed a misplaced sort. Results properly sort now.
        
        Added a test list just for squirrelfish, and updated it to include
        all currently passing SunSpider tests.
        
        Fixed the pruning regexp to match 3d-morph.js.

        * sunspider:

2008-03-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        --squirrelfish mode: pared down tests for squirrelfish to chew on.

        * sunspider:
        * tests/LIST:
        * tests/squirrelfish: Added.
        * tests/squirrelfish/function-closure.js: Added.
        * tests/squirrelfish/function-empty.js: Added.
        * tests/squirrelfish/function-missing-args.js: Added.
        * tests/squirrelfish/function-sum.js: Added.
        * tests/squirrelfish/loop-empty-resolve.js: Added.
        * tests/squirrelfish/loop-empty.js: Added.
        * tests/squirrelfish/loop-resolve.js: Added.
        * tests/squirrelfish/loop-sum.js: Added.

2008-03-21  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff.

        * sunspider: Pause update daemon on Darwin to make results reliable
        again (workaround for <rdar://problem/5811127>).

2008-02-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * sunspider: add an error message when ./tests/LIST is not found

2007-12-29  Alp Toker  <alp@atoker.com>

        Fix typo.

        * hosted/sunspider.html:

2007-12-29  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        Provide the current URL in the SunSpider results page. Useful for
        copying benchmark results out of browsers without a location bar or
        where the location bar can't handle long URLs.

        * hosted/sunspider-results.html:

2007-12-20  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        * sunspider: increase default number of runs for more accurate numbers

2007-12-18  Mark Rowe  <mrowe@apple.com>

        Fix typo.

        * hosted/sunspider.html:

2007-12-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - give an extra digit of precision for small differences.

        * resources/sunspider-compare-results.js:

2007-12-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - work around IE layout bugs

        * hosted/sunspider.css:

2007-12-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - fix compare feature

        * hosted/sunspider-results.html:

2007-12-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        - Change the format of the output URL to be shorter, to meet IE constraints

        * hosted/sunspider-driver.html:
        * hosted/sunspider-results.html:

2007-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Add some explanatory test and a dumb logo to SunSpider web hosted version

        * hosted/sunspider-driver.html:
        * hosted/sunspider-results.html:
        * hosted/sunspider.css:
        * hosted/sunspider.html:

2007-12-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Make the web-hosted version of SunSpider look a little bit less drab.

        * hosted/sunspider-driver.html:
        * hosted/sunspider-results.html:
        * hosted/sunspider.css: Added.
        * hosted/sunspider.html:
        * resources/TEMPLATE.html:

2007-12-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.
        
        - Change sunspider-compare-results output from showing "% faster" values to "x as fast" values.
        
        A sample of what new-style results would look like:
        
        TEST                   COMPARISON            FROM                 TO             DETAILS
        ...
        ** TOTAL **:           1.41x as fast     6613.6ms +/- 0.1%   4703.0ms +/- 0.1%     significant
        ...
            3bit-bits-in-byte: *1.36x as slow*     88.8ms +/- 0.6%    121.1ms +/- 0.6%     significant
        
        * resources/sunspider-compare-results.js:

2007-11-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam.

        * sunspider: add --shark-cache for L2 Cache Miss profiling

2007-11-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=15925
        SunSpider should check for Shark being installed

        * sunspider: Explicitly test that shark command line tool is installed.

2007-11-04  Darin Adler  <darin@apple.com>

        * hosted/sunspider.html: Tweaked formatting a bit.

2007-11-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - Add compare mode and a description of the benchmark to the hosted version.

        * hosted/sunspider-results.html: Add compare mode - you can just paste in another results URL.
        * hosted/sunspider.html: Added intro text.
        * make-hosted: Copy new file.
        * resources/sunspider-compare-results.js: Made more reusable by putting the implementation in
        a function.
        * resources/sunspider-standalone-compare.js: Added. Calls the function in the way standalone mode
        expects.
        * sunspider-compare-results: Use sunspider-standalone-compare.js.

2007-11-02  Darin Adler  <darin@apple.com>

        * sunspider: Changed "--base" to "--set-baseline".

2007-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * sunspider: Added a "--base" option that records the current test as a baseline.
        Moved the code to find the newest .mshark file into a function (since I needed to use
        it in the other script and I prefer to copy/paste a function).

        * sunspider-compare-results: Added logic to compare the baseline with the last
        run when you don't pass any parameters.

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - Added list of ECMAScript3 features that SunSpider does not cover currently.

        * UNCOVERED: Added.

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Give better error messages when sunspider-compare-results fails

        * sunspider-compare-results:

2007-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.
        
        - fix Date tests to work in command-line SpiderMonkey

        * tests/date-format-tofte.js:
        * tests/date-format-xparb.js:

2007-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        * sunspider: Added --shark20 option, to run Shark at its highest sample
        resolution instead of its default.

2007-10-28  Adam Roben  <aroben@apple.com>

        Fix SunSpider on Windows

        Reviewed by Eric.

        * sunspider: Don't use colons in filenames.

2007-10-28  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        * resources/sunspider-analyze-results.js: Tweak the output format a little.
        Change so that when there's only one run we don't write out confidence
        intervals at all rather than writing "NaN" over and over again.

        * sunspider: Use the time and date as a suffix on the results file, that way
        all the results are left behind in the tmp directory. This will make it easy
        for us to add features that compare past results in the future. Also rename
        the .mshark files using the same scheme.

        * sunspider-compare-results: Relax the parsing rules so we can parse the
        results file exactly as it's emitted from sunspider.

2007-10-25  Adam Roben  <aroben@apple.com>

        Strip carriage returns from results

        Carriage returns were screwing up sunspider-compare-results on
        Windows.

        Rubberstamped by Oliver.

        * sunspider:

2007-10-24  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        * sunspider: Open the profile in shark after completing a run.
        * sunspider-compare-results: Tiny perl tweaks.

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - Don't hardcode my path to testkjs
        
        * sunspider-compare-results:

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.
        
        - Add a compare script to compare results, and improve formatting of standard results a bit.

        * resources/sunspider-analyze-results.js:
        * resources/sunspider-compare-results.js: Added.
        * sunspider-compare-results: Added.

2007-10-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        * resources/sunspider-analyze-results.js: Do the error range
        properly, using the t-distribution instead of 1.96 (which was
        based on the normal distribution).
        
        * sunspider: Print results in a way that will be friendlier to the
        soon-to-come compare mode.

2007-10-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Review.
        
        - add more tests (probably the final set for now)
        
        Already balanced. Added date, regexp, control flow, and a few
        more string and object/array access tests.
        
        * tests/LIST:
        * tests/access-fannkuch.js: Added.
        * tests/access-nbody.js: Added.
        * tests/controlflow-recursive.js: Added.
        * tests/date-format-tofte.js: Added.
        * tests/date-format-xparb.js: Added.
        * tests/regexp-dna.js: Added.
        * tests/string-validate-input.js: Added.

2007-10-21  Eric Seidel  <eric@webkit.org>

        Reviewed by mjs.

        * sunspider: make --shark only sample from testkjs

2007-10-21  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.
        
        - added crypto tests (already balanced)

        * tests/LIST:
        * tests/crypto-aes.js: Added.
        * tests/crypto-md5.js: Added.
        * tests/crypto-sha1.js: Added.

2007-10-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.
        
        - rebalance new tests
        
        Scaled the new tests so they take 400-600ms on a reasonably normal user setup:
        
        Internet Explorer 7, Window XP, Dell Latitude D810 with a 2.13GHz Pentium M

        This balances them with the existing tests.

        * tests/access-binary-trees.js:
        * tests/access-nsieve.js:
        * tests/bitops-nsieve-bits.js:
        * tests/math-partial-sums.js:
        * tests/math-spectral-norm.js:
        * tests/string-fasta.js:

2007-10-20  Eric Seidel  <eric@webkit.org>

        Reviewed by darin.
        
        Add improved argument handling to sunspider, including
        --runs=<number>, --tests=<pattern, --shark, and --help
        Also re-factor code into subroutines

        * sunspider: improved argument handling

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - Add more new tests, mostly from the computer language shootout. Not normalized yet.
        
        * TODO:
        * tests/LIST:
        * tests/access-binary-trees.js: Added.
        * tests/access-nsieve.js: Added.
        * tests/bitops-nsieve-bits.js: Added.
        * tests/math-partial-sums.js: Added.
        * tests/math-spectral-norm.js: Added.
        * tests/string-fasta.js: Added.

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        * TODO: Updated to note areas that are now well-covered.
        
        - Change the tests and the driver to avoid leaving large object
        graphs hanging around, since that throws off the subsequent tests.
        
        * resources/sunspider-standalone-driver.js:
        * tests/3d-cube.js:
        * tests/3d-morph.js:
        * tests/3d-raytrace.js:
        * tests/bitops-bitwise-and.js:
        * tests/string-base64.js:
        * tests/string-tagcloud.js:

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Nikolas.
        
        - Rebalance test complexity.
        
        Scaled all the tests so they take 400-600ms on a reasonably normal user setup:
        
        Internet Explorer 7, Window XP, Dell Latitude D810 with a 2.13GHz Pentium M

        However, for some tests, IE7 was a huge outlier compared to other
        major browsers. For those tests, I used Firefox 2.0.0.8 on the
        same OS and hardware as a normalization basis.
        
        * tests/3d-morph.js:
        * tests/3d-raytrace.js:
        * tests/bitops-3bit-bits-in-byte.js:
        * tests/bitops-bits-in-byte.js:
        * tests/bitops-bitwise-and.js:
        * tests/math-cordic.js:
        * tests/string-base64.js:
        * tests/string-tagcloud.js:
        * tests/string-unpack-code.js:

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        - Fix the browser-hosted driver to be compatible with Safari 2

        * hosted/sunspider-driver.html:

2007-10-20  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Hyatt.
        
        - Add BSD license notice to cordic test, the original author said to do so.

        * tests/math-cordic.js:

2007-10-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - Support Windows and Windows browsers.

        * hosted/sunspider-results.html: Display results correctly in IE.
        * sunspider: tweaks to work on Windows, and with spaces in the path.

2007-10-18  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.

        * tests/string-tagcloud.js: Remove stray print()

2007-10-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.
        
        Add some string test cases.

        * tests/string-base64.js: Added. Does base64 encoding and decoding.
        * tests/string-tagcloud.js: Added. Parses a JSON string and
        generates tagcloud HTML markup based on the data.        
        * tests/string-unpack-code.js: Added. Unpack compressed versions of
        four of the most popular JavaScript libraries.
        * tests/LIST: Added the new tests.

2007-10-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        * TODO: Updated with info on how to do the stats properly.

        * hosted/sunspider-driver.html: Reduce timeout from 500 to 200 to
        avoid overly slowing down the benchmark.

        Added some 3D-related test cases.
        
        * tests/3d-cube.js: Added.
        * tests/3d-morph.js: Added.
        * tests/3d-raytrace.js: Added.
        * tests/LIST:

2007-10-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        - New JavaScript benchmark
        http://bugs.webkit.org/show_bug.cgi?id=15515
        
        A start on a new JavaScript benchmark, with standalone and
        browser-hosted drivers.
        
        The test content is still incomplete and the drivers could use
        some more features but there is enough here to make a good start.
        
        The drivers compute a 95% confidence interval on the mean for the
        whole test, each category, and each individual test to make it
        easier to tell whether differences are statistically
        significant. The confidence interval can be narrowed by running
        the test more times.
        
        * TODO: Added. Remaining things that need to be done.
        * sunspider: Added. Perl script that acts as the standalone test driver.
        * resources/sunspider-standalone-driver.js: Added. JavaScript part
        of standalone test driver.
        * resources/sunspider-analyze-results.js: Added. JavaScript statistical
        analysis code.
        * resources/TEMPLATE.html: Added. Template for browser-hosted tests.
        * make-hosted: Added. Script to generate browser-hosted tests.
        * hosted/sunspider.html: Added. Start page for browser-hosted test.
        * hosted/sunspider-driver.html: Added. Driver for browser-hosted tests.
        * hosted/sunspider-results.html: Added. Results page for browser-hosted
        tests.
        * hosted/sunspider-record-result.js: Added. Helper file for browser-hosted
        tests.
        * tests/LIST: Added. List of tests to use.
        * tests/bitops-3bit-bits-in-byte.js: Added. Some initial test content.
        * tests/bitops-bits-in-byte.js: Added. Ditto.
        * tests/bitops-bitwise-and.js: Added. Ditto.
        * tests/math-cordic.js: Added. Ditto.

