2019-11-20  Caio Lima  <ticaiolima@gmail.com>

        [JSC] OSR exit to LLInt is broken on MIPS
        https://bugs.webkit.org/show_bug.cgi?id=203737

        Reviewed by Yusuke Suzuki.

        * tests/v8-v6/v8-deltablue.js:

2019-10-31  Caio Lima  <ticaiolima@gmail.com>

        Temporary skip broken tests on MIPS that is broken due to OSR exit to LLInt
        https://bugs.webkit.org/show_bug.cgi?id=203710

        Unreviewed gardening.

        * tests/v8-v6/v8-deltablue.js:

2016-03-21 Filip Pizlo <fpizlo@apple.com>

        JSC should use a shadow stack version of CHICKEN so that debuggers have the option of retrieving tail-deleted frames
        https://bugs.webkit.org/show_bug.cgi?id=155598

        Reviewed by Saam Barati.

        * shadow-chicken.yaml: Added.

2015-03-30  Michael Saboff  <msaboff@apple.com>

        Fix failing v8-deltablue.js for ARM
        https://bugs.webkit.org/show_bug.cgi?id=138392

        Rubber-stamped by Mark Lam.

        Re-enable this test for ARM32 on iOS as the tests now run without issues.

        * tests/v8-v6/v8-deltablue.js:

2015-02-25  Benjamin Poulain  <bpoulain@apple.com>

        CodeBlock crashes when dumping op_push_name_scope
        https://bugs.webkit.org/show_bug.cgi?id=141953

        Reviewed by Filip Pizlo.

        * profiler-test.yaml:

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

        [Win] JSC profiler tests asserts in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=140931

        Unreviewed gardening, skip failing tests.

        * profiler-test.yaml:

2014-11-04  Michael Saboff  <msaboff@apple.com>

        Disable failing v8-deltablue.js for ARM
        https://bugs.webkit.org/show_bug.cgi?id=138382

        Reviewed by Geoffrey Garen.

        This test is failing on ARM 32 bit.

        * tests/v8-v6/v8-deltablue.js:

2014-07-08  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Add option to specify output file location in sunspider.
        https://bugs.webkit.org/show_bug.cgi?id=134339

        Reviewed by Darin Adler.

        * sunspider:

2014-06-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r169092 and r169102): Skip failing JSC tests poperly on non-x86 Darwin platforms
        https://bugs.webkit.org/show_bug.cgi?id=133149

        Reviewed by Csaba Osztrogonác.

        * profiler-test.yaml: Skip profiler tests only if the architecture isn't x86 and the host is Darwin.

2014-05-21  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/169159.
        
        This was a unilateral change and wasn't properly reviewed.

        * profiler-test.yaml:

2014-05-19  Filip Pizlo  <fpizlo@apple.com>

        Take care of some ARM64 test failures
        https://bugs.webkit.org/show_bug.cgi?id=133090

        Reviewed by Geoffrey Garen.

        * profiler-test.yaml: Skip these on not-x86.

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.

        * hosted/sunspider.html:
        * hosted/versions.html:
        * make-hosted:
        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html:
        * resources/sunspider-analyze-results.js:
        * resources/sunspider-compare-results.js:
        * resources/sunspider-standalone-compare.js:
        * resources/sunspider-standalone-driver.js:
        * sunspider:
        * sunspider-compare-results:
        * tests/sunspider-0.9.1/3d-morph.js:
        * tests/sunspider-0.9.1/3d-raytrace.js:
        * tests/sunspider-0.9.1/bitops-bitwise-and.js:
        * tests/sunspider-0.9.1/math-cordic.js:
        * tests/sunspider-0.9.1/string-tagcloud.js:
        * tests/sunspider-0.9/3d-morph.js:
        * tests/sunspider-0.9/3d-raytrace.js:
        * tests/sunspider-0.9/bitops-bitwise-and.js:
        * tests/sunspider-0.9/math-cordic.js:
        * tests/sunspider-0.9/string-tagcloud.js:
        * tests/sunspider-1.0.1/3d-morph.js:
        * tests/sunspider-1.0.1/3d-raytrace.js:
        * tests/sunspider-1.0.1/bitops-bitwise-and.js:
        * tests/sunspider-1.0.1/math-cordic.js:
        * tests/sunspider-1.0.1/string-tagcloud.js:
        * tests/sunspider-1.0.2/3d-morph.js:
        * tests/sunspider-1.0.2/3d-raytrace.js:
        * tests/sunspider-1.0.2/bitops-bitwise-and.js:
        * tests/sunspider-1.0.2/math-cordic.js:
        * tests/sunspider-1.0.2/string-tagcloud.js:
        * tests/sunspider-1.0/3d-morph.js:
        * tests/sunspider-1.0/3d-raytrace.js:
        * tests/sunspider-1.0/bitops-bitwise-and.js:
        * tests/sunspider-1.0/math-cordic.js:
        * tests/sunspider-1.0/string-tagcloud.js:

2014-02-10  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert the accidental change from r163789.

        * tests/v8-v6/v8-deltablue.js:

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

        Get rid of forward exit on DoubleAsInt32
        https://bugs.webkit.org/show_bug.cgi?id=125552

        Reviewed by Oliver Hunt.
        
        Use SunSpider as a kind of spot-check for the
        no-architecture-specific-optimization paths in the compiler.

        * no-architecture-specific-optimizations.yaml: Added.

2013-10-08  Geoffrey Garen  <ggaren@apple.com>

        Refined power management in SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122525

        Reviewed by Gavin Barraclough.

        * hosted/sunspider.css:
        (#frameparent):
        (#countdown):
        * resources/TEMPLATE.html: Provide an explicit countdown element in the
        parent, instead of hacking it into each child frame.

        * resources/driver-TEMPLATE.html: Be more explicit about how we respond
        to power management. Just moving setTimeout(0) inside the loop is a
        little too subtle, and may not work across browsers.

        Also, leave a little extra time after changing the countdown graphic,
        to give the browser some time to paint.

2013-10-02  Geoffrey Garen  <ggaren@apple.com>

        Improved painting behavior in SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122257

        Reviewed by Oliver Hunt.

        Individual test names with times was a good painting strategy years
        back, when each benchmark took hundreds of milliseconds to run. Now,
        the whole suite can finish in a a few hundres milliseconds, and things
        look pretty flashy.

        Instead, display a countdown that indicates which iteration of the
        test we're on.

        * resources/TEMPLATE.html: Work around a bug in Firefox by specifying
        our style inside the .html file instead of in an external stylesheet.
        Under heavy JavaScript load, Firefox neglects to apply external
        stylesheets -- probably due to a starved timer.
        
        * resources/driver-TEMPLATE.html: Delay a little between runs to ensure
        that our countdown has enough time to paint.

2013-09-26  Geoffrey Garen  <ggaren@apple.com>

        Fixed a version number string in SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122004

        Reviewed by Gavin Barraclough.

        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html: 1.0.2!

2013-09-26  Geoffrey Garen  <ggaren@apple.com>

        Tentative SunSpider 1.0.2
        https://bugs.webkit.org/show_bug.cgi?id=122002

        Reviewed by Gavin Barraclough.

        Be even more aggressive about asking for zero delay between tests by
        setting a timeout at the beginning of a test instead of the end. This is
        another step toward reducing noise -- particularly noise caused by
        power management -- just like the step down from 10ms to 0ms.

        Browsers typically put a 4ms floor on timers. The sooner we set
        our timer, the sooner it will fire.

        * make-hosted:
        * resources/driver-TEMPLATE.html: Changed the driver to set the timeout
        earlier.
        * tests/sunspider-1.0.2: Added. These tests are unchanged from 1.0.1.

2013-09-09  Filip Pizlo  <fpizlo@apple.com>

        Stress tests should test the jsc profiler (-p)
        https://bugs.webkit.org/show_bug.cgi?id=121043

        Reviewed by Mark Hahnenberg.
        
        Add a jsc-stress-test that tries to profile SunSpider.

        * profiler-test.yaml: Added.

2013-08-08  Cosmin Truta  <ctruta@blackberry.com>

        SunSpider: Move the 3d-morph fix from version 1.0 to version 1.0.1
        https://bugs.webkit.org/show_bug.cgi?id=117993

        Reviewed by George Staikos.

        Bump the SunSpider version to 1.0.1.

        Unroll r149548 in order to restore version 1.0 to its original,
        and add the 3d-morph fix to version 1.0.1 instead.

        * hosted/sunspider.html: Updated to version 1.0.1.
        * hosted/versions.html: Updated to version 1.0.1.
        * make-hosted: Added support for version 1.0.1.
        * resources/driver-TEMPLATE.html: Updated to version 1.0.1.
        * resources/results-TEMPLATE.html: Updated to version 1.0.1.
        * sunspider: Updated to version 1.0.1.
        * sunspider-compare-results: Updated to version 1.0.1.
        * tests/sunspider-1.0/3d-morph.js: Rolled back to the original version.
        * tests/sunspider-1.0.1/LIST: Added.
        * tests/sunspider-1.0.1/3d-cube.js: Added.
        * tests/sunspider-1.0.1/3d-morph.js: Added.
        * tests/sunspider-1.0.1/3d-raytrace.js: Added.
        * tests/sunspider-1.0.1/access-binary-trees.js: Added.
        * tests/sunspider-1.0.1/access-fannkuch.js: Added.
        * tests/sunspider-1.0.1/access-nbody.js: Added.
        * tests/sunspider-1.0.1/access-nsieve.js: Added.
        * tests/sunspider-1.0.1/bitops-3bit-bits-in-byte.js: Added.
        * tests/sunspider-1.0.1/bitops-bits-in-byte.js: Added.
        * tests/sunspider-1.0.1/bitops-bitwise-and.js: Added.
        * tests/sunspider-1.0.1/bitops-nsieve-bits.js: Added.
        * tests/sunspider-1.0.1/controlflow-recursive.js: Added.
        * tests/sunspider-1.0.1/crypto-aes.js: Added.
        * tests/sunspider-1.0.1/crypto-md5.js: Added.
        * tests/sunspider-1.0.1/crypto-sha1.js: Added.
        * tests/sunspider-1.0.1/date-format-tofte.js: Added.
        * tests/sunspider-1.0.1/date-format-xparb.js: Added.
        * tests/sunspider-1.0.1/math-cordic.js: Added.
        * tests/sunspider-1.0.1/math-partial-sums.js: Added.
        * tests/sunspider-1.0.1/math-spectral-norm.js: Added.
        * tests/sunspider-1.0.1/regexp-dna.js: Added.
        * tests/sunspider-1.0.1/string-base64.js: Added.
        * tests/sunspider-1.0.1/string-fasta.js: Added.
        * tests/sunspider-1.0.1/string-tagcloud.js: Added.
        * tests/sunspider-1.0.1/string-unpack-code.js: Added.
        * tests/sunspider-1.0.1/string-validate-input.js: Added.

2013-05-03  Cosmin Truta  <ctruta@blackberry.com>

        SunSpider 1.0: 3d-morph: use epsilon to check result
        https://bugs.webkit.org/show_bug.cgi?id=115553

        Reviewed by George Staikos.

        SunSpider/3d-morph should be more lenient in validating its results, since they depend on Math.sin, which isn't formally specified.

        * tests/sunspider-1.0/3d-morph.js:

2013-04-19  Filip Pizlo  <fpizlo@apple.com>

        SunSpider/string-tagcloud should be more lenient in validating its results, since they depend on Math.log, which isn't formally specified
        https://bugs.webkit.org/show_bug.cgi?id=114895

        Reviewed by Michael Saboff.

        * tests/sunspider-1.0/string-tagcloud.js:

2013-04-18  Filip Pizlo  <fpizlo@apple.com>

        Whenever it is cheap and non-invasive, SunSpider tests should validate their results to ensure that the browser runs them correctly
        https://bugs.webkit.org/show_bug.cgi?id=114852

        Reviewed by Geoffrey Garen.
        
        This adds low-overhead checking of the results of each SunSpider tests. This is not
        meant to be an exhaustive test that everything was executed correctly, but rather a
        simple sanity check that will catch glaring mistakes. The philosophy here is that we're
        not trying to prevent all forms of cheating, or that we're trying to prove the
        browser's correctness. Moreover, these checks are meant to incur minimal overhead;
        they currently clock in at <2% slow-down in SunSpider 1.0.
        
        The test expectations were generated using the LLInt on command-line, and I've verified
        that Firefox 20, Chrome 26, IE 10, Safari 6, and ToT with all of the JITs agree. Note
        that some tests cannot be precisely validated because they use Math functions, which
        ECMAScript chooses to not formally specify - those functions like sin() and friends are
        allowed to return implementation-dependent results. Also some tests cannot be validated
        at all because their behavior is either intentionally random or is timezone-dependent.
        But 23 out of 26 tests now have some kind of validation.
        
        I've updated the harnesses to show erroneous runs when displaying results.

        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html:
        * resources/sunspider-analyze-results.js:
        (formatResult):
        (resultLine):
        (printOutput):
        * resources/sunspider-compare-results.js:
        (.formatMean):
        (.resultLine):
        (.printOutput):
        (sunspiderCompareResults):
        * resources/sunspider-standalone-driver.js:
        * tests/sunspider-1.0/3d-cube.js:
        (Init):
        * tests/sunspider-1.0/3d-morph.js:
        * tests/sunspider-1.0/3d-raytrace.js:
        * tests/sunspider-1.0/access-binary-trees.js:
        * tests/sunspider-1.0/access-fannkuch.js:
        * tests/sunspider-1.0/access-nbody.js:
        * tests/sunspider-1.0/access-nsieve.js:
        (sieve):
        * tests/sunspider-1.0/bitops-3bit-bits-in-byte.js:
        * tests/sunspider-1.0/bitops-bits-in-byte.js:
        * tests/sunspider-1.0/bitops-bitwise-and.js:
        * tests/sunspider-1.0/bitops-nsieve-bits.js:
        * tests/sunspider-1.0/controlflow-recursive.js:
        * tests/sunspider-1.0/crypto-aes.js:
        * tests/sunspider-1.0/crypto-md5.js:
        * tests/sunspider-1.0/crypto-sha1.js:
        * tests/sunspider-1.0/date-format-tofte.js:
        * tests/sunspider-1.0/date-format-xparb.js:
        * tests/sunspider-1.0/math-cordic.js:
        * tests/sunspider-1.0/math-partial-sums.js:
        (partial):
        * tests/sunspider-1.0/math-spectral-norm.js:
        * tests/sunspider-1.0/regexp-dna.js:
        * tests/sunspider-1.0/string-base64.js:
        * tests/sunspider-1.0/string-fasta.js:
        (fastaRepeat):
        (fastaRandom):
        * tests/sunspider-1.0/string-tagcloud.js:
        * tests/sunspider-1.0/string-unpack-code.js:
        * tests/sunspider-1.0/string-validate-input.js:

2013-04-11  Filip Pizlo  <fpizlo@apple.com>

        Get rid of the 10ms delay between test executions
        https://bugs.webkit.org/show_bug.cgi?id=114458
        <rdar://problem/13631112>

        Reviewed by Darin Adler and Geoffrey Garen.
        
        More details on this in the bug. Long story short, I don't know why the 10ms delay is
        there, and it appears to be the root of some noisyness and unreliability in the results.
        Removing it makes results more consistent, which is a good thing.

        * resources/driver-TEMPLATE.html:

2013-01-16  Eric Seidel  <eric@webkit.org>

        Remove --shark* support from sunspider/run-sunspider now that Shark is dead
        https://bugs.webkit.org/show_bug.cgi?id=99512

        Reviewed by Darin Adler.

        I tried to use --instruments, but that also seems broken (in the same way before/after this patch).

        * sunspider:
        (runTestsOnce):

2012-08-02  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert debugging stuff I landed in http://trac.webkit.org/changeset/124557
        by accident.

        * tests/v8-v6/v8-crypto.js:
        (am1):
        (am2):
        (am3):
        (am4):
        (bnpCopyTo):
        (bnpFromString):
        (bnpClamp):

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

        Add --instruments option to sunspider to profile with Instruments
        https://bugs.webkit.org/show_bug.cgi?id=80783

        Reviewed by Filip Pizlo.

        * resources/TimeProfile20us.tracetemplate: Added.
        * sunspider:
        (runTestsOnce):

2011-11-15  Andy Wingo  <wingo@igalia.com>

        Extend sunspider driver to be able to run kraken
        https://bugs.webkit.org/show_bug.cgi?id=71799

        Reviewed by Filip Pizlo.

        * resources/sunspider-standalone-driver.js: Try to load a -data
        file.  If that succeeds, we have a kraken-like test, so we time
        the test using `load'.  Otherwise fall back to using `run'.

2011-08-11  Mark Rowe  <mrowe@apple.com>

        Fix sunspider-compare-results to default to the same suite version as the sunspider script.

        Rubber-stamped by Maciej Stachowiak.

        * sunspider-compare-results:

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Update SunSpider versioning to 1.0
        https://bugs.webkit.org/show_bug.cgi?id=63870

        Reviewed by Dan Bernstein.

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

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Sunspider 0.9.1 harness doesn't actually close() its test documents
        https://bugs.webkit.org/show_bug.cgi?id=47045

        Reviewed by Daniel Bates.

        * hosted/versions.html:
        * resources/driver-TEMPLATE.html:

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Not Reviewed. 
        
        Fix obviou typo in previous commit.

        * tests/sunspider-1.0/bitops-bitwise-and.js:

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders Carlsson.

        SunSpider: all four bitops benchmarks can be replaced with NOP
        https://bugs.webkit.org/show_bug.cgi?id=38446

        * tests/sunspider-1.0/bitops-3bit-bits-in-byte.js:
        (TimeFunc): Save the result.
        * tests/sunspider-1.0/bitops-bits-in-byte.js:
        (TimeFunc): Save the result.
        * tests/sunspider-1.0/bitops-bitwise-and.js: More explicitly
        save the results.
        * tests/sunspider-1.0/bitops-nsieve-bits.js:
        (sieve): Save the result.

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        SunSpider: string-validate-input.js uses an undeclared variable named 'name', which is a DOM API
        https://bugs.webkit.org/show_bug.cgi?id=60937

        Reviewed by Dan Bernstein.

        * tests/sunspider-1.0/string-validate-input.js:
        (doTest): Rename the variable to username

2011-07-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        SunSpider: The main function of math-cordic is dead code
        https://bugs.webkit.org/show_bug.cgi?id=63863
        
        Try to prevent math-cordic from being eliminated as dead code or
        compiled down to a constant.

        * tests/sunspider-1.0/math-cordic.js:
        (cordicsincos):
        (cordic):

2011-06-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Create sunspider-1.0 directory in preparation for fixing a bunch of bugs
        https://bugs.webkit.org/show_bug.cgi?id=63782

        * make-hosted: Learn about the new directory.
        * tests/sunspider-1.0: Copied from PerformanceTests/SunSpider/tests/sunspider-0.9.1.

2010-11-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        Improved accuracy of command-line SunSpider.

        * resources/sunspider-standalone-driver.js: Use the returned number of
        elapsed milliseconds from "run" and "checkSyntax" instead of measuring
        ourselves, for slightly more accurate numbers.

2010-09-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Mark Rowe.
        https://bugs.webkit.org/show_bug.cgi?id=45924

        Modify the SunSpider harness to allow a path to be passed to the --suite
        argument, supress the normal prepend-"tests/" behaviour for suite names
        containing a '/'.

        Also wrap the code in an anonymous function to move variables out of global
        scope (currently the harness cannot handle running tests the overwrite the
        variable 'j').

        * resources/sunspider-standalone-driver.js:
        * sunspider:

2010-08-27  Michael Saboff  <msaboff@apple.com>

        Reviewed by Stephanie Lewis.

        Added version 5 and version 6 of V8 tests with modifications similar
        to the version 4 tests so they'll work with the SunSpider test harness.
        Note that these files are external source and therefore don't conform 
        to WebKit coding standards.
        https://bugs.webkit.org/show_bug.cgi?id=44638

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

2010-07-15  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        http://bugs.webkit.org/show_bug.cgi?id=42406
        Output location of results file.

        * sunspider:

2010-05-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark Rowe.

        Browser-hosted version of SunSpider runs tests twice as many times as advertised
        https://bugs.webkit.org/show_bug.cgi?id=39201

        * make-hosted: Make sure to reset test list after every test suite.

2010-05-07  Adam Roben  <aroben@apple.com>

        Fix typo in sunspider-compare-results.js that caused incorrect
        two-sample t statistics to be computed

        Fixes <http://webkit.org/b/38768> SunSpider computes incorrect
        two-sample t statistics

        Reviewed by Darin Adler.

        * resources/sunspider-compare-results.js:
        (sunspiderCompareResults.resultLine): Fixed the calculation of the t
        variable to match the definition of a two-sample t statistic. Looks
        like this was just a simple typo.

2010-04-05  Darin Adler  <darin@apple.com>

        Updated the ignore property for changes to the contents here.

        * .: Modified property svn:ignore.

2010-02-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Add sunspider-0.9.1 to the site in preparation for announcing it.
        https://bugs.webkit.org/show_bug.cgi?id=35206

        * hosted/sunspider.css: Remove tabs, which I noticed where present while
        copying to the WebKitSite directory.

2010-01-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Sunspider parse-only tests don't run
        https://bugs.webkit.org/show_bug.cgi?id=33489

        Fix parse-only test list

        * tests/parse-only/LIST:

2009-12-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele Peterson.

        Make SunSpider version more prominent in the title
        https://bugs.webkit.org/show_bug.cgi?id=32574

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

2009-12-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Make SunSpider refuse to compare results across content versions
        https://bugs.webkit.org/show_bug.cgi?id=32573
        
        The results URL now includes a version indicator, and compare mode
        will refuse to compare between versions.

        * resources/driver-TEMPLATE.html:
        * resources/results-TEMPLATE.html:

2009-12-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Some Browser-hosted SunSpider files are not valid HTML5
        https://bugs.webkit.org/show_bug.cgi?id=32536
        
        Made various fixes to validate as HTML5 with no warnings (mainly removing bogus
        close tags and adding a meta charset declaration).

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

2009-12-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric Seidel.

        Make sunspider-0.9.1 the default content set (both command-line and hosted)
        https://bugs.webkit.org/show_bug.cgi?id=32537

        * hosted/sunspider.html: Change default suite link.
        * sunspider: Change default suite.
        * sunspider-compare-results: Likewise.

2009-12-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        in-browser SunSpider suffers excessive penalty under power management
        https://bugs.webkit.org/show_bug.cgi?id=32505
        
        I have made a few changes to address this:
        
        1) Change how browser-hosted SunSpider loads tests - preload the content and write it in with
        document.write to reduce triggering of progress UI.
        2) Reduce time between tests to 10ms from 500ms, so that power management doesn't keep the CPU
        stepped all the way down the whole time.
        3) Run the test cycle an extra time for warmup before the runs that count.

        * hosted/sunspider-record-result.js: Removed.
        * make-hosted:
        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html:

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

        Reviewed by Gavin Barraclough.

        SunSpider/tests/string-base64.js does not compute a valid base64 encoded string
        https://bugs.webkit.org/show_bug.cgi?id=16806

        Based on a patch by Eric Seidel.
        
        Fix the base64 computation to actually compute correct results. The impact on runtime of
        the test is pretty small, but noticeable for some browsers. But at least it's not
        doing a wrong and meaningless computation any more.
        
        * tests/sunspider-0.9.1/string-base64.js:
        ():
        (base64ToString):

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

        Fixing commit error...
        
        I accidentally committed my last patch in a form that broke Web-hosted SunSpider. Fixing.

        * resources/driver-TEMPLATE.html:

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

        Reviewed by Sam Weinig.

        Use JSON.parse instead of eval for Web-hosted SunSpider results processing
        https://bugs.webkit.org/show_bug.cgi?id=32490

        * hosted/json2.js: Added. Incorporated from json.org
        * resources/driver-TEMPLATE.html: Fix an HTML validation bug I noticed.
        * resources/results-TEMPLATE.html: Use JSON.parse instead of eval to process
        results.

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

        Reviewed by Oliver Hunt.

        Enable Web-hosted version of SunSpider to handle multiple versions
        https://bugs.webkit.org/show_bug.cgi?id=32478

        * make-hosted: Now generate the hosted version to be able to run both the
        0.9 and the 0.9.1 test suites.
        * hosted: Modified property svn:ignore.
        * hosted/sunspider-driver.html: Removed.
        * hosted/sunspider-results.html: Removed.
        * hosted/sunspider.html:
        * hosted/versions.html: Added.
        * resources/TEMPLATE.html:
        * resources/driver-TEMPLATE.html: Copied from hosted/sunspider-driver.html.
        * resources/driver-TEMPLATE.html: Copied from hosted/sunspider-results.html.

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

        Reviewed by Oliver Hunt.

        Give command-line sunspider the ability to handle multiple suites and versions
        https://bugs.webkit.org/show_bug.cgi?id=32477
        
        Each suite/version's set of tests are now in a separate subdirectory of tests/, with a file named LIST
        enumerating the tests. Current suites are:
        
        sunspider-0.9 - riginal SunSpider content 
        sunspider-0.9.1 - SunSpider suite with a few tests fixed (and a few more to come)
        ubench - "ubench" microbenchmark suite
        v8-v4 - version 4 of the v8 benchmark
        parse-only - some parser tests
        
        Sunspider can now be run with the --suite= parameter to select a
        suite. The default is --suite=sunspider-0.9.

        * .: Modified property svn:ignore to ignore new results directories.
        * make-hosted: Generate based on sunspider-0.9 suite.
        * resources/TEMPLATE.html: Fix an HTML compliance problem.
        * resources/sunspider-standalone-driver.js: Become aware of suite names.
        * sunspider: Modified to handle multiple suites as described above.
        * sunspider-compare-results: ditto
        * tests/LIST: Moved to tests/sunspider-0.9/ and tests/sunspider-0.9.1/
        * tests/LIST-PARSE-ONLY: Moved to parse-only/LIST
        * tests/LIST-UBENCH: Removed.
        * tests/LIST-V8: Removed.
        * tests/3d-cube.js: Moved to tests/sunspider-0.9 and tests/sunspider-0.9.1
        * tests/3d-morph.js: ditto
        * tests/3d-raytrace.js: ditto
        * tests/access-binary-trees.js: ditto
        * tests/access-fannkuch.js: ditto
        * tests/access-nbody.js: ditto
        * tests/access-nsieve.js: ditto
        * tests/bitops-3bit-bits-in-byte.js: ditto
        * tests/bitops-bits-in-byte.js: ditto
        * tests/bitops-bitwise-and.js: ditto
        * tests/bitops-nsieve-bits.js: ditto
        * tests/controlflow-recursive.js: ditto
        * tests/crypto-aes.js: ditto
        * tests/crypto-md5.js: ditto
        * tests/crypto-sha1.js: ditto
        * tests/date-format-tofte.js: ditto
        * tests/date-format-xparb.js: ditto
        * tests/math-cordic.js: ditto
        * tests/math-partial-sums.js: ditto
        * tests/math-spectral-norm.js: ditto
        * tests/regexp-dna.js: ditto
        * tests/string-base64.js: ditto
        * tests/string-fasta.js: ditto
        * tests/string-tagcloud.js: ditto
        * tests/string-unpack-code.js: ditto
        * tests/string-validate-input.js: ditto
        * tests/sunspider-0.9/: Added
        * tests/sunspider-0.9/*.js: Moved from one level up
        * tests/sunspider-0.9.1: Added.
        * tests/sunspider-0.9.1/*.js: Moved from one level up.
        * tests/v8-crypto.js: Moved to v8-v4/ directory.
        * tests/v8-deltablue.js: ditto
        * tests/v8-earley-boyer.js: ditto
        * tests/v8-raytrace.js: ditto
        * tests/v8-regexp.js: ditto
        * tests/v8-richards.js: ditto
        * tests/v8-splay.js: ditto
        * tests/v8-v4: Added.

2009-09-30  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Platform specific null device replaced with a platform independent.
        https://bugs.webkit.org/show_bug.cgi?id=29544

        * sunspider: Using File::Spec->devnull() instead of /dev/null and NUL.

2009-09-21  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.

        [Qt] Make sunspider script work on Windows platform.
        https://bugs.webkit.org/show_bug.cgi?id=29544

        * sunspider:
        Using platform specific null device instead of /dev/null.

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.

