2021-11-21  Cathie Chen  <cathiechen@igalia.com>

        [Performance test][css-contain] Add case to test contain: layout inside a complex document
        https://bugs.webkit.org/show_bug.cgi?id=232883

        Reviewed by Rob Buis.

        This case test the performance of changing the content of a layout containment which is
        inside a complex document.

        * Layout/css-contain-layout-size-inside-complex-document.html: Added.

2021-11-19  Alan Bujtas  <zalan@apple.com>

        Add layout performance test for simple bidi content
        (this is not about inline axis direction, just mixed, bidirectional content)

        Unreviewed.

        * Layout/line-layout-simple-bidi.html: Added.

2021-11-19  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Workaround for failing mips tests
        https://bugs.webkit.org/show_bug.cgi?id=233359

        Reviewed by Adrian Perez de Castro.

        Re-enable tests skipped on mips after adding workaround.

        * ARES-6/Basic/basic-tests.yaml:

2021-11-15  Angelos Oikonomopoulos  <angelos@igalia.com>

        Skip tests newly-failing on mips
        https://bugs.webkit.org/show_bug.cgi?id=233124

        Unreviewed gardening.

        After 3f59d2aa489ec843e055fc3104c275851d7fbd35, these tests started
        failing with a SIGBUS on MIPS (on fuloong hardware, they pass on the
        ci20 boards). Temporarily skip them on this arch until we can track
        down the issue.

        * ARES-6/Basic/basic-tests.yaml:

2021-11-10  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Improve & simplify the flex-basis computation
        https://bugs.webkit.org/show_bug.cgi?id=230755

        Reviewed by Alan Bujtas.

        New test case to catch performance regressions with lots of nested (specially column) flexboxes.

        * Layout/nested-flexbox.html: Added.

2021-11-10  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix broken test
        https://bugs.webkit.org/show_bug.cgi?id=232949

        useGrouping: 'false' is no longer allowed according to the spec.

        * Intl/numberformat-format-all-options.html:

2021-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        All the SDKVariant.xcconfig files should match
        https://bugs.webkit.org/show_bug.cgi?id=231663

        Reviewed by Youenn Fablet.

        * MediaTime/Configurations/SDKVariant.xcconfig:

2021-09-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Add a PerformanceTest for some common FontFaceSet style update operations
        https://bugs.webkit.org/show_bug.cgi?id=229913

        Reviewed by Stephanie Lewis.

        This is similar to some of the operations we've seen in the wild.
        We want to make sure we can do these fast.

        * CSS/FontFaceSetUpdateStyle.html: Added.

2021-08-06  Michael Catanzaro  <mcatanzaro@gnome.org>

        MallocBench: fix ODR violation
        https://bugs.webkit.org/show_bug.cgi?id=228874

        Reviewed by Geoffrey Garen.

        When built with LTO enabled, GCC will warn about violations of C++'s one-definition rule.
        MallocBench has two different Objects in two different files, which is illegal. We could
        rename one of them, but I decided it's simplest to just put them each in anonymous
        namespaces in order to restrict them to file scope.

        * MallocBench/MallocBench/big.cpp:
        * MallocBench/MallocBench/stress.cpp:

2021-07-25  Cathie Chen  <cathiechen@igalia.com>

        [Performance test][css-contain] Add test to contain: size layout
        https://bugs.webkit.org/show_bug.cgi?id=227948

        Reviewed by Ryosuke Niwa.

        This test emulates the scenario that a small part of the page is changed. If it's applied contain: size layout,
        the performance should be improved. This test is a transform of the test [1] in blink.

        [1] third_party/blink/perf_tests/layout/css-contain-change-text.html

        * Layout/css-contain-change-size.html: Added.

2021-07-16  Manuel Rego Casasnovas  <rego@igalia.com>

        Remove CSS Regions perf tests
        https://bugs.webkit.org/show_bug.cgi?id=228016

        Reviewed by Ryosuke Niwa.

        The feature has been removed long time ago, so let's do the same with the associated perf tests.

        * Layout/RegionsAuto.html: Removed.
        * Layout/RegionsAutoMaxHeight.html: Removed.
        * Layout/RegionsExtendingSelectionMixedContent.html: Removed.
        * Layout/RegionsFixed.html: Removed.
        * Layout/RegionsFixedShort.html: Removed.
        * Layout/RegionsSelectAllMixedContent.html: Removed.
        * Layout/RegionsSelection.html: Removed.
        * Layout/RegionsShapes.html: Removed.
        * Layout/Shapes/RegionsShapesNoShapes.html: Removed.
        * Layout/Shapes/resources/RegionsShapesContent.html: Removed.
        * Layout/Shapes/resources/RegionsShapesContentNoShapes.html: Removed.
        * Layout/resources/regions.css: Removed.
        * Layout/resources/regions.js: Removed.

2021-06-03  Said Abou-Hallawa  <said@apple.com>

        [MotionMark] Controller.filterOutOutliers() sorts the frameLengths array incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=226605

        Reviewed by Myles C. Maxfield.

        Controller.filterOutOutliers must pass a compare function to Array.sort()
        because it filters an array of numbers.

        * MotionMark/tests/resources/main.js:
        (filterOutOutliers):

2021-06-03  Myles C. Maxfield  <mmaxfield@apple.com>

        [MotionMark] Update version number of local development version of the benchmark to match the currently-being-released version
        https://bugs.webkit.org/show_bug.cgi?id=226592

        Reviewed by Darin Adler.

        We are currently in the process of releasing MotionMark 1.2. http://browserbench.org/MotionMark1.2/

        * MotionMark/about.html:
        * MotionMark/resources/strings.js:

2021-05-21  Sam Sneddon  <gsnedders@apple.com>

        Fix Python 3.6+ DeprecationWarnings about unknown escapes
        https://bugs.webkit.org/show_bug.cgi?id=226018

        Reviewed by Jonathan Bedard.

        Fix Python 3.6+ DeprecationWarnings about unknown escapes

        * JetStream2/RAMification.py:
        * JetStream2/RexBench/FlightPlanner/convert-nfdc.py:
        * RexBench/FlightPlanner/convert-nfdc.py:

2021-05-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [MotionMark] Temporarily remove the focus test
        https://bugs.webkit.org/show_bug.cgi?id=225714

        Reviewed by Geoffrey Garen.

        The focus test is causing unacceptably high variance on test results. Initial investigation
        indicates that this is related to secondary and tertiary interactions between the browser's
        runloop and the compositor's runloop. Not only that, but the variable cost of the focus test
        seems to affect the variance on the subtests which run after it.

        This patch temporarily removes the focus test, just so we can get a stronger signal of
        browsers' true performance, while we do a deeper analysis of the focus test.

        Because the focus test's score is lower than the average score of the subtests, removing it
        causes scores in all browsers to increase:

                             | WebKit | Chrome | Firefox
        ================================================
        Score with Focus     |   1020 |    550 |    962
        Score without Focus  |   1623 |    874 |   1101
        Stddev with Focus    |   9.3% |   2.3% |   2.9%
        Stddev without Focus |   0.7% |   0.5% |   7.9%

        * MotionMark/resources/runner/tests.js:

2021-04-19  Kimmo Kinnunen  <kkinnunen@apple.com>

        Enable -Wthread-safety, add attributes to custom lock classes, and provide macros to declare guards
        https://bugs.webkit.org/show_bug.cgi?id=221614
        <rdar://problem/74396781>

        Reviewed by David Kilzer.

        Add -Wthread-safety to compile flags.

        * DecoderTest/Configurations/Base.xcconfig:

2021-04-12  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] CDC COVID Vaccine Tracker: Safari garbles data table
        https://bugs.webkit.org/show_bug.cgi?id=222581

        Reviewed by Zalan Bujtas.

        * Layout/nested-flexboxes-percentage-flex-basis.html: Added.

2021-03-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Laying out complex text in columns is O(n^2)
        https://bugs.webkit.org/show_bug.cgi?id=223363
        <rdar://problem/68279075>

        Reviewed by Zalan Bujtas.

        * Layout/complex-columns.html: Added.

2021-03-09  Myles C. Maxfield  <mmaxfield@apple.com>

        MotionMark scores are super sensitive to a single long frame
        https://bugs.webkit.org/show_bug.cgi?id=220847
        <rdar://problem/74152743>

        Reviewed by Jon Lee.

        Currently, "ramp" tests have three phases. The middle phase is where they try to determine a maximum reasonable
        complexity, and the third one is where they try various complexities between 0 and the maximum. The calculation
        of this maximum reasonable complexity is currently very sensitive to outlier frame times. If there is a single
        outlier frame time, the failure mode is to assume that the maximum complexity is ~10. So, the solution is to
        ignore outlier frame times during this first phase, and to ensure that there are at least 9 frames measured that
        have non-outlier times.

        This test also changes the speed of the middle phase. Previously, each interval during this phase had
        a complexity that was 3.16x of the previous complexity. This patch changes that to 1.78x of the previous
        complexity for complexities above 50, and 1.33x for complexities above 10,000.

        * MotionMark/tests/resources/main.js:
        (filterOutOutliers):
        (_measureAndResetInterval):
        (update):
        (registerFrameTime):
        (intervalHasConcluded):
        (start):
        (didFinishInterval):

2021-02-26  Zalan Bujtas  <zalan@apple.com>

        [Performance test][Line layout] Add test with inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=222498

        Reviewed by Ryosuke Niwa.

        We don't have a performance test on inline boxes yet.

        * Layout/line-layout-inline-level-boxes.html: Added.

2021-02-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r273122 and r273123.
        https://bugs.webkit.org/show_bug.cgi?id=222449

        Didn't fix the extreme test variance, and caused some internal
        performance bots to hang during testing

        Reverted changesets:

        "MotionMark scores are super sensitive to a single long frame"
        https://bugs.webkit.org/show_bug.cgi?id=220847
        https://trac.webkit.org/changeset/273122

        "MotionMark scores are super sensitive to a single long frame"
        https://bugs.webkit.org/show_bug.cgi?id=220847
        https://trac.webkit.org/changeset/273123

2021-02-22  Sergio Villar Senin  <svillar@igalia.com>

        REGRESSION (r266695): twitch.tv: when in fullscreen, WebKit continually does 350ms layouts. Firefox and Chrome do not
        https://bugs.webkit.org/show_bug.cgi?id=222202
        <rdar://problem/74537782>

        Reviewed by Simon Fraser.

        New performance test for nested column flexboxes with percentage heights.

        * Layout/nested-column-flexboxes-relative-height.html: Added.

2021-02-18  Myles C. Maxfield  <mmaxfield@apple.com>

        MotionMark scores are super sensitive to a single long frame
        https://bugs.webkit.org/show_bug.cgi?id=220847
        <rdar://problem/74152743>

        Reviewed by Maciej Stachowiak and Jon Lee.

        Currently, "ramp" tests have three phases. The middle phase is where they try to determine a maximum reasonable
        complexity, and the third one is where they try various complexities between 0 and the maximum. The calculation
        of this maximum reasonable complexity is currently very sensitive to outlier frame times. If there is a single
        outlier frame time, the failure mode is to assume that the maximum complexity is ~10. So, the solution is to
        ignore outlier frame times during this first phase, and to ensure that there are at least 9 frames measured that
        have non-outlier times.

        * MotionMark/tests/resources/main.js:
        (filterOutOutliers):
        (_measureAndResetInterval):
        (update):
        (registerFrameTime):
        (intervalHasConcluded):
        (start):
        (didFinishInterval):

2021-01-28  Myles C. Maxfield  <mmaxfield@apple.com>

        MotionMark focus test can cause extreme variance in whichever test runs directly after it
        https://bugs.webkit.org/show_bug.cgi?id=221075
        <rdar://problem/72143661>

        Reviewed by Said Abou-Hallawa.

        The focus test loads up the window server with work, which runs asynchronously from WebKit's run loop.
        This means that the window server can still be busy when the next test starts.

        In r270959 we already tried to combat this, and it was mostly successful, but not as successful as we'd
        like. This patch goes further by:
        1. Bumping up the warmup timeout to 2000ms from 1000ms
        2. Making the warmup render at least 30 frames. This means that a single extremely long frame can't
           fill up the entire warmup period.

        * MotionMark/developer.html:
        * MotionMark/resources/runner/motionmark.js:
        (this.clear):
        * MotionMark/tests/resources/main.js:
        (Benchmark.Utilities.createClass):
        (_animateLoop):

2021-01-03  Beth Dakin  <bdakin@apple.com>

        Remove non-inclusive language from JetStream 2.0
        https://bugs.webkit.org/show_bug.cgi?id=220109

        Reviewed by Anders Carlsson.

        * JetStream2/code-load/inspector-payload.js:
        (WebInspector.DOMNode.WebInspector.Resource.WebInspector.ConsoleMessageView.prototype._formatWithSubstitutionString.styleFormatter):
        (WebInspector.DOMNode.WebInspector.Resource.WebInspector.ConsoleMessageView.prototype._formatWithSubstitutionString.isAllowlistedProperty):
        (WebInspector.DOMNode.WebInspector.Resource.WebInspector.ConsoleMessageView.prototype._formatWithSubstitutionString.isWhitelistedProperty): Deleted.
        * JetStream2/web-tooling-benchmark/cli.js:

2020-12-17  Said Abou-Hallawa  <said@apple.com>

        [MotionMark] Increase the warm-up time for each sub-test from 100ms to 1000ms
        https://bugs.webkit.org/show_bug.cgi?id=219984

        Reviewed by Jon Lee.

        Ensure the warm-up time is enough for the system to finish any initialization
        work which may be triggered by the sub-test before starting the sampling.
        This should prevent bi-modality in the score of the sub-tests since the
        initial frame rate is crucial in deciding how much the complexity can grow.

        * MotionMark/developer.html:
        * MotionMark/resources/runner/motionmark.js:
        (this.clear):

2020-12-14  Antti Koivisto  <antti@apple.com>

        Add inline-block line layout microbench
        https://bugs.webkit.org/show_bug.cgi?id=219854

        Reviewed by Zalan Bujtas.

        * Layout/line-layout-inline-block.html: Added.

2020-12-11  Geoffrey Garen  <ggaren@apple.com>

        Eliminate 'async time' in StyleBench
        https://bugs.webkit.org/show_bug.cgi?id=219785

        Reviewed by Antti Koivisto.

        r270132 (a RunLoop change) measured as a 13% regression on the
        StyleBench bot. But I don't think the measured regression was user-real.
        Instead, I think the baseline score was artificially high because 'async
        time' sometimes did not measure painting.

        I decided just to eliminate 'async time' (and force style resolution +
        layout during 'sync time') because this benchmark intends to measure
        style resolution + layout, and not painting or frame rate.

        With this change, there is no measured regression anymore.

        Explanation of 'did not measure painting':

                StyleBench synchronously modifies DOM + style, and then sets a
                zero-delay timer to measure 'async time'. If layout has not
                happened by the time the timer fires, StyleBench forces layout
                and then computes 'async time'. The flaw here is painting.
                StyleBench accepts both of these orders of operations as valid:
                
                (A) { modify DOM + style }, { measure 'sync time' }, { style resolution + layout }, { paint }, { measure 'async time' }

                (B) { modify DOM + style }, { measure 'sync time' }, { style resolution + layout }, { measure 'async time' }, { paint }

                ^ (B) includes more stuff than (A). Not cool!

        Evidence for the theory that the baseline was sometimes doing (B):

                * Forcing style resolution + layout during sync time reduces the
                baseline score and eliminates the difference in async time
                between baseline and patch.

                * Starting the benchmark from a requestAnimationFrame() instead
                of a timer reduces the baseline score and eliminates the
                difference in async time between baseline and patch.

                * The regression only reproduced on machines with fewer cores.

                * The new benchmark method reduces sttdev by ~3X - ~5X.

        * StyleBench/resources/benchmark-runner.js:
        (BenchmarkRunner.prototype._runTest): Call getBoundingClientRect()
        during sync time to force style resolution + layout consistently.

        Always report async time as 1, since this benchmark doesn't have an
        async time component anymore. (The harness doesn't like zeroes.)

        Just store height in a global because that is sufficient to prevent
        dead code elimination (which was probably impossible anyway, since
        getBoundingClientRect() has side effects).

2020-12-10  Tadeu Zagallo  <tzagallo@apple.com>

        Removing unnecessary locking from JSValue API functions
        https://bugs.webkit.org/show_bug.cgi?id=219723

        Reviewed by Filip Pizlo.

        Print an error message when benchmarks fail to run and add option to change
        the configuration used to build the benchmarks.

        * APIBench/api-bench:

2020-12-10  Tadeu Zagallo  <tzagallo@apple.com>

        Add a JSC API to allow acquiring the JSLock
        https://bugs.webkit.org/show_bug.cgi?id=219663

        Reviewed by Filip Pizlo.

        This patch does 3 things:
        - Change how the geomean is calculated in api-bench to avoid overflowing
        - Allow linking against the local build we're benchmarking
        - Adopt the new JSLock API in the UpcomingAPI subtests

        Using the new API the score improves by ~13.5%. Here are the results for each
        of the "UpcomingAPI" subtests plus the total score:

                                Before       After
        RichardsMostlyC:          77ms        23ms
        RichardsMostlyObjC:      309ms       282ms
        RichardsMostlySwift      305ms       280ms
        RichardsSomeC:           101ms        95ms
        RichardsSomeObjC:        160ms       157ms
        RichardsSomeSwift:       201ms       202ms
        ------------------------------------------
        Score:                 29.5974     33.6404

        * APIBench/UpcomingAPI/RichardsMostlyC/RichardsMostlyC/richards.c:
        (workfn):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC.xcodeproj/xcshareddata/xcschemes/RichardsMostlyObjC.xcscheme: Renamed from PerformanceTests/APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/WorkerTask.m:
        (+[WorkerTask context]):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj:
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/BridgingHeader.h: Copied from PerformanceTests/APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift.
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift:
        * APIBench/UpcomingAPI/RichardsSomeC/RichardsSomeC/main.m:
        (main):
        * APIBench/UpcomingAPI/RichardsSomeObjC/RichardsSomeObjC/main.m:
        (main):
        * APIBench/UpcomingAPI/RichardsSomeSwift/RichardsSomeSwift.xcodeproj/project.pbxproj:
        * APIBench/UpcomingAPI/RichardsSomeSwift/RichardsSomeSwift/BridgingHeader.h: Copied from PerformanceTests/APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift.
        * APIBench/UpcomingAPI/RichardsSomeSwift/RichardsSomeSwift/main.swift:
        * APIBench/api-bench:

2020-12-07  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Remove WEBKIT_WRAP_SOURCELIST
        https://bugs.webkit.org/show_bug.cgi?id=196916

        Reviewed by Michael Catanzaro.

        * MallocBench/MallocBench/CMakeLists.txt:

2020-12-04  Adam Roben  <aroben@apple.com>

        More FALLBACK_PLATFORM adoption
        https://bugs.webkit.org/show_bug.cgi?id=219545

        Reviewed by Tim Horton.

        * MediaTime/Configurations/SDKVariant.xcconfig:
        WK_EMPTY_$(THIS_IS_NOT_EMPTY) evaluates to the empty string, not to
        NO.

2020-12-03  Adam Roben  <aroben@apple.com>

        Adopt FALLBACK_PLATFORM
        https://bugs.webkit.org/show_bug.cgi?id=219504

        Reviewed by Tim Horton.

        * MediaTime/Configurations/SDKVariant.xcconfig: Use FALLBACK_PLATFORM
        it if it's defined, otherwise use PLATFORM_NAME as before.

2020-11-30  Tadeu Zagallo  <tzagallo@apple.com>

        Add C and ObjC tests to APIBench
        https://bugs.webkit.org/show_bug.cgi?id=219246

        Reviewed by Yusuke Suzuki.

        The benchmark now consists of two groups: initially they are identical, but the first group will not
        be changed going forward while the second group will be free to adopt new APIs.
        The two original tests (one mostly JS and the other mostly native) were also split into three tests each (C, ObjC and Swift).

        * APIBench/CurrentAPI/RichardsMostlyC/RichardsMostlyC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/CurrentAPI/RichardsMostlyC/RichardsMostlyC.xcodeproj/xcshareddata/xcschemes/RichardsMostlyC.xcscheme: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme.
        * APIBench/CurrentAPI/RichardsMostlyC/RichardsMostlyC/richards.c: Added.
        (pkt):
        (trace):
        (schedule):
        (wait_):
        (holdself):
        (findtcb):
        (release):
        (qpkt):
        (idlefn):
        (valueToTask):
        (waitWrapper):
        (qpktWrapper):
        (readFile):
        (workfn):
        (handlerfn):
        (devfn):
        (append):
        (setup):
        (getQpktcount):
        (getHoldcount):
        (main):
        * APIBench/CurrentAPI/RichardsMostlyC/RichardsMostlyC/richards.js: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (createWorkfn):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/Device.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/DeviceTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/DeviceTask.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (+[DeviceTask createWithScheduler:device:priority:]):
        (-[DeviceTask run:]):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/HandlerTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/HandlerTask.m: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        (+[HandlerTask createWithScheduler:device:priority:queue:]):
        (-[HandlerTask run:]):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/IdleTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/IdleTask.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (+[IdleTask createWithScheduler:priority:]):
        (-[IdleTask run:]):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/Packet.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/Packet.swift.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/Packet.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/IdleTask.swift.
        (+[Packet create:withLink:]):
        (-[Packet addToQueue:]):
        (+[DevicePacket create:withLink:]):
        (+[WorkPacket createWithLink:]):
        (+[WorkPacket size]):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/Scheduler.h: Added.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/Scheduler.m: Added.
        (-[Scheduler schedule]):
        (-[Scheduler addTask:]):
        (-[Scheduler releaseDevice:]):
        (-[Scheduler holdCurrent]):
        (-[Scheduler waitCurrent]):
        (-[Scheduler queue:]):
        (-[Scheduler handle:]):
        (-[Scheduler _queueImpl:packet:]):
        (-[Scheduler _find:]):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/Task.h: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/Task.m: Added.
        (+[Task createWithScheduler:priority:queue:]):
        (-[Task run:]):
        (-[Task release_]):
        (-[Task hold]):
        (-[Task wait]):
        (-[Task resume]):
        (-[Task takePacket]):
        (-[Task checkPriorityAdd:packet:]):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/WorkerTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/WorkerTask.m: Added.
        (+[WorkerTask createWithScheduler:priority:queue:]):
        (+[WorkerTask context]):
        (+[WorkerTask constructor]):
        (-[WorkerTask run:]):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/main.m: Added.
        (runRichards):
        (main):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.js.
        (return.prototype.run):
        * APIBench/CurrentAPI/RichardsMostlyObjC/RichardsMostlyObjC/richards.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/HandlerTask.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/HandlerTask.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/IdleTask.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/IdleTask.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/Packet.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/Packet.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/Scheduler.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/Scheduler.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/Task.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/Task.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/main.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/main.swift.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.js.
        * APIBench/CurrentAPI/RichardsMostlySwift/RichardsMostlySwift/richards.swift: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.swift.
        * APIBench/CurrentAPI/RichardsSomeC/RichardsSomeC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/CurrentAPI/RichardsSomeC/RichardsSomeC/main.m: Added.
        (WorkerTask_run):
        (WorkerTask_constructor):
        (WorkerTask_getProperty):
        (main):
        * APIBench/CurrentAPI/RichardsSomeC/RichardsSomeC/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/richards.js.
        * APIBench/CurrentAPI/RichardsSomeObjC/RichardsSomeObjC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/CurrentAPI/RichardsSomeObjC/RichardsSomeObjC.xcodeproj/xcshareddata/xcschemes/RichardsSomeObjC.xcscheme: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/xcshareddata/xcschemes/RichardsMostlyJS.xcscheme.
        * APIBench/CurrentAPI/RichardsSomeObjC/RichardsSomeObjC/main.m: Added.
        (-[WorkerTask initWithScheduler:v1:v2:]):
        (-[WorkerTask toString]):
        (-[WorkerTask run:]):
        (main):
        * APIBench/CurrentAPI/RichardsSomeObjC/RichardsSomeObjC/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/richards.js.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * APIBench/CurrentAPI/RichardsSomeSwift/RichardsSomeSwift.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/CurrentAPI/RichardsSomeSwift/RichardsSomeSwift.xcodeproj/xcshareddata/xcschemes/RichardsSomeSwift.xcscheme: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/xcshareddata/xcschemes/RichardsMostlyJS.xcscheme.
        * APIBench/CurrentAPI/RichardsSomeSwift/RichardsSomeSwift/main.swift: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/main.swift.
        * APIBench/CurrentAPI/RichardsSomeSwift/RichardsSomeSwift/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/richards.js.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * APIBench/References/RichardsC/RichardsC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/References/RichardsC/RichardsC.xcodeproj/xcshareddata/xcschemes/RichardsC.xcscheme: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme.
        * APIBench/References/RichardsC/RichardsC/richards.c: Added.
        (pkt):
        (trace):
        (schedule):
        (wait_):
        (holdself):
        (findtcb):
        (release):
        (qpkt):
        (idlefn):
        (workfn):
        (handlerfn):
        (devfn):
        (append):
        (setup):
        (getQpktcount):
        (getHoldcount):
        (main):
        * APIBench/References/RichardsC/RichardsC/richards.js: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (createWorkfn):
        * APIBench/References/RichardsJS/RichardsJS.js: Renamed from PerformanceTests/APIBench/RichardsJS/RichardsJS.js.
        * APIBench/References/RichardsObjC/RichardsObjC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj.
        * APIBench/References/RichardsObjC/RichardsObjC.xcodeproj/xcshareddata/xcschemes/RichardsObjC.xcscheme: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme.
        * APIBench/References/RichardsObjC/RichardsObjC/Device.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/References/RichardsObjC/RichardsObjC/DeviceTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/References/RichardsObjC/RichardsObjC/DeviceTask.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (+[DeviceTask createWithScheduler:device:priority:]):
        (-[DeviceTask run:]):
        * APIBench/References/RichardsObjC/RichardsObjC/HandlerTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/References/RichardsObjC/RichardsObjC/HandlerTask.m: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        (+[HandlerTask createWithScheduler:device:priority:queue:]):
        (-[HandlerTask run:]):
        * APIBench/References/RichardsObjC/RichardsObjC/IdleTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/References/RichardsObjC/RichardsObjC/IdleTask.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (+[IdleTask createWithScheduler:priority:]):
        (-[IdleTask run:]):
        * APIBench/References/RichardsObjC/RichardsObjC/Packet.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/Packet.swift.
        * APIBench/References/RichardsObjC/RichardsObjC/Packet.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/IdleTask.swift.
        (+[Packet create:withLink:]):
        (-[Packet addToQueue:]):
        (+[DevicePacket create:withLink:]):
        (+[WorkPacket createWithLink:]):
        (+[WorkPacket size]):
        * APIBench/References/RichardsObjC/RichardsObjC/Scheduler.h: Added.
        * APIBench/References/RichardsObjC/RichardsObjC/Scheduler.m: Added.
        (-[Scheduler schedule]):
        (-[Scheduler addTask:]):
        (-[Scheduler releaseDevice:]):
        (-[Scheduler holdCurrent]):
        (-[Scheduler waitCurrent]):
        (-[Scheduler queue:]):
        (-[Scheduler handle:]):
        (-[Scheduler _queueImpl:packet:]):
        (-[Scheduler _find:]):
        * APIBench/References/RichardsObjC/RichardsObjC/Task.h: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        * APIBench/References/RichardsObjC/RichardsObjC/Task.m: Added.
        (+[Task createWithScheduler:priority:queue:]):
        (-[Task run:]):
        (-[Task release_]):
        (-[Task hold]):
        (-[Task wait]):
        (-[Task resume]):
        (-[Task takePacket]):
        (-[Task checkPriorityAdd:packet:]):
        * APIBench/References/RichardsObjC/RichardsObjC/WorkerTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/References/RichardsObjC/RichardsObjC/WorkerTask.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (+[WorkerTask createWithScheduler:priority:queue:]):
        (-[WorkerTask run:]):
        * APIBench/References/RichardsObjC/RichardsObjC/main.m: Added.
        (runRichards):
        (main):
        * APIBench/References/RichardsObjC/RichardsObjC/richards.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/References/RichardsSwift/RichardsSwift.xcodeproj/project.pbxproj: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/project.pbxproj.
        * APIBench/References/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme.
        * APIBench/References/RichardsSwift/RichardsSwift/DeviceTask.swift: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/DeviceTask.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/HandlerTask.swift: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/HandlerTask.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/IdleTask.swift: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/IdleTask.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/Packet.swift: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/Packet.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/Scheduler.swift: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/Scheduler.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/Task.swift: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/Task.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/WorkerTask.swift: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/WorkerTask.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/main.swift: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/References/RichardsSwift/RichardsSwift/richards.swift: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/richards.swift.
        * APIBench/UpcomingAPI/RichardsMostlyC/RichardsMostlyC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/UpcomingAPI/RichardsMostlyC/RichardsMostlyC.xcodeproj/xcshareddata/xcschemes/RichardsMostlyC.xcscheme: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme.
        * APIBench/UpcomingAPI/RichardsMostlyC/RichardsMostlyC/richards.c: Added.
        (pkt):
        (trace):
        (schedule):
        (wait_):
        (holdself):
        (findtcb):
        (release):
        (qpkt):
        (idlefn):
        (valueToTask):
        (waitWrapper):
        (qpktWrapper):
        (readFile):
        (workfn):
        (handlerfn):
        (devfn):
        (append):
        (setup):
        (getQpktcount):
        (getHoldcount):
        (main):
        * APIBench/UpcomingAPI/RichardsMostlyC/RichardsMostlyC/richards.js: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (createWorkfn):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/Device.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/DeviceTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/DeviceTask.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (+[DeviceTask createWithScheduler:device:priority:]):
        (-[DeviceTask run:]):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/HandlerTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/HandlerTask.m: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        (+[HandlerTask createWithScheduler:device:priority:queue:]):
        (-[HandlerTask run:]):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/IdleTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/IdleTask.m: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        (+[IdleTask createWithScheduler:priority:]):
        (-[IdleTask run:]):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/Packet.h: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/Packet.swift.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/Packet.m: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/IdleTask.swift.
        (+[Packet create:withLink:]):
        (-[Packet addToQueue:]):
        (+[DevicePacket create:withLink:]):
        (+[WorkPacket createWithLink:]):
        (+[WorkPacket size]):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/Scheduler.h: Added.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/Scheduler.m: Added.
        (-[Scheduler schedule]):
        (-[Scheduler addTask:]):
        (-[Scheduler releaseDevice:]):
        (-[Scheduler holdCurrent]):
        (-[Scheduler waitCurrent]):
        (-[Scheduler queue:]):
        (-[Scheduler handle:]):
        (-[Scheduler _queueImpl:packet:]):
        (-[Scheduler _find:]):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/Task.h: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/Task.m: Added.
        (+[Task createWithScheduler:priority:queue:]):
        (-[Task run:]):
        (-[Task release_]):
        (-[Task hold]):
        (-[Task wait]):
        (-[Task resume]):
        (-[Task takePacket]):
        (-[Task checkPriorityAdd:packet:]):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/WorkerTask.h: Copied from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/WorkerTask.m: Added.
        (+[WorkerTask createWithScheduler:priority:queue:]):
        (+[WorkerTask context]):
        (+[WorkerTask constructor]):
        (-[WorkerTask run:]):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/main.m: Added.
        (runRichards):
        (main):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.js.
        (return.prototype.run):
        * APIBench/UpcomingAPI/RichardsMostlyObjC/RichardsMostlyObjC/richards.m: Renamed from PerformanceTests/APIBench/RichardsSwift/RichardsSwift/main.swift.
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj.
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme.
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift.
        (DeviceTask.create(_:device:priority:)):
        (DeviceTask.run(_:)):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/HandlerTask.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/HandlerTask.swift.
        (HandlerTask.device):
        (HandlerTask.create(_:device:priority:queue:)):
        (HandlerTask.run(_:)):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/IdleTask.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/IdleTask.swift.
        (IdleTask.create(_:priority:)):
        (IdleTask.run(_:)):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/Packet.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/Packet.swift.
        (Packet.addTo(_:)):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/Scheduler.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/Scheduler.swift.
        (waitCurrent):
        (handle(_:)):
        (Scheduler.schedule):
        (Scheduler.add(_:)):
        (Scheduler.release_(_:)):
        (holdCurrent):
        (queue(_:)):
        (queueImpl(_:packet:)):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/Task.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/Task.swift.
        (Task.run(_:)):
        (Task.release_):
        (Task.hold):
        (Task.wait):
        (Task.resume):
        (Task.takePacket):
        (Task.checkPriorityAdd(_:packet:)):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift.
        (WorkerTask.create(_:priority:queue:)):
        (WorkerTask.run(_:)):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/main.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/main.swift.
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/richards.js: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.js.
        (return.prototype.run):
        * APIBench/UpcomingAPI/RichardsMostlySwift/RichardsMostlySwift/richards.swift: Renamed from PerformanceTests/APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.swift.
        (runRichards):
        * APIBench/UpcomingAPI/RichardsSomeC/RichardsSomeC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/UpcomingAPI/RichardsSomeC/RichardsSomeC/main.m: Added.
        (WorkerTask_run):
        (WorkerTask_constructor):
        (WorkerTask_getProperty):
        (main):
        * APIBench/UpcomingAPI/RichardsSomeC/RichardsSomeC/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/richards.js.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * APIBench/UpcomingAPI/RichardsSomeObjC/RichardsSomeObjC.xcodeproj/project.pbxproj: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/UpcomingAPI/RichardsSomeObjC/RichardsSomeObjC.xcodeproj/xcshareddata/xcschemes/RichardsSomeObjC.xcscheme: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/xcshareddata/xcschemes/RichardsMostlyJS.xcscheme.
        * APIBench/UpcomingAPI/RichardsSomeObjC/RichardsSomeObjC/main.m: Added.
        (-[WorkerTask initWithScheduler:v1:v2:]):
        (-[WorkerTask toString]):
        (-[WorkerTask run:]):
        (main):
        * APIBench/UpcomingAPI/RichardsSomeObjC/RichardsSomeObjC/richards.js: Copied from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/richards.js.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * APIBench/UpcomingAPI/RichardsSomeSwift/RichardsSomeSwift.xcodeproj/project.pbxproj: Renamed from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj.
        * APIBench/UpcomingAPI/RichardsSomeSwift/RichardsSomeSwift.xcodeproj/xcshareddata/xcschemes/RichardsSomeSwift.xcscheme: Renamed from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/xcshareddata/xcschemes/RichardsMostlyJS.xcscheme.
        * APIBench/UpcomingAPI/RichardsSomeSwift/RichardsSomeSwift/main.swift: Renamed from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/main.swift.
        (run(_:)):
        (toString):
        (WorkerTask.toString):
        (WorkerTask.run(_:)):
        * APIBench/UpcomingAPI/RichardsSomeSwift/RichardsSomeSwift/richards.js: Renamed from PerformanceTests/APIBench/RichardsMostlyJS/RichardsMostlyJS/richards.js.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * APIBench/api-bench:

2020-10-27  Jer Noble  <jer.noble@apple.com>

        [Mac] Audio and Video element creation up to 300x slower than other browsers
        https://bugs.webkit.org/show_bug.cgi?id=218206
        <rdar://problem/62451019>

        Reviewed by Eric Carlson.

        * Media/AudioElementCreation.html: Added.
        * Media/VideoElementCreation.html: Added.

2020-10-27  Caio Lima  <ticaiolima@gmail.com>

        Make WebAssembly tests on JetStream 2 be feature detactable
        https://bugs.webkit.org/show_bug.cgi?id=218198

        Reviewed by Saam Barati.

        This patch is disabling JetStream 2's WASM tests when it's not
        possible to find WebAssembly constructor on global object. This allows
        us to run JetStream 2 on devices without WASM support, like 32-bits
        ports of WebKit.

        * JetStream2/JetStreamDriver.js:

2020-10-13  Keith Rollin  <krollin@apple.com>

        Remove leftover MACOSX_DEPLOYMENT_TARGET_macosx support
        https://bugs.webkit.org/show_bug.cgi?id=217649
        <rdar://problem/70236877>

        Reviewed by Darin Adler.

        Bug 42796 introduced MACOSX_DEPLOYMENT_TARGET_<PLATFORM> as "support
        for compiling WebKit against iOS SDKs". Support for the iOS part of
        this feature was later removed in several changes, including Bug
        139212, Bug 139463 and Bug 144762. However, vestiges have remained for
        five or six years in the form of MACOSX_DEPLOYMENT_TARGET_macosx. The
        inclusion of the platform in MACOSX_DEPLOYMENT_TARGET is no longer
        needed and can be removed.

        This changes brings most projects in conformance with other projects
        that don't support including the platform in MACOSX_DEPLOYMENT_TARGET,
        including WebEditingTester, gtest, WebKitTestRunner, MiniBrowser, and
        TestWebKitAPI.

        Along the way, remove a couple of left-over references to macOS 10.16,
        and a couple of places where [sdk=macosx*] was still being used.

        With this change, initialization of MACOSX_DEPLOYMENT_TARGET should be
        consistent across all projects, with two exceptions: WebKitLauncher
        (which hardcodes it to 10.12) and libwebrtc's copy of googletest
        (which hardcodes it to 10.4). The reasons for these hard-coded values
        is not apparent, so leave them be.

        * DecoderTest/Configurations/DebugRelease.xcconfig:
        * MediaTime/Configurations/DebugRelease.xcconfig:

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        The previous workaround turns out to be ineffective because we can't set the value of 
        TARGET_MAC_OS_X_VERSION_MAJOR based on a previous value of itself. Introduce a new 
        variable TARGET_MAC_OS_X_VERSION_MAJOR to determine whether we need to explicitly 
        adjust MAC_OS_X_VERSION_MAJOR to 110000.

        * DecoderTest/Configurations/DebugRelease.xcconfig:
        * MediaTime/Configurations/DebugRelease.xcconfig:

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        Due to a bug in Xcode (rdar://70185899), Xcode 12.0 and Xcode 12.1 Beta incorrectly includes the 
        minor release number in MAC_OS_X_VERSION_MAJOR, which causes Debug and Release builds of WebKit 
        to be misconfigured when building on macOS Big Sur SUs, leading to webpages failing to load.

        To work around the Xcode bug, when the MAC_OS_X_VERSION_MAJOR includes the minor version number, 
        drop the minor version number by explicitly setting TARGET_MAC_OS_X_VERSION_MAJOR to 110000.

        Note: This change should be reverted after <rdar://70185899> is resolved.

        * DecoderTest/Configurations/DebugRelease.xcconfig:
        * MediaTime/Configurations/DebugRelease.xcconfig:

2020-10-11  Darin Adler  <darin@apple.com>

        [macOS] Harden more build configurations against macOS versions 11 and higher as well as inclusion of patch versions
        https://bugs.webkit.org/show_bug.cgi?id=217595

        Reviewed by Alexey Proskuryakov.

        * MediaTime/Configurations/Base.xcconfig: Updated to same idiom used elsewhere.

2020-07-30  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make DecoderTest run against .mp4 files; add rate-limiting.
        https://bugs.webkit.org/show_bug.cgi?id=214807

        Reviewed by Darin Adler.

        Look up the UTI type of the specified file, and create the appropriate SourceBufferParser
        by passing in the ContentType (converted from UTI). Also, add a --rate-limit flag which
        causes the decompression session to run at the same FPS as the underlying media.

        * DecoderTest/DecoderTest.xcodeproj/project.pbxproj:
        * DecoderTest/DecoderTest/main.mm:
        (main):

2020-07-24  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Add PerformanceTest tool for measuring raw speed of a video decoder
        https://bugs.webkit.org/show_bug.cgi?id=214723

        Reviewed by Darin Adler.

        * DecoderTest/Configurations/Base.xcconfig: Added.
        * DecoderTest/Configurations/DebugRelease.xcconfig: Added.
        * DecoderTest/Configurations/DecoderTest.xcconfig: Added.
        * DecoderTest/DecoderTest.xcodeproj/project.pbxproj: Added.
        * DecoderTest/DecoderTest/main.mm: Added.
        (Function<void):
        (main):
        * DecoderTest/Makefile: Added.
        * Makefile.shared: Added.

2020-07-22  Conrad Shultz  <conrad_shultz@apple.com>

        Update macOS Version macros
        https://bugs.webkit.org/show_bug.cgi?id=214653

        Reviewed by Tim Horton.

        * MediaTime/Configurations/Base.xcconfig:
        * MediaTime/Configurations/DebugRelease.xcconfig:

2020-07-06  Philippe Normand  <pnormand@igalia.com>

        MallocBench: Remove unused private field
        https://bugs.webkit.org/show_bug.cgi?id=213989

        Reviewed by Alex Christensen.

        The m_argc private field is never used. Remove it.
        
        * MallocBench/MallocBench/CommandLine.cpp:
        * MallocBench/MallocBench/CommandLine.h:

2020-07-01  Saam Barati  <sbarati@apple.com>

        Make it so JetStream2 can run with the d8 shell
        https://bugs.webkit.org/show_bug.cgi?id=213856

        Reviewed by Keith Miller.

        We use d8's Realm API to create separate global objects for
        each test to run in.

        * JetStream2/JetStreamDriver.js:
        (Driver.prototype.runCode.globalObject.loadString):
        (Driver.prototype.runCode):
        (prototype.async run):
        * JetStream2/cli.js:
        * JetStream2/index.html:

2020-06-29  Tadeu Zagallo  <tzagallo@apple.com>

        New API benchmark
        https://bugs.webkit.org/show_bug.cgi?id=213750

        Reviewed by Saam Barati.

        APIBench is a new benchmark suite to measure the performance of the JavaScriptCore API. It has 4 benchmarks:
        - RichardsJS: This is imported from Octane and used as a reference so we know how fast the pure JS implementation runs.
        - RichardsSwift: a Swift port of the benchmark, also used as reference for how fast the pure Swift implementation is.
        - RichardsMostlyJS: As the name suggests, mostly the same the as the JS benchmark, but here the WorkerTask
          is implemented in Swift. The API is used to write to the packet being processed and talking to the scheduler.
        - RichardsMostlySwift: inverse of the above. Mostly the same code from the Swift benchark, but here the WorkerTask is
          implemented in JavaScript. The API is used to run the JS version of the task and marshaling the Packet by using JSExport.

        The benchmark can be built and run using the api-bench script, as following:

        PerformanceTests/APIBench/api-bench WebKitBuild/Release

        By default, it will build each of the benchmarks and run 5 iterations.
        The score is calculated as 5000 / geomean([avg of RichardsMostlySwift, avg of RichardsMostlyJS]).
        The script prints the average for the references and tests and the final score:

        Results for /Volumes/Data/wk2/OpenSource/WebKitBuild/Release (5 iterations)
        ================================================================================

        References:
        ----------------------------------------
        RichardsJS: 14ms
        RichardsSwift: 29ms

        Tests:
        ----------------------------------------
        RichardsMostlyJS: 218ms
        RichardsMostlySwift: 315ms

        Score: 19.0804

        * APIBench/RichardsJS/RichardsJS.js: Added.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (WorkerTask):
        (WorkerTask.prototype.run):
        (WorkerTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/project.pbxproj: Added.
        * APIBench/RichardsMostlyJS/RichardsMostlyJS.xcodeproj/xcshareddata/xcschemes/RichardsMostlyJS.xcscheme: Added.
        * APIBench/RichardsMostlyJS/RichardsMostlyJS/main.swift: Added.
        (run(_:)):
        (toString):
        (WorkerTask.toString):
        (WorkerTask.run(_:)):
        * APIBench/RichardsMostlyJS/RichardsMostlyJS/richards.js: Added.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/project.pbxproj: Added.
        * APIBench/RichardsMostlySwift/RichardsMostlySwift.xcodeproj/xcshareddata/xcschemes/RichardsMostlySwift.xcscheme: Added.
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/DeviceTask.swift: Added.
        (DeviceTask.create(_:device:priority:)):
        (DeviceTask.run(_:)):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/HandlerTask.swift: Added.
        (HandlerTask.device):
        (HandlerTask.create(_:device:priority:queue:)):
        (HandlerTask.run(_:)):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/IdleTask.swift: Added.
        (IdleTask.create(_:priority:)):
        (IdleTask.run(_:)):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/Packet.swift: Added.
        (Packet.addTo(_:)):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/Scheduler.swift: Added.
        (waitCurrent):
        (handle(_:)):
        (Scheduler.schedule):
        (Scheduler.add(_:)):
        (Scheduler.release_(_:)):
        (holdCurrent):
        (queue(_:)):
        (queueImpl(_:packet:)):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/Task.swift: Added.
        (Task.run(_:)):
        (Task.release_):
        (Task.hold):
        (Task.wait):
        (Task.resume):
        (Task.takePacket):
        (Task.checkPriorityAdd(_:packet:)):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/WorkerTask.swift: Added.
        (WorkerTask.create(_:priority:queue:)):
        (WorkerTask.run(_:)):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/main.swift: Added.
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.js: Added.
        (return.prototype.run):
        * APIBench/RichardsMostlySwift/RichardsMostlySwift/richards.swift: Added.
        (runRichards):
        * APIBench/RichardsSwift/RichardsSwift.xcodeproj/project.pbxproj: Added.
        * APIBench/RichardsSwift/RichardsSwift.xcodeproj/xcshareddata/xcschemes/RichardsSwift.xcscheme: Added.
        * APIBench/RichardsSwift/RichardsSwift/DeviceTask.swift: Added.
        (DeviceTask.create(_:device:priority:)):
        (DeviceTask.run(_:)):
        * APIBench/RichardsSwift/RichardsSwift/HandlerTask.swift: Added.
        (HandlerTask.device):
        (HandlerTask.create(_:device:priority:queue:)):
        (HandlerTask.run(_:)):
        * APIBench/RichardsSwift/RichardsSwift/IdleTask.swift: Added.
        (IdleTask.create(_:priority:)):
        (IdleTask.run(_:)):
        * APIBench/RichardsSwift/RichardsSwift/Packet.swift: Added.
        (Packet.addTo(_:)):
        * APIBench/RichardsSwift/RichardsSwift/Scheduler.swift: Added.
        (Scheduler.schedule):
        (Scheduler.add(_:)):
        (Scheduler.release(_:)):
        (holdCurrent):
        (waitCurrent):
        (queue(_:)):
        (handle(_:)):
        (queueImpl(_:packet:)):
        * APIBench/RichardsSwift/RichardsSwift/Task.swift: Added.
        (Task.run(_:)):
        (Task.release):
        (Task.hold):
        (Task.wait):
        (Task.resume):
        (Task.takePacket):
        (Task.checkPriorityAdd(_:packet:)):
        * APIBench/RichardsSwift/RichardsSwift/WorkerTask.swift: Added.
        (WorkerTask.create(_:priority:queue:)):
        (WorkerTask.run(_:)):
        * APIBench/RichardsSwift/RichardsSwift/main.swift: Added.
        * APIBench/RichardsSwift/RichardsSwift/richards.swift: Added.
        (runRichards):
        * APIBench/api-bench: Added.

2020-05-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use WEBKIT_EXECUTABLE in MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=211665

        Reviewed by Yusuke Suzuki.

        Cleanup MallocBench definitions using WEBKIT_EXECUTABLE. Notify developers
        that MallocBench is unavailable only if bmalloc is being used but the platform
        does not have the functionality required.

        * CMakeLists.txt:
        * MallocBench/MallocBench/CMakeLists.txt:

2020-05-08  Darin Adler  <darin@apple.com>

        Remove no-longer-used PerformanceTests/StitchMarker
        https://bugs.webkit.org/show_bug.cgi?id=211639

        Reviewed by Ryosuke Niwa.

        Having this test around can be confusing since it contains old versions
        of many WebKit source files, which will show up when searching the source
        tree. And since we're not using it, we don't need to keep a copy of it
        in the tip of tree in the repository.

        * StitchMarker: Removed.

2020-04-24  Jon Lee  <jonlee@apple.com>

        MotionMark: add link to bug in about page

        Unreviewed.

        * MotionMark/about.html:

2020-04-24  Jon Lee  <jonlee@apple.com>

        MotionMark: ensure that timestamps are valid during warm up phase of tests
        https://bugs.webkit.org/show_bug.cgi?id=210640

        Reviewed by Said Abou-Hallawa.

        Ensure that Benchmark._benchmarkStartTimestamp is set during warm up phase.
        Otherwise it is NaN, which makes the Benchmark.timestamp invalid, which is
        used by tests like Multiply to drive the animation. When the warm up phase
        completes, the start timestamp is reset.

        Update minor version of benchmark with this bug fix, and include
        version changelog in the about page.

        For testing, add a parameter that allows for adjusting the length of the
        warm up phase. It remains at its current default, 100 ms.

        * MotionMark/about.html: Add section of version changelog. Includes links
        to webkit.org blog posts.
        * MotionMark/developer.html: Add parameter for setting warmup length.
        Remove the Kalman filter parameters, since they should always be fixed.
        * MotionMark/resources/runner/motionmark.css: Include styles to show
        version log.
        * MotionMark/resources/runner/motionmark.js: Factor out default options to
        a property on window.benchmarkController. Include the default warmup length
        of 100 ms.
        (window.benchmarkController.startBenchmark): Refactor to use benchmarkDefaultParameters.
        * MotionMark/resources/debug-runner/motionmark.js: Ditto.
        * MotionMark/resources/strings.js: Update version number.
        * MotionMark/tests/resources/main.js:
        (_animateLoop): Set _benchmarkTimestamp during the warmup phase. Check the
        warmup length. The _benchmarkTimestamp variable remains reset when the test
        begins.

2020-04-07  Saam Barati  <sbarati@apple.com>

        RAMification should have a way of gathering vmmaps for each test at the end of each run
        https://bugs.webkit.org/show_bug.cgi?id=210060

        Reviewed by Yusuke Suzuki.

        When I was debugging a memory issue, I needed to gather vmmaps for each
        RAMification subtest. This patch is checking in the code I wrote to be able
        to do this. It works by:
        - Passing in an argument to RAMification saying we want vmmaps at the end of
        each subtest run.
        - RAMification invokes jsc with an environment variable that tells the shell
        to wait for one character of input from stdin before exiting.
        - The jsc shell also disables the bmalloc scavenger while waiting for input so the
        vmmap we take from the python runner script represents the "footprint" score
        of the benchmark. If the scavenger ran, it would end up releasing too much
        memory for the vmmap to be useful.
        - The python script runs a vmmap, and then communicates to the jsc process
        when the vmmap finishes running.

        * JetStream2/RAMification.py:
        (parseArgs):
        (BaseRunner.__init__):
        (BaseRunner.getResults):
        (LocalRunner.runOneTest):
        (main):
        (main.runTestList):

2020-04-06  Saam Barati  <sbarati@apple.com>

        Implement 1GB of executable memory on arm64
        https://bugs.webkit.org/show_bug.cgi?id=208490
        <rdar://problem/60797127>

        Reviewed by Keith Miller.

        * JetStream2/JetStreamDriver.js:
        (Driver.prototype.dumpJSONResultsIfNeeded):
        (DefaultBenchmark.prototype.updateUIAfterRun):
        (DefaultBenchmark):
        (WSLBenchmark.prototype.updateUIAfterRun):
        (WSLBenchmark):
        (WasmBenchmark.prototype.updateUIAfterRun):
        (WasmBenchmark):
        (Driver.async fetchResources.statusElement.innerHTML.a.href.string_appeared_here):
        (Driver.prototype.async fetchResources):

2020-03-26  Saam Barati  <sbarati@apple.com>

        Make it so RAMification can be run with python 3 and 2 and that it recognizes the new JavaScriptCore.framework directory structure
        https://bugs.webkit.org/show_bug.cgi?id=209636

        Reviewed by Yusuke Suzuki.

        - JavaScriptCore builds now put the jsc shell under JavaScriptCore.framework/Helpers/jsc,
          not JavaScriptCore.framework/Resources/jsc
        - It's also helpful to be able to run RAMification with python3.7 and 2.7,
          since there are some contexts where 3.7 is all we have.

        * JetStream2/RAMification.py:
        (frameworkPathFromExecutablePath):
        (BaseRunner.processLine):
        (LocalRunner.runOneTest):
        (main.runTestList):
        (main):

2020-03-15  Yusuke Suzuki  <ysuzuki@apple.com>

        Should not use variable-length-array (VLA)
        https://bugs.webkit.org/show_bug.cgi?id=209043

        Reviewed by Mark Lam.

        * MediaTime/Configurations/Base.xcconfig:

2020-02-17  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use builtin targets
        https://bugs.webkit.org/show_bug.cgi?id=205166

        Reviewed by Darin Adler.

        * MallocBench/MallocBench/CMakeLists.txt:

2020-01-28  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: speed up index records deletion
        https://bugs.webkit.org/show_bug.cgi?id=206196

        Reviewed by Brady Eidson.

        * IndexedDB/basic/index-cursor-delete-2.html: Added.

2020-01-08  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r242911?): High Sierra Release WK2 Perf bot timing out while running IndexedDB/large-number-of-inserts.html
        https://bugs.webkit.org/show_bug.cgi?id=195952
        <rdar://problem/49137688>

        Re-enable the test after recent IDB performance improvement.

        Reviewed by Alexey Proskuryakov.

        * Skipped:

2020-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API to set purpose and hints of active editable element to input methods
        https://bugs.webkit.org/show_bug.cgi?id=205605

        Reviewed by Žan Doberšek.

        Split ENABLE_IOS_AUTOCORRECT_AND_AUTOCAPITALIZE and remove the IOS prefix.

        * StitchMarker/wtf/FeatureDefines.h:

2020-01-06  Mark Lam  <mark.lam@apple.com>

        Convert ASSERT_DISABLED to ASSERT_ENABLED, and fix some tests of NDEBUG that should actually test for ASSERT_ENABLED.
        https://bugs.webkit.org/show_bug.cgi?id=205776

        Reviewed by Saam Barati.

        * JetStream2/wasm/HashSet.cpp:
        * StitchMarker/wtf/Assertions.h:
        * StitchMarker/wtf/DateMath.cpp:
        (WTF::initializeDates):
        * StitchMarker/wtf/HashTable.h:
        * StitchMarker/wtf/Hasher.h:
        (WTF::StringHasher::addCharacters):
        * StitchMarker/wtf/NeverDestroyed.h:
        (WTF::LazyNeverDestroyed::construct):
        * StitchMarker/wtf/StackBounds.h:
        (WTF::StackBounds::checkConsistency const):
        * StitchMarker/wtf/ValueCheck.h:
        * StitchMarker/wtf/Vector.h:
        (WTF::minCapacity>::checkConsistency):
        * StitchMarker/wtf/text/AtomicStringImpl.cpp:
        * StitchMarker/wtf/text/AtomicStringImpl.h:
        * StitchMarker/wtf/text/StringCommon.h:
        (WTF::hasPrefixWithLettersIgnoringASCIICaseCommon):
        * StitchMarker/wtf/text/StringImpl.h:
        * StitchMarker/wtf/text/SymbolImpl.h:
        * StitchMarker/wtf/text/UniquedStringImpl.h:

2020-01-05  Dean Jackson  <dino@apple.com>

        Rename GraphicsContext3D to GraphicsContextGL
        https://bugs.webkit.org/show_bug.cgi?id=205778
        <rdar://problem/58327597>

        Reviewed by Sam Weinig.

        Rename all the GraphicsContext3D things to GraphicsContextGL
        (includes Extensions3D and GRAPHICS_CONTEXT_3D).

        GraphicsContext3DBase now becomes GraphicsContextGL.
        GraphicsContext3D is now GraphicsContextGLOpenGL (since it represents
        the OpenGL implementation of the API).

        * StitchMarker/wtf/FeatureDefines.h:
        * StitchMarker/wtf/Platform.h:

2019-12-16  Antti Koivisto  <antti@apple.com>

        Add StyleBench subtest for dynamic media query performance
        https://bugs.webkit.org/show_bug.cgi?id=205263

        Reviewed by Zalan Bujtas.

        Add a subtest that contains a small number of rules inside min/max-width media queries.
        The test is executed by resizing the test frame to various widths.

        * StyleBench/index.html:
        * StyleBench/resources/style-bench.js:
        (Random.prototype.chance):
        (defaultConfiguration):
        (mediaQueryConfiguration):
        (predefinedConfigurations):
        * StyleBench/resources/tests.js:
        (makeSteps):

2019-10-26  Chris Lord  <clord@igalia.com>

        Put OffscreenCanvas behind a build flag
        https://bugs.webkit.org/show_bug.cgi?id=203146

        Reviewed by Ryosuke Niwa.

        * StitchMarker/wtf/FeatureDefines.h:

2019-10-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Perf test SVG/UnderTheSeeBenchmark.html timeouts.
        https://bugs.webkit.org/show_bug.cgi?id=203229

        Unreviewed gardening.

        * Skipped: Mark 2 new tests timing out in the GTK perf bot.

2019-10-17  Saam Barati  <sbarati@apple.com>

        Have a CLI version of JetStream 2 to run on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=202998
        <rdar://problem/56208554>

        Reviewed by Tadeu Zagallo.

        This patch adds a CLI version of JS2 to run on watchOS. We run most subtests
        from the browser version of JS2, but skip a few tests that are particularly
        long running, like WSL and some of WTB. We also don't run the Wasm tests
        as we don't JIT on watchOS. Each test runs for fewer iterations in the watch
        version. 15 is the default iteration count. This benchmark runs in 7 minutes on
        a Series 4 watch.

        * JetStream2/JetStreamDriver.js:
        (getIterationCount):
        (getWorstCaseCount):
        (Driver.prototype.async.start):
        (Driver.prototype.resultsJSON):
        (Driver.prototype.dumpJSONResultsIfNeeded):
        (Driver.prototype.async.reportScoreToRunBenchmarkRunner):
        (DefaultBenchmark):
        * JetStream2/RexBench/UniPoker/benchmark.js:
        (Benchmark.prototype.validate):
        (Benchmark):
        * JetStream2/watch-cli.js: Added.

2019-10-17  Adrian Perez de Castro  <aperez@igalia.com>

        [Linux] Avoid usage of <sys/sysctl.h> in MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=203109

        Reviewed by Carlos Alberto Lopez Perez.

        * MallocBench/MallocBench/CPUCount.cpp: Only include <sys/sysctl.h> if
        the sysctl() function will be used.

2019-10-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Perf test IndexedDB/basic/index-cursor-delete.html timeouts
        https://bugs.webkit.org/show_bug.cgi?id=203083

        Unreviewed gardening.

        * Skipped: Skip a test that is timing out on the GTK perf bot.

2019-09-24  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueBitRShift into DFG
        https://bugs.webkit.org/show_bug.cgi?id=192663

        Reviewed by Robin Morisset.

        * BigIntBench/big-int-simple-rshift.js: Added.
        (bigInt):

2019-09-09  Jon Lee  <jonlee@apple.com>

        Upload triangles tests for 3D suite in MotionMark
        https://bugs.webkit.org/show_bug.cgi?id=201606

        Reviewed by Simon Fraser.

        * MotionMark/resources/debug-runner/motionmark.css:
        * MotionMark/resources/debug-runner/tests.js:
        * MotionMark/tests/3d/resources/webgl.js:
        * MotionMark/tests/3d/resources/webgpu.js: Added.
        * MotionMark/tests/3d/triangles-webgl.html: Renamed from Websites/browserbench.org/MotionMark1.1/tests/3d/webgl.html.
        * MotionMark/tests/3d/triangles-webgpu.html: Copied from PerformanceTests/MotionMark/tests/3d/webgl.html.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

        * MediaTime/Configurations/Base.xcconfig:
        * MediaTime/Configurations/DebugRelease.xcconfig:

2019-08-21  Sihui Liu  <sihui_liu@apple.com>

        Add some IDB performance tests
        https://bugs.webkit.org/show_bug.cgi?id=200906

        Reviewed by Geoffrey Garen.

        Add test coverage for IDB performance, and organize IDB tests into two categories.

        * IndexedDB/basic/index-count-key.html: Added.
        * IndexedDB/basic/index-count.html: Added.
        * IndexedDB/basic/index-cursor-advance.html: Added.
        * IndexedDB/basic/index-cursor-continue.html: Added.
        * IndexedDB/basic/index-cursor-continuePrimaryKey.html: Added.
        * IndexedDB/basic/index-cursor-delete.html: Added.
        * IndexedDB/basic/index-cursor-update.html: Added.
        * IndexedDB/basic/index-get.html: Added.
        * IndexedDB/basic/index-multientry.html: Renamed from PerformanceTests/IndexedDB/index-multientry.html.
        * IndexedDB/basic/objectstore-add.html: Added.
        * IndexedDB/basic/objectstore-clear.html: Added.
        * IndexedDB/basic/objectstore-count.html: Added.
        * IndexedDB/basic/objectstore-cursor-advance.html: Added.
        * IndexedDB/basic/objectstore-cursor-continue.html: Added.
        * IndexedDB/basic/objectstore-cursor-delete.html: Added.
        * IndexedDB/basic/objectstore-cursor-update.html: Added.
        * IndexedDB/basic/objectstore-cursor.html: Renamed from PerformanceTests/IndexedDB/objectstore-cursor.html.
        * IndexedDB/basic/objectstore-delete.html: Renamed from PerformanceTests/IndexedDB/index-get.html.
        * IndexedDB/basic/objectstore-get.html: Added.
        * IndexedDB/basic/objectstore-put.html: Renamed from PerformanceTests/IndexedDB/objectstore-get.html.
        * IndexedDB/stress/large-array-keys.html: Renamed from PerformanceTests/IndexedDB/large-array-keys.html.
        * IndexedDB/stress/large-binary-keys.html: Renamed from PerformanceTests/IndexedDB/large-binary-keys.html.
        * IndexedDB/stress/large-number-of-inserts-responsiveness.html: Renamed from PerformanceTests/IndexedDB/large-number-of-inserts-responsiveness.html.
        * IndexedDB/stress/large-number-of-inserts.html: Renamed from PerformanceTests/IndexedDB/large-number-of-inserts.html.
        * IndexedDB/stress/large-string-keys.html: Renamed from PerformanceTests/IndexedDB/large-string-keys.html.
        * Skipped:

2019-08-19  Sihui Liu  <sihui_liu@apple.com>

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545
        <rdar://problem/54201783>

        Reviewed by Youenn Fablet.

        * IndexedDB/large-binary-keys.html:
        * IndexedDB/large-string-keys.html:

2019-08-14  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13
        https://bugs.webkit.org/show_bug.cgi?id=200694
        <rdar://problem/54278851>

        Reviewed by Youenn Fablet.

        Update conditionals that reference __MAC_OS_X_VERSION_MIN_REQUIRED and
        __MAC_OS_X_VERSION_MAX_ALLOWED, assuming that they both have values >=
        101300. This means that expressions like
        "__MAC_OS_X_VERSION_MIN_REQUIRED < 101300" are always False and
        "__MAC_OS_X_VERSION_MIN_REQUIRED >= 101300" are always True.

        * StitchMarker/wtf/Platform.h:
        * StitchMarker/wtf/dependencies/bmalloc/BPlatform.h:
        * StitchMarker/wtf/text/icu/TextBreakIteratorICU.h:
        (WTF::TextBreakIteratorICU::TextBreakIteratorICU):
        (WTF::caretRules): Deleted.

2019-08-06  Michael Saboff  <msaboff@apple.com>

        Make JSC memory benchmark available on OpenSource
        https://bugs.webkit.org/show_bug.cgi?id=195012

        Reviewed by Saam Barati.

        This patch upstreams the RAMification memory benchmark to open source.

        The prior RAMification.py driver script in the Internal directory has been moved here
        with the device execution code seperated out to a new Internal driver script.
        As a result, command line argument parsing as well as acting on the resulting argument
        values has changed.  The remote device Runner creates an ArgumentParser object that is
        passed through main().  In main(), if we have an ArgumentParser, we use it otherwise we
        create one for benchmarking locally.  The arguments object returned from argument
        parsing is now passed to the Runner constructor so it can extract the settings appropriate
        for that particular runner.

        Added some sane argument default values for the JSC command patch and the JetStream2
        source directory.

        Updated the Lua tests to eliminate the testing harness and its overhead, matching what was
        done in the Internal tree.

        * JetStream2/LuaJSFight/hello_world.js:
        (Benchmark.prototype.runIteration): Deleted.
        (Benchmark): Deleted.
        * JetStream2/LuaJSFight/list_search.js:
        (run): Deleted.
        (Benchmark.prototype.runIteration): Deleted.
        (Benchmark): Deleted.
        * JetStream2/LuaJSFight/lists.js:
        (): Deleted.
        (Benchmark.prototype.runIteration): Deleted.
        (Benchmark): Deleted.
        * JetStream2/LuaJSFight/richards.js: Added.
        (runRichards):
        (Scheduler):
        (Scheduler.prototype.addIdleTask):
        (Scheduler.prototype.addWorkerTask):
        (Scheduler.prototype.addHandlerTask):
        (Scheduler.prototype.addDeviceTask):
        (Scheduler.prototype.addRunningTask):
        (Scheduler.prototype.addTask):
        (Scheduler.prototype.schedule):
        (Scheduler.prototype.release):
        (Scheduler.prototype.holdCurrent):
        (Scheduler.prototype.suspendCurrent):
        (Scheduler.prototype.queue):
        (TaskControlBlock):
        (TaskControlBlock.prototype.setRunning):
        (TaskControlBlock.prototype.markAsNotHeld):
        (TaskControlBlock.prototype.markAsHeld):
        (TaskControlBlock.prototype.isHeldOrSuspended):
        (TaskControlBlock.prototype.markAsSuspended):
        (TaskControlBlock.prototype.markAsRunnable):
        (TaskControlBlock.prototype.run):
        (TaskControlBlock.prototype.checkPriorityAdd):
        (TaskControlBlock.prototype.toString):
        (IdleTask):
        (IdleTask.prototype.run):
        (IdleTask.prototype.toString):
        (DeviceTask):
        (DeviceTask.prototype.run):
        (DeviceTask.prototype.toString):
        (WorkerTask):
        (WorkerTask.prototype.run):
        (WorkerTask.prototype.toString):
        (HandlerTask):
        (HandlerTask.prototype.run):
        (HandlerTask.prototype.toString):
        (Packet):
        (Packet.prototype.addTo):
        (Packet.prototype.toString):
        * JetStream2/LuaJSFight/string_lists.js:
        (): Deleted.
        (Benchmark.prototype.runIteration): Deleted.
        (Benchmark): Deleted.
        * JetStream2/RAMification.py: Added.
        (mean):
        (geomean):
        (frameworkPathFromExecutablePath):
        (parseArgs):
        (parseArgs.optStrToBool):
        (BaseRunner):
        (BaseRunner.__init__):
        (BaseRunner.setup):
        (BaseRunner.setEnv):
        (BaseRunner.unsetEnv):
        (BaseRunner.resetForTest):
        (BaseRunner.processLine):
        (BaseRunner.setReturnCode):
        (BaseRunner.getResults):
        (LocalRunner):
        (LocalRunner.__init__):
        (LocalRunner.runOneTest):
        (main):
        (main.runTestList):
        * JetStream2/__init__.py: Added.

2019-07-23  Keith Rollin  <krollin@apple.com>

        Remove rest of NavigatorContentUtils support
        https://bugs.webkit.org/show_bug.cgi?id=200052
        <rdar://problem/53467357>

        Reviewed by Alex Christensen.

        Bug 196070 removes most of the support for the never-used
        NavigatorContentUtils facility. However, there were still a couple of
        left-over references after that change. This patch sweeps those up.

        * StitchMarker/wtf/FeatureDefines.h:

2019-07-12  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueBitLShift into DFG
        https://bugs.webkit.org/show_bug.cgi?id=192664

        Reviewed by Saam Barati.

        * BigIntBench/big-int-simple-lshift.js: Added.

2019-06-28  Konstantin Tokarev  <annulen@yandex.ru>

        Remove traces of ENABLE_ICONDATABASE remaining after its removal in 219733
        https://bugs.webkit.org/show_bug.cgi?id=199317

        Reviewed by Michael Catanzaro.

        While IconDatabase and all code using it was removed,
        ENABLE_ICONDATABASE still exists as build option and C++ macro.

        * StitchMarker/wtf/FeatureDefines.h:

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * MediaTime/Configurations/SDKVariant.xcconfig:

2019-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove support for GTK2 plugins
        https://bugs.webkit.org/show_bug.cgi?id=199065

        Reviewed by Sergio Villar Senin.

        * StitchMarker/wtf/Platform.h:

2019-05-08  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueMod into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186174

        Reviewed by Saam Barati.

        * BigIntBench/big-int-simple-mod.js: Added.

2019-05-06  Saam Barati  <sbarati@apple.com>

        JS2 should print scores for different categories
        https://bugs.webkit.org/show_bug.cgi?id=197605

        Reviewed by Yusuke Suzuki.

        * JetStream2/JetStreamDriver.js:
        (displayCategoryScores):
        (isInBrowser.document.onkeydown):
        (Driver.prototype.async.start):
        (Driver.prototype.async.reportScoreToRunBenchmarkRunner):

2019-04-16  Jon Lee  <jonlee@apple.com>

        [MotionMark] The text "kkkj" is causing Firefox console warning: `unreachable code after return statement`
        https://bugs.webkit.org/show_bug.cgi?id=196814

        Reviewed by Wenson Hsieh.

        * MotionMark/resources/extensions.js:
        (subtract.subtract.sampleY):

2019-04-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] FontPlatformData objects aren't cached at all when using font-family:system-ui
        https://bugs.webkit.org/show_bug.cgi?id=196846
        <rdar://problem/49499971>

        Reviewed by Simon Fraser and Darin Adler.

        * Layout/system-ui-rebuild-emoji.html: Added.

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        -apple-trailing-word is needed for browser detection
        https://bugs.webkit.org/show_bug.cgi?id=196575

        Unreviewed.

        * MotionMark/resources/debug-runner/motionmark.css:
        (#intro .start-benchmark p):

2019-03-27  Ryan Haddad  <ryanhaddad@apple.com>

        REGRESSION (r242911?): High Sierra Release WK2 Perf bot timing out while running IndexedDB/large-number-of-inserts.html
        https://bugs.webkit.org/show_bug.cgi?id=195952

        Unreviewed test gardening.

        * Skipped: Skip the affected test so the bot will finish the run.

2019-03-27  Saam Barati  <sbarati@apple.com>

        JetStream 2 should not report time values as scores
        https://bugs.webkit.org/show_bug.cgi?id=196334

        Reviewed by Yusuke Suzuki.

        * JetStream2/JetStreamDriver.js:
        (toTimeValue):
        (Driver.prototype.async.reportScoreToRunBenchmarkRunner):

2019-03-27  Saam barati  <sbarati@apple.com>

        Unreviewed. Fix individual benchmark description urls to go to in-depth.html instead of about.html

        * JetStream2/JetStreamDriver.js:
        (Driver.prototype.prepareToRun.text.div.id.string_appeared_here.h3):

2019-03-25  Saam barati  <sbarati@apple.com>

        Update the blurb describing JetStream2 and fix a broken link in the in-depth page.

        Rubber-stamped by Filip Pizlo.

        * JetStream2/in-depth.html:
        * JetStream2/index.html:

2019-03-18  Saam Barati  <sbarati@apple.com>

        Add a plan file for JetStream 2
        https://bugs.webkit.org/show_bug.cgi?id=190734

        Reviewed by Mark Lam.

        Make the delay when starting via run-benchmark longer to allow
        the page's animation to finish.

        * JetStream2/JetStreamDriver.js:
        (Driver.prototype.async.initialize):

2019-03-15  Jon Davis  <jond@apple.com>

        Fixed a bug preventing the overall sore to be displayed on JetStream2
        https://bugs.webkit.org/show_bug.cgi?id=195817

        Rubber-stamped by Saam Barati.

        * JetStream2/JetStreamDriver.js:
        (Driver.prototype.async.start):

2019-03-14  Jon Davis  <jond@apple.com>

        Implement a new design for JetStream2
        https://bugs.webkit.org/show_bug.cgi?id=195492

        Reviewed by Saam Barati.

        * JetStream2/JetStream.css:
        (html):
        (body):
        (::selection):
        (main):
        (.logo):
        (.logo .logo-image):
        (#jetstreams):
        (#jetstreams svg):
        (.summary):
        (.summary + .summary):
        (.summary:empty):
        (article, .summary):
        (h1):
        (h2, h3, h4, h5, h6):
        (h4, h5, h6):
        (p):
        (h5, h6):
        (h6):
        (a:link,):
        (a:hover,):
        (#status):
        (#status label,):
        (a.button):
        (#status.loading):
        (#status.error):
        (.error h2, .error p):
        (.error h2):
        (#result-summary):
        (#result-summary label):
        (#result-summary .score):
        (#result-summary .score .interval):
        (#results):
        (.benchmark):
        (.benchmark h3, .benchmark h4, .benchmark .result, .benchmark label):
        (.benchmark-running h4, .benchmark-running .result, .benchmark-running label):
        (.benchmark-done h3, .benchmark-done h4, .benchmark-done .result, .benchmark-done label):
        (.benchmark h3):
        (.benchmark-running h3):
        (.benchmark-done h3):
        (.benchmark h3 a,):
        (.benchmark-done h3 a:hover):
        (.benchmark h4):
        (.benchmark-done h4):
        (.benchmark p,):
        (.benchmark .result):
        (.benchmark-done .result):
        (.benchmark label):
        (.benchmark-done label):
        (@keyframes fadein):
        (to):
        (@keyframes scaledown):
        (@keyframes shine):
        (100%):
        (@keyframes swingin):
        (@media (max-width: 415px)):
        (#logo): Deleted.
        (p.summary): Deleted.
        (p.summary + p.summary): Deleted.
        (p.summary:empty): Deleted.
        (p:first-of-type): Deleted.
        (#status a:link): Deleted.
        (.interval): Deleted.
        (a:link, a:visited): Deleted.
        (a:link:hover): Deleted.
        (table): Deleted.
        (td, th): Deleted.
        (th): Deleted.
        (tr:first-child > th:nth-child(even)): Deleted.
        (tr:nth-child(even):not(:first-child, .benchmark-running)): Deleted.
        (.result): Deleted.
        (.benchmark-running): Deleted.
        (:not(.benchmark-running) .result): Deleted.
        (.benchmark-running .result): Deleted.
        (.benchmark-name): Deleted.
        (.result.category,): Deleted.
        (.benchmark-name:not(.category):not(.geometric-mean)): Deleted.
        (.geometric-mean): Deleted.
        (.benchmark-name:not(:first-child)): Deleted.
        (.benchmark-name a:link,): Deleted.
        (.highlighted-result): Deleted.
        * JetStream2/JetStream2Logo.svg: Added.
        * JetStream2/JetStreamDriver.js:
        (updateUI):
        (Driver.prototype.async.start):
        (Driver.prototype.prepareToRun.text.div.id.string_appeared_here.h3):
        (Driver.prototype.prepareToRun.text.span):
        (Driver.prototype.prepareToRun.a.h3.h4):
        (Driver.prototype.prepareToRun.text.div):
        (Driver.prototype.async.initialize):
        (Driver.prototype.async.fetchResources.prototype.statusElement.onclick):
        (prototype.fetchResources):
        (prototype.updateUIBeforeRun):
        (prototype.updateUIAfterRun):
        (Driver.prototype.async.fetchResources.statusElement.innerHTML.a.href.string_appeared_here):
        (Driver.prototype.async.fetchResources):
        (Driver.prototype.prepareToRun.text.tr.id.string_appeared_here.FIXME.link.to.benchmark.explanation.td): Deleted.
        * JetStream2/clouds.svg: Added.
        * JetStream2/in-depth.html:
        * JetStream2/index.html:
        * JetStream2/jetstreams.svg: Added.

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

        [ESNext][BigInt] Implement "~" unary operation
        https://bugs.webkit.org/show_bug.cgi?id=182216

        Reviewed by Keith Miller.

        * BigIntBench/big-int-simple-bit-not.js: Added.

2019-03-04  Saam Barati  <sbarati@apple.com>

        Add a detailed summary page for JetStream 2
        https://bugs.webkit.org/show_bug.cgi?id=195014

        Rubber-stamped by Darin Adler.

        * JetStream2/JetStream.css:
        (a:link, a:visited):
        * JetStream2/in-depth.html: Added.

2019-02-08  Saam barati  <sbarati@apple.com>

        Update JetStream2 CLI to not print "ms" since we now just print the score values
        https://bugs.webkit.org/show_bug.cgi?id=193981

        Reviewed by Yusuke Suzuki.

        * JetStream2/JetStreamDriver.js:
        (DefaultBenchmark.prototype.updateUIAfterRun):
        (DefaultBenchmark):
        (WSLBenchmark.prototype.updateUIAfterRun):
        (WSLBenchmark):
        (WasmBenchmark.prototype.updateUIAfterRun):
        (WasmBenchmark):

2019-01-31  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION (r240358): IndexedDB/large-binary-keys.html and IndexedDB/large-string-keys.html perf tests failing
        https://bugs.webkit.org/show_bug.cgi?id=193956
        <rdar://problem/47623109>

        Reviewed by Ryosuke Niwa.

        r240358 sets default IDB quota as 50 MB for single test, we need to increase that for big tests.

        * IndexedDB/large-binary-keys.html:
        * IndexedDB/large-string-keys.html:

2019-01-18  Saam Barati  <sbarati@apple.com>

        Use scores everywhere in JetStream2's UI
        https://bugs.webkit.org/show_bug.cgi?id=193593

        Reviewed by Keith Miller.

        * JetStream2/JetStreamDriver.js:
        (DefaultBenchmark.prototype.processResults):
        (DefaultBenchmark.prototype.get score):
        (DefaultBenchmark.scoreDescription):
        (WSLBenchmark.prototype.processResults):
        (WSLBenchmark.prototype.get score):
        (WSLBenchmark.scoreDescription):
        (WasmBenchmark.prototype.processResults):
        (WasmBenchmark.prototype.get score):
        (WasmBenchmark.scoreDescription):
        * JetStream2/index.html:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * MediaTime/Configurations/Base.xcconfig:
        * MediaTime/Configurations/SDKVariant.xcconfig: Added.

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * MediaTime/Configurations/Base.xcconfig:
        * MediaTime/Configurations/SDKVariant.xcconfig: Added.

2018-12-20  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] We should enable CSE into arithmetic operations that speculate BigIntUse
        https://bugs.webkit.org/show_bug.cgi?id=192723

        Reviewed by Yusuke Suzuki.

        * BigIntBench/big-int-cse.js: Added.
        * BigIntBench/big-int-global-cse.js: Added.
        * BigIntBench/big-int-licm.js: Added.

2018-12-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r239377.
        https://bugs.webkit.org/show_bug.cgi?id=192921

        broke 32-bit JSC tests (Requested by keith_miller on #webkit).

        Reverted changeset:

        "[BigInt] We should enable CSE into arithmetic operations that
        speculate BigIntUse"
        https://bugs.webkit.org/show_bug.cgi?id=192723
        https://trac.webkit.org/changeset/239377

2018-12-19  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] We should enable CSE into arithmetic operations that speculate BigIntUse
        https://bugs.webkit.org/show_bug.cgi?id=192723

        Reviewed by Saam Barati.

        * BigIntBench/big-int-cse.js: Added.
        * BigIntBench/big-int-global-cse.js: Added.
        * BigIntBench/big-int-licm.js: Added.

2018-12-17  Suresh Koppisetty  <skoppisetty@apple.com>

        Add "-o/--output" option to startup.py and new_tab.py benchmark scripts to save the results in json format.
        https://bugs.webkit.org/show_bug.cgi?id=192385

        Reviewed by Ryosuke Niwa.

        Sample json output for new tab benchmark script after running for 2 iterations and 2 groups. Values are in milliseconds.
        {
                "NewTabBenchmark": {
                        "metrics": {
                                "Time": {
                                        "current": [
                                                [
                                                        410.2939453125,
                                                        307.81494140625
                                                ],
                                                [
                                                        340.616943359375,
                                                        265.94384765625
                                                ]
                                        ]
                                }
                        }
                }
        }

        Sample json output for startup time benchmark script after running for 2 iterations. Values are in milliseconds.
        {
                "StartupBenchmark": {
                        "metrics": {
                                "Time": {
                                        "current": [
                                                [
                                                        1415.2099609375,
                                                        1439.552978515625
                                                ]
                                        ]
                                }
                        }
                }
        }

        * LaunchTime/launch_time.py:
        * LaunchTime/new_tab.py:
        (NewTabBenchmark.get_test_name):
        * LaunchTime/startup.py:
        (StartupBenchmark.get_test_name):

2018-12-17  Suresh Koppisetty  <skoppisetty@apple.com>

        Import FeedbackServer only if "-f/--feedback-in-browser" option is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=192378

        Reviewed by Ryosuke Niwa.

        FeedbackServer currently depends on Tornado-5.1, which further adds
        dependency of "singledispatch", "backports-abc" and "futures" python libraries.
        Importing FeedbackServer only if "-f/--feedback-in-browser" option is enabled
        will let us run the benchmark scripts without installing any new python libraries.

        * LaunchTime/launch_time.py:
        * LaunchTime/new_tab.py:

2018-12-13  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueDiv into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186178

        Reviewed by Yusuke Suzuki.

        * BigIntBench/big-int-simple-div.js: Added.
        * BigIntBench/value-div-type-propagation.js: Added.

2018-12-10  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add ValueMul into DFG
        https://bugs.webkit.org/show_bug.cgi?id=186175

        Reviewed by Yusuke Suzuki.

        * BigIntBench/big-int-simple-mul.js: Added.
        * BigIntBench/value-mul-type-propagation.js: Added.

2018-11-07  Caio Lima  <ticaiolima@gmail.com>

        [BigInt] Add support to BigInt into ValueAdd
        https://bugs.webkit.org/show_bug.cgi?id=186177

        Reviewed by Keith Miller.

        The idea of BigIntBench is to provide a set of microbenchmarks and
        benchmarks to evaluate how fast BigInt computations are happening on
        JSC implementation.

        Now, we are adding microbenchmarks in this set,
        but the plan is to move these tests to "JSTest/microbenchmarks" when
        BigInt is enabled by default. After that, the focus of Bigint bench is
        to provide a set of tests that represents real use cases of BigInt in
        JS programs.

        * BigIntBench/big-int-add-prediction-propagation.js: Added.
        * BigIntBench/big-int-simple-add.js: Added.
        * BigIntBench/big-int-simple-sub.js: Added.

2018-11-07  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION(r237547): Test failures on 32-bit JSC since the JIT was disabled
        https://bugs.webkit.org/show_bug.cgi?id=191184

        Reviewed by Saam Barati.

        Skip test when the JIT is disabled, it takes too long to run on CLoop.

        * JetStream/cdjs/main.js:

2018-11-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Cache glyph paths and share underline skipping code between all the ports
        https://bugs.webkit.org/show_bug.cgi?id=191239

        Reviewed by Alex Christensen.

        Measures the performance of drawing a whole lot of underlines

        * Layout/underline.html: Added.

2018-10-25  Saam Barati  <sbarati@apple.com>

        Check in corresponding C code in JetStream 2
        https://bugs.webkit.org/show_bug.cgi?id=190733

        Rubber-stamped by Filip Pizlo.

        * JetStream2/simple/float-mm.c: Added.
        * JetStream2/wasm/HashSet.cpp: Added.
        * JetStream2/wasm/gcc-loops.cpp: Added.
        * JetStream2/wasm/quicksort.c: Added.
        * JetStream2/wasm/TSF: Added.
        * JetStream2/wasm/TSF/build.sh: Added.
        * JetStream2/wasm/TSF/config.h: Added.
        * JetStream2/wasm/TSF/gpc.h: Added.
        * JetStream2/wasm/TSF/gpc_code_gen_util.c: Added.
        * JetStream2/wasm/TSF/gpc_instruction.c: Added.
        * JetStream2/wasm/TSF/gpc_instruction_dispatch.gen: Added.
        * JetStream2/wasm/TSF/gpc_instruction_size.gen: Added.
        * JetStream2/wasm/TSF/gpc_instruction_stack_effects.gen: Added.
        * JetStream2/wasm/TSF/gpc_instruction_static_size.gen: Added.
        * JetStream2/wasm/TSF/gpc_instruction_to_string.gen: Added.
        * JetStream2/wasm/TSF/gpc_int_common.h: Added.
        * JetStream2/wasm/TSF/gpc_intable.c: Added.
        * JetStream2/wasm/TSF/gpc_internal.h: Added.
        * JetStream2/wasm/TSF/gpc_interpreter.gen: Added.
        * JetStream2/wasm/TSF/gpc_program.c: Added.
        * JetStream2/wasm/TSF/gpc_proto.c: Added.
        * JetStream2/wasm/TSF/gpc_stack_height.c: Added.
        * JetStream2/wasm/TSF/gpc_threaded.c: Added.
        * JetStream2/wasm/TSF/gpc_worklist.h: Added.
        * JetStream2/wasm/TSF/tsf.h: Added.
        * JetStream2/wasm/TSF/tsf_adaptive_reader.c: Added.
        * JetStream2/wasm/TSF/tsf_asprintf.c: Added.
        * JetStream2/wasm/TSF/tsf_atomics.h: Added.
        * JetStream2/wasm/TSF/tsf_buf_reader.c: Added.
        * JetStream2/wasm/TSF/tsf_buf_writer.c: Added.
        * JetStream2/wasm/TSF/tsf_buffer.c: Added.
        * JetStream2/wasm/TSF/tsf_build_defines.h: Added.
        * JetStream2/wasm/TSF/tsf_config.h: Added.
        * JetStream2/wasm/TSF/tsf_config_stub.h: Added.
        * JetStream2/wasm/TSF/tsf_copier.c: Added.
        * JetStream2/wasm/TSF/tsf_define_helpers.c: Added.
        * JetStream2/wasm/TSF/tsf_define_helpers.h: Added.
        * JetStream2/wasm/TSF/tsf_destructor.c: Added.
        * JetStream2/wasm/TSF/tsf_error.c: Added.
        * JetStream2/wasm/TSF/tsf_format.h: Added.
        * JetStream2/wasm/TSF/tsf_fsdb.c: Added.
        * JetStream2/wasm/TSF/tsf_fsdb_protocol.c: Added.
        * JetStream2/wasm/TSF/tsf_fsdb_protocol.h: Added.
        * JetStream2/wasm/TSF/tsf_generator.c: Added.
        * JetStream2/wasm/TSF/tsf_gpc_code_gen.c: Added.
        * JetStream2/wasm/TSF/tsf_indent.h: Added.
        * JetStream2/wasm/TSF/tsf_internal.h: Added.
        * JetStream2/wasm/TSF/tsf_internal_config.h: Added.
        * JetStream2/wasm/TSF/tsf_internal_config_stub.h: Added.
        * JetStream2/wasm/TSF/tsf_inttypes.h: Added.
        * JetStream2/wasm/TSF/tsf_io.c: Added.
        * JetStream2/wasm/TSF/tsf_io_utils.c: Added.
        * JetStream2/wasm/TSF/tsf_ir.c: Added.
        * JetStream2/wasm/TSF/tsf_ir.h: Added.
        * JetStream2/wasm/TSF/tsf_ir_different.c: Added.
        * JetStream2/wasm/TSF/tsf_ir_different.h: Added.
        * JetStream2/wasm/TSF/tsf_ir_speed.c: Added.
        * JetStream2/wasm/TSF/tsf_limits.c: Added.
        * JetStream2/wasm/TSF/tsf_named_type.c: Added.
        * JetStream2/wasm/TSF/tsf_native.c: Added.
        * JetStream2/wasm/TSF/tsf_parser.c: Added.
        * JetStream2/wasm/TSF/tsf_primitive.c: Added.
        * JetStream2/wasm/TSF/tsf_ra_type_man.c: Added.
        * JetStream2/wasm/TSF/tsf_reflect.c: Added.
        * JetStream2/wasm/TSF/tsf_region.h: Added.
        * JetStream2/wasm/TSF/tsf_serial_in_man.c: Added.
        * JetStream2/wasm/TSF/tsf_serial_out_man.c: Added.
        * JetStream2/wasm/TSF/tsf_serial_protocol.h: Added.
        * JetStream2/wasm/TSF/tsf_sha1.c: Added.
        * JetStream2/wasm/TSF/tsf_sha1.h: Added.
        * JetStream2/wasm/TSF/tsf_sha1_writer.c: Added.
        * JetStream2/wasm/TSF/tsf_sort.c: Added.
        * JetStream2/wasm/TSF/tsf_st.c: Added.
        * JetStream2/wasm/TSF/tsf_st.h: Added.
        * JetStream2/wasm/TSF/tsf_st_typetable.c: Added.
        * JetStream2/wasm/TSF/tsf_stream_file_input.c: Added.
        * JetStream2/wasm/TSF/tsf_stream_file_output.c: Added.
        * JetStream2/wasm/TSF/tsf_type.c: Added.
        * JetStream2/wasm/TSF/tsf_type_in_map.c: Added.
        * JetStream2/wasm/TSF/tsf_type_out_map.c: Added.
        * JetStream2/wasm/TSF/tsf_type_table.c: Added.
        * JetStream2/wasm/TSF/tsf_types.h: Added.
        * JetStream2/wasm/TSF/tsf_util.h: Added.
        * JetStream2/wasm/TSF/tsf_version.c: Added.
        * JetStream2/wasm/TSF/tsf_zip_abstract.c: Added.
        * JetStream2/wasm/TSF/tsf_zip_abstract.h: Added.
        * JetStream2/wasm/TSF/tsf_zip_attr.c: Added.
        * JetStream2/wasm/TSF/tsf_zip_reader.c: Added.
        * JetStream2/wasm/TSF/tsf_zip_writer.c: Added.

2018-10-18  Saam Barati  <sbarati@apple.com>

        Make JetStream 2
        https://bugs.webkit.org/show_bug.cgi?id=187829

        Rubber-stamped by Mark Lam.

        This patch checks in the new JetStream 2 benchmark. JetStream 2 is
        a new JavaScript and Web Assembly benchmark. JetStream 2's goal
        is to measure the startup, worst case, and peak throughput performance
        of the JavaScript engine. JetStream 2 incorporates these previous
        benchmarks:
        - JetStream
        - ARES-6
        - Kraken
        - Web Tooling Benchmark
        - WasmBench
        - RexBench

        JetStream 2 also adds some new benchmarks:
        - Two tests emphasizing web worker performance.
        - One test emphasizing Promise, async iteration, and DataView performance.
        - Two new code load tests.
        - WSL: a test measuring all kinds of things, especially emphasizing exception performance.

        * JetStream2: Added.

2018-10-02  Chris Dumez  <cdumez@apple.com>

        Regression(r236613): Parser/html-parser.html performance test is failing
        https://bugs.webkit.org/show_bug.cgi?id=190201

        Unreviewed, apply the same fix as in r236699 to make sure the iframe is treated as
        same origin, so that calls to document.open() / document.write() succeed.

        * Parser/html-parser.html:

2018-10-01  Chris Dumez  <cdumez@apple.com>

        Regression(r236613): Parser/HTML5-8266-ParseOnly.html performance tests no longer runs
        https://bugs.webkit.org/show_bug.cgi?id=190174

        Reviewed by Ryosuke Niwa.

        Update iframe's sandbox to use 'allow-same-origin' so that the iframe is treated as same-origin and so that
        the top frame can call document.open() / document.write() on the subframe. This test was also failing in
        Firefox without this change.

        * Parser/HTML5-8266-ParseOnly.html:

2018-08-27  Aditya Keerthi  <akeerthi@apple.com>

        Consolidate ENABLE_INPUT_TYPE_COLOR and ENABLE_INPUT_TYPE_COLOR_POPOVER
        https://bugs.webkit.org/show_bug.cgi?id=188931

        Reviewed by Wenson Hsieh.

        * StitchMarker/wtf/FeatureDefines.h: Removed ENABLE_INPUT_TYPE_COLOR_POPOVER.

2018-08-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Have checks are not getting set inside CMake properly
        https://bugs.webkit.org/show_bug.cgi?id=188901

        Reviewed by Michael Catanzaro.

        Add notification that MallocBench is disabled.

        * CMakeLists.txt:

2018-08-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add HAVE_MALLOC_TRIM definition
        https://bugs.webkit.org/show_bug.cgi?id=188897

        Reviewed by Konstantin Tokarev.

        MallocBench should only be built on Apple platforms and platforms that
        have malloc_trim.

        * CMakeLists.txt:

2018-08-13  Jon Lee  <jonlee@apple.com>

        Update MotionMark version number
        https://bugs.webkit.org/show_bug.cgi?id=188535
        <rdar://problem/43254078>

        Reviewed by Said Abou-Hallawa.

        * MotionMark/resources/strings.js: To 1.1.

2018-08-13  Jon Lee  <jonlee@apple.com>

        [MotionMark] Update Multiply test
        https://bugs.webkit.org/show_bug.cgi?id=188532
        <rdar://problem/43252151>

        Reviewed by Said Abou-Hallawa.

        Update Multiply test to have a larger upper limit of number of particles. Cycle through three
        different ways of hiding an element. Add new Multiple suite that isolates those components for
        debugging purposes.

        * MotionMark/resources/debug-runner/tests.js:
        * MotionMark/tests/dom/multiply.html: Added.
        * MotionMark/tests/dom/resources/multiply.js: Added.
        * MotionMark/tests/master/resources/multiply.js:

2018-08-13  Jon Lee  <jonlee@apple.com>

        [MotionMark] Update Leaves test
        https://bugs.webkit.org/show_bug.cgi?id=188530
        <rdar://problem/43251862>

        Reviewed by Said Abou-Hallawa.

        Update Leaves test to include opacity and scale. Add new Leaves suite that isolate those components
        for debugging purposes.

        * MotionMark/resources/debug-runner/tests.js:
        * MotionMark/tests/dom/leaves.html:
        * MotionMark/tests/dom/resources/leaves.js:
        * MotionMark/tests/master/resources/leaves.js:

2018-08-10  Ben Richards  <benton_richards@apple.com>

        Add ability to ignore process prewarming for launch time benchmark
        https://bugs.webkit.org/show_bug.cgi?id=188462

        Reviewed by Ryosuke Niwa.

        Added a flag to the new tab benchmark that will open a blank tab before the tab to be measured in order to ignore process prewarming.

        * LaunchTime/launch_time.py:
        (DefaultLaunchTimeHandler):
        (DefaultLaunchTimeHandler.on_receive_stop_time): Deleted.
        (DefaultLaunchTimeHandler.on_receive_stop_signal):
        (DefaultLaunchTimeHandler.do_HEAD):
        (DefaultLaunchTimeHandler.do_GET):
        (DefaultLaunchTimeHandler.do_POST):
        (LaunchTimeBenchmark):
        (LaunchTimeBenchmark._standard_deviation): Fixed divide by zero bug when '-n' is set to 1
        (LaunchTimeBenchmark.open_tab): Added option to open a blank tab
        (LaunchTimeBenchmark.run):
        * LaunchTime/new_tab.py:
        (NewTabBenchmark.initialize):
        (NewTabBenchmark.run_iteration):
        (NewTabBenchmark.will_parse_arguments):
        (NewTabBenchmark.did_parse_arguments):
        (NewTabBenchmark.ResponseHandler.Handler.get_test_page):
        (NewTabBenchmark.ResponseHandler.Handler.on_receive_stop_time): Deleted.
        (NewTabBenchmark.ResponseHandler.Handler.on_receive_stop_signal):
        (NewTabBenchmark):
        * LaunchTime/startup.py:
        (StartupBenchmark.ResponseHandler.Handler.get_test_page):
        (StartupBenchmark.ResponseHandler.Handler.on_receive_stop_time): Deleted.
        (StartupBenchmark.ResponseHandler.Handler.on_receive_stop_signal):
        (StartupBenchmark):

2018-08-10  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r234750.

        Caused 185 perf test failures.

        Reverted changeset:

        "Add ability to ignore process prewarming for launch time
        benchmark"
        https://bugs.webkit.org/show_bug.cgi?id=188462
        https://trac.webkit.org/changeset/234750

2018-08-09  Ben Richards  <benton_richards@apple.com>

        Add ability to ignore process prewarming for launch time benchmark
        https://bugs.webkit.org/show_bug.cgi?id=188462

        Reviewed by Ryosuke Niwa.

        Added a flag to the new tab benchmark that will open a blank tab before the tab to be measured in order to ignore process prewarming.

        * LaunchTime/launch_time.py:
        (DefaultLaunchTimeHandler):
        (DefaultLaunchTimeHandler.on_receive_stop_time): Deleted.
        (DefaultLaunchTimeHandler.on_receive_stop_signal):
        (DefaultLaunchTimeHandler.do_HEAD):
        (DefaultLaunchTimeHandler.do_GET):
        (DefaultLaunchTimeHandler.do_POST):
        (LaunchTimeBenchmark):
        (LaunchTimeBenchmark._standard_deviation): Fixed divide by zero bug when '-n' is set to 1
        (LaunchTimeBenchmark.open_tab): Added option to open a blank tab
        (LaunchTimeBenchmark.run):
        * LaunchTime/new_tab.py:
        (NewTabBenchmark.initialize):
        (NewTabBenchmark.run_iteration):
        (NewTabBenchmark.will_parse_arguments):
        (NewTabBenchmark.did_parse_arguments):
        (NewTabBenchmark.ResponseHandler.Handler.get_test_page):
        (NewTabBenchmark.ResponseHandler.Handler.on_receive_stop_time): Deleted.
        (NewTabBenchmark.ResponseHandler.Handler.on_receive_stop_signal):
        (NewTabBenchmark):
        * LaunchTime/startup.py:
        (StartupBenchmark.ResponseHandler.Handler.get_test_page):
        (StartupBenchmark.ResponseHandler.Handler.on_receive_stop_time): Deleted.
        (StartupBenchmark.ResponseHandler.Handler.on_receive_stop_signal):
        (StartupBenchmark):

2018-07-26  Andy VanWagoner  <andy@vanwagoner.family>

        [INTL] Remove INTL sub-feature compile flags
        https://bugs.webkit.org/show_bug.cgi?id=188081

        Reviewed by Michael Catanzaro.

        Removed old and unused i18n flag.

        * StitchMarker/wtf/FeatureDefines.h:

2018-07-20  David Fenton  <david_fenton@apple.com>

        REGRESSION (234006) ERROR: Blocked access to external URL http://code.jquery.com/jquery-1.9.1.min.js
        https://bugs.webkit.org/show_bug.cgi?id=187858

        Unreviewed test gardening, skipped test.

        * Skipped: LaunchTime

2018-07-19  Ben Richards  <benton_richards@apple.com>

        Add benchmark for WebKit process launch times
        https://bugs.webkit.org/show_bug.cgi?id=186414

        Reviewed by Ryosuke Niwa.

        Added two benchmarks, one for measuring browser new tab launch time and one for browser startup time.

        * LaunchTime/.gitignore: Added.
        * LaunchTime/feedback_client.html: Added.
        Displays benchmark progress in browser
        * LaunchTime/feedback_server.py: Added.
        (FeedbackServer): Sends data to feedback_client via websocket
        (FeedbackServer.__init__):
        (FeedbackServer._create_app):
        (FeedbackServer._start_server):
        (FeedbackServer._send_all_messages):
        (FeedbackServer.start):
        (FeedbackServer.stop):
        (FeedbackServer.send_message): Send a message to the feedback_client
        (FeedbackServer.wait_until_client_has_loaded): Wait until the feedback_client has opened a websocket connection to the feedback_server
        (FeedbackServer.MainHandler): Handler factory to create handler that serves feedback_client.html
        (FeedbackServer.MainHandler.Handler):
        (FeedbackServer.MainHandler.Handler.get):
        (FeedbackServer.WSHandler): Handler factory to create handler that sends data to feedback client
        (FeedbackServer.WSHandler.Handler):
        (FeedbackServer.WSHandler.Handler.open): On websocket connection opened
        (FeedbackServer.WSHandler.Handler.on_close): On websocket connection closed
        * LaunchTime/launch_time.py: Added.
        (DefaultLaunchTimeHandler): Abstract HTTP request handler for launch time benchmarks
        (DefaultLaunchTimeHandler.get_test_page): Default test page to be overridden by benchmarks
        (DefaultLaunchTimeHandler.get_blank_page):
        (DefaultLaunchTimeHandler.on_receive_stop_time):
        (DefaultLaunchTimeHandler.do_HEAD):
        (DefaultLaunchTimeHandler.do_GET):
        (DefaultLaunchTimeHandler.do_POST):
        (DefaultLaunchTimeHandler.log_message): Suppresses HTTP logs from SimpleHTTPRequestHandler
        (LaunchTimeBenchmark): Abstract class which launch time benchmarks inherit from and override methods desired to customize
        (LaunchTimeBenchmark.__init__):
        (LaunchTimeBenchmark._parse_browser_bundle_path): Parser for bundle path option
        (LaunchTimeBenchmark._parse_args):
        (LaunchTimeBenchmark._run_server): Target function for main server thread
        (LaunchTimeBenchmark._setup_servers):
        (LaunchTimeBenchmark._clean_up):
        (LaunchTimeBenchmark._exit_due_to_exception):
        (LaunchTimeBenchmark._geometric_mean):
        (LaunchTimeBenchmark._standard_deviation):
        (LaunchTimeBenchmark._compute_results): Returns mean and std dev of list of results and pretty prints if should_print=True is specified
        (LaunchTimeBenchmark._wait_times): Mimic numpy.linspace
        (LaunchTimeBenchmark.open_tab): Open a browser tab with the html given by self.response_handler.get_test_page
        (LaunchTimeBenchmark.launch_browser): Open a broser to either the feedback client (if option is set) or a blank page
        (LaunchTimeBenchmark.quit_browser):
        (LaunchTimeBenchmark.quit_browser.quit_app):
        (LaunchTimeBenchmark.quit_browser.is_app_closed):
        (LaunchTimeBenchmark.close_tab):
        (LaunchTimeBenchmark.wait):
        (LaunchTimeBenchmark.log): Print to console and send to feedback client if --feedback-in-browser flag is used
        (LaunchTimeBenchmark.log_verbose): Only logs if --verbose flag is used
        (LaunchTimeBenchmark.run):
        (LaunchTimeBenchmark.group_init): Initialization done before each round of iterations
        (LaunchTimeBenchmark.run_iteration):
        (LaunchTimeBenchmark.initialize): Convenience method to be overriden by subclasses which is called at the end of __init__
        (LaunchTimeBenchmark.will_parse_arguments): Called before argparse.parse_args to let subclasses add new command line arguments
        (LaunchTimeBenchmark.did_parse_arguments): Called after argparse.parse_args to let subclass initialize based on command line arguments
        * LaunchTime/new_tab.py: Added
        (NewTabBenchmark):
        (NewTabBenchmark._parse_wait_time): Parser for wait time option
        (NewTabBenchmark.initialize):
        (NewTabBenchmark.run_iteration):
        (NewTabBenchmark.group_init):
        (NewTabBenchmark.will_parse_arguments):
        (NewTabBenchmark.did_parse_arguments):
        (NewTabBenchmark.ResponseHandler):
        (NewTabBenchmark.ResponseHandler.Handler):
        (NewTabBenchmark.ResponseHandler.Handler.get_test_page):
        * LaunchTime/startup.py: Added
        (StartupBenchmark): This benchmark measures browser startup time and initial page load time
        (StartupBenchmark.initialize):
        (StartupBenchmark.run_iteration):
        (StartupBenchmark.ResponseHandler):
        (StartupBenchmark.ResponseHandler.Handler):
        (StartupBenchmark.ResponseHandler.Handler.get_test_page):
        * LaunchTime/thirdparty/__init__.py: Added.
        (AutoinstallImportHook): Auto installs tornado package for feedback server
        (AutoinstallImportHook.__init__):
        (AutoinstallImportHook._ensure_autoinstalled_dir_is_in_sys_path):
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_tornado):
        (AutoinstallImportHook.greater_than_equal_to_version):
        (AutoinstallImportHook._install):
        (AutoinstallImportHook.get_latest_pypi_url):
        (AutoinstallImportHook.install_binary):
        (autoinstall_everything):
        (get_os_info):

2018-06-25  Jon Lee  <jonlee@apple.com>

        [MotionMark] Add support for version numbers
        https://bugs.webkit.org/show_bug.cgi?id=186479

        Reviewed by Said Abou-Hallawa.

        Add support for displaying the version number as well as including it in the JSON results.

        When loading the front page, script replaces any element with classname version with the
        version number of the benchmark, which is stored in Strings.version.

        The JSON structure for the results includes a new version property:
            {
              "version": "1.0",
              "options": { ... },
              "data": [ ... ]
            }

        When dragging a results file, the version listed will come from the JSON file. Older
        results will not have had the version property, in which case it will default to "1.0".

        * MotionMark/index.html: Update title to some other default. Script will update it.
        Include the version number in the logo title.
        * MotionMark/developer.html: Ditto.
        * MotionMark/about.html: Ditto.

        * MotionMark/resources/runner/motionmark.js:
        (ResultsDashboard): Update constructor to include version. This is used when serializing
        results out to JSON, and displaying the results panel in developer mode.
        (ResultsDashboard._processData): When running the benchmark, include benchmark version string
        in the results object.
        (ResultsDashboard.version):
        (window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
        benchmark version string to the dashboard, which holds the results.
        (window.sectionsManager.setSectionVersion): Helper function to update the element in the
        section with the class name version.
        (window.benchmarkController.initialize): Populate all DOM elements with class name "version"
        with the version string. Update the page title.
        (window.benchmarkController.showResults): When showing results, update the version string
        based on what is included in the JSON results, which would be the same as the benchmark version.
        * MotionMark/resources/runner/motionmark.css: Include missing copyright. Wrap the SVG logo
        in a div and include the version string.
        * MotionMark/resources/strings.js: Add strings for the page title template, and the version.

        * MotionMark/resources/debug-runner/motionmark.css:
        * MotionMark/resources/debug-runner/motionmark.js:
        (window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
        benchmark version string to the dashboard, which holds the results.
        (window.benchmarkController.initialize): Populate all DOM elements with class name "version"
        with the version string. Update the page title. When dragging in JSON results, look for
        version to pass to the dashboard. If it doesn't exist, default to "1.0".
        (window.benchmarkController.showResults): When showing results, update the version string
        based on what is included in the JSON results, instead of the current benchmark version.
        * MotionMark/resources/debug-runner/tests.js: Update page title template.

2018-06-08  Jon Lee  <jonlee@apple.com>

        [MotionMark] Rename Suits test files
        https://bugs.webkit.org/show_bug.cgi?id=186447

        Reviewed by Said Abou-Hallawa.

        * MotionMark/resources/runner/tests.js:
        * MotionMark/tests/master/resources/suits.js: Renamed from PerformanceTests/MotionMark/tests/master/resources/svg-particles.js.
        * MotionMark/tests/master/suits.html: Renamed from PerformanceTests/MotionMark/tests/master/svg-particles.html.
        * MotionMark/tests/svg/suits.html:

2018-06-08  Jon Lee  <jonlee@apple.com>

        Add sub-tests based on Suits
        https://bugs.webkit.org/show_bug.cgi?id=186260

        Reviewed by Said Abou-Hallawa.

        Add a new developer Suits suite with sub-tests that isolate parts of each particle.
        The sub-tests are:
            - Particles using only clip paths
            - Particles using only shapes
            - Particles that have no gradients
            - Particles that have no rotation
            - Particles that do not move around at all (but all of the physics calculations are
            still performed)

        * MotionMark/resources/debug-runner/tests.js:
        * MotionMark/tests/master/resources/svg-particles.js: Rename the stage, particle, and
        benchmark to "Suits" from "SVG". Change SuitsParticle so that we guarantee 50% clip and
        shape paths rather than relying on random chance. Wrap a check around creation of the
        gradient element, and use a simple fill color when we aren't using a gradient.
        * MotionMark/tests/svg/suits.html: Added.
        * MotionMark/tests/svg/suits.js: Added.
        Look for the query string and set the particle based on what is selected.

2018-06-06  Jon Lee  <jonlee@apple.com>

        Allow the ramp controller to run tests that take less time than the initial ramp-up phase
        https://bugs.webkit.org/show_bug.cgi?id=186257

        Reviewed by Said Abou-Hallawa.

        * MotionMark/tests/resources/main.js: Extend the desired end timestamp when ramp-up occurs.
        Previously the controller assumed that the duration of the test was always longer than the
        time it took to figure out the order of magnitude of particles to render. When that range
        is determined, the end timestamp is then extended. If the duration is too short, the controller
        would throw an exception. The fix is to continue extending the timestamp every time the order of
        magnitude tiers up.

        In general testing with really short durations isn't practical, but sometimes it is
        desired for debugging.

        To avoid confusion of the private variables, I renamed Benchmark._startTimestamp to
        Benchmark._benchmarkStartTimestamp, to disambiguate from Controller._startTimestamp.
        Benchmark._startTimestamp is set once and never changed, after the initial 100ms warm-up.
        Controller._startTimestamp is initialized to 0 (which means "not initialized"), and then after
        the warm up is complete, set in Controller.start() to the same wall clock timestamp, and never
        changed afterwards.

2018-06-06  Jon Lee  <jonlee@apple.com>

        Remove unneeded data processing in MotionMark
        https://bugs.webkit.org/show_bug.cgi?id=186256

        Reviewed by Said Abou-Hallawa.

        Remove calculation of average frame rate based on multiple samples at a given complexity.
        It is not used in the calculation of the score, and is just extra work to do at the end
        of a test.

        * MotionMark/developer.html: Remove options to show average data and regression based on
        that data.
        * MotionMark/resources/debug-runner/graph.js: Remove data. Update the time graph that
        shows the relationship between the break point in the regression against the complexity
        graph.
        * MotionMark/resources/debug-runner/motionmark.css: Make the confidence intervals easier
        to see.
        * MotionMark/resources/runner/motionmark.js: Simplify score calculation now that we are
        only calculating regressions on the raw data. We were calculating it based on the averages,
        but that was just for analysis, and not used in the actual score. Get rid of the
        |complexitySamples| local variable.
        * MotionMark/resources/strings.js: Remove unneeded string constant.
        * MotionMark/tests/resources/main.js:
        (processSamples): Refactor so that more of it can be shared between Controller and
        RampController. It also avoids processing the raw samples (controllerSamples) twice for
        the ramp controller.
        (_processComplexitySamples): Remove logic to calculate averages based on complexity.
        (_processMarks): Split this out from the old processSamples.
        (_processControllerSamples): Split this out from the old processSamples.

2018-06-06  Jon Lee  <jonlee@apple.com>

        Strip out more characters when creating permalinks
        https://bugs.webkit.org/show_bug.cgi?id=186259

        Reviewed by Said Abou-Hallawa.

        Tests and suites may have names that make permalinks to the tests less readable when
        shared. Expand the set of characters that are stripped out of the names.

        * MotionMark/resources/debug-runner/motionmark.js: Refactor to call
        stripUnwantedCharactersForURL. For existing links, decode the suite and test names.
        * MotionMark/resources/extensions.js:
        (Utilities.stripUnwantedCharactersForURL): Rename from stripNonASCIICharacters.
        Remove any non-alphanumeric character.

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

        Remove unnecessary MotionMark controllers
        https://bugs.webkit.org/show_bug.cgi?id=186255

        Reviewed by Said Abou-Hallawa.

        Get rid of the ramp30 and the fixed-with-a-step controllers, which aren't used for testing
        or debugging.

        * MotionMark/developer.html: Move the "ramp" option as first, since that is the default
        controller for the benchmark.
        * MotionMark/resources/debug-runner/motionmark.js:
        * MotionMark/resources/runner/motionmark.js: Added missing copyright notice.
        * MotionMark/tests/resources/main.js:

2018-05-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Improve the performance of Font::canRenderCombiningCharacterSequence()
        https://bugs.webkit.org/show_bug.cgi?id=185933

        Reviewed by Ryosuke Niwa.

        * Layout/ComplexLongUnique.html: Added.

2018-05-25  Saam Barati  <sbarati@apple.com>

        Have a memory test where we can validate JSCs mini memory mode
        https://bugs.webkit.org/show_bug.cgi?id=185932

        Reviewed by Mark Lam.

        We add a directory here with the contents of the testmem benchmark.
        To run it, use `Tools/Scripts/run-testmem`. To add new tests in the future,
        you just need to add JS files to this directory.

        * testmem: Added.
        * testmem/air.js: Added.
        * testmem/base64.js: Added.
        * testmem/basic.js: Added.
        * testmem/box2d.js: Added.
        * testmem/crypto-md5.js: Added.
        * testmem/date-format-tofte.js: Added.
        * testmem/earley-boyer.js: Added.
        * testmem/hash-map.js: Added.
        * testmem/regex-dna.js: Added.
        * testmem/splay.js: Added.
        * testmem/tagcloud.js: Added.

2018-05-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r232052.

        Breaks internal builds.

        Reverted changeset:

        "Use more C++17"
        https://bugs.webkit.org/show_bug.cgi?id=185176
        https://trac.webkit.org/changeset/232052

2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use more C++17
        https://bugs.webkit.org/show_bug.cgi?id=185176

        Reviewed by JF Bastien.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj:
        * MediaTime/Configurations/Base.xcconfig:
        * MediaTime/MediaTime.xcodeproj/project.pbxproj:

2018-04-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Improve the performance of FontCascadeDescription's effectiveFamilies
        https://bugs.webkit.org/show_bug.cgi?id=184720

        Reviewed by Simon Fraser.

        This performance test calls SystemFontDatabase::systemFontCascadeList() around 2,000,000 times (before
        this patch is applied), which is roughly equivalent to the page we found the performance problem on.
        The calling pattern is roughly equivalent in this test.

        * Layout/system-ui.html: Added.

2018-03-08  Antti Koivisto  <antti@apple.com>

        Update StyleBench version number in page title to 0.3

        * StyleBench/index.html:

        There has been a bunch of changes, most notably the addition of attribute selector test step.

2018-02-16  Dean Jackson  <dino@apple.com>

        Use OPENGL macros to be more clear about which OpenGL/ES WebGL uses on Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=182894

        Reviewed by Tim Horton.

        Rename OPENGL_ES_2 to OPENGL_ES.

        * StitchMarker/wtf/Platform.h:

2018-02-09  Ryosuke Niwa  <rniwa@webkit.org>

        Make run-perf-tests work with Speedometer 2.0 and re-enable the test
        https://bugs.webkit.org/show_bug.cgi?id=182088

        Reviewed by Antti Koivisto.

        This patch updates the test harness to report new metrics of Speedometer 2.0.

        Replaced the total time by the geometric mean of the time spent in each suite, and added scores
        as a metric in addition to time. Also, updated the PerfTestRunner harness and the results template
        to support "Score" metric with "pt" as its unit.

        * Skipped: Unskipped the test.
        * Speedometer/resources/benchmark-report.js:
        (window.benchmarkClient.willStartFirstIteration..createTest): Added the unit as an optional argument
        to report the score in addition to time. Also report the geomean of time instead of the total time.
        (window.benchmarkClient.willStartFirstIteration): Report the geomean of time.
        (window.benchmarkClient.didRunSuites): Record the entire measuredValues instead of just tests.
        (window.benchmarkClient.didFinishLastIteration): Report the scores.

2018-02-09  Ross Kirsling  <ross.kirsling@sony.com>

        Use REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR on any non-Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=182623

        Reviewed by Alex Christensen.

        * StitchMarker/wtf/Platform.h:
        Simplify #if.

2018-02-01  Antti Koivisto  <antti@apple.com>

        StyleBench: Attribute selectors and other improvements
        https://bugs.webkit.org/show_bug.cgi?id=182387

        Reviewed by Joseph Pecoraro.

        - Add some attributes to elements in all tests
        - Add some attribute selectors to stylesheets in all tests
        - Also add some * selectors to all stylesheets.
        - Add attribute mutation step to all suites
        - Make test steps do more mutations (25->100) and reduce the number of steps to keep testing time in check.
          Too fast steps were running into timer resolution limits.

        * StyleBench/resources/style-bench.js:
        (defaultConfiguration):
        (prototype.randomAttributeName):
        (prototype.randomAttributeValue):
        (prototype.randomAttributeSelector):
        (prototype.makeCompoundSelector):
        (prototype.makeElement):
        (prototype.addClasses):
        (prototype.removeClasses):
        (prototype.mutateAttributes):
        (prototype.async.runForever):
        * StyleBench/resources/tests.js:
        (makeSteps):
        (makeSuite):

2018-02-01  Geoffrey Garen  <ggaren@apple.com>

        Make MallocBench easier for non-WebKit engineers to run
        https://bugs.webkit.org/show_bug.cgi?id=182415

        Reviewed by Saam Barati.

        * MallocBench/MallocBench.xcodeproj/project.pbxproj: Use c++14 so we
        can make_unique.

        Specify that we support all Darwin platforms so you can test them.

        * MallocBench/run-malloc-benchmarks: Specify the path to MallocBench
        and libmbmalloc explicitly, rather than computing them implicitly
        using webkitdirs. Non-WebKit folks don't have the directory structure
        required by webkitdirs.

        Remove Linux-specific and cmake-specific behaviors because we only
        needed them in the world of implicit path computation.

2018-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Make run-perf-tests work with StyleBench and re-enable it
        https://bugs.webkit.org/show_bug.cgi?id=182322

        Reviewed by Antti Koivisto.

        This patch updates the test harness to report new metrics of StyleBench.

        Replaced the total time by the geometric mean of the time spent in each suite, and added scores
        as a metric in addition to time. Also, updated the PerfTestRunner harness and the results template
        to support "Score" metric with "pt" as its unit.

        * Skipped: Unskipped the test.
        * StyleBench/resources/benchmark-report.js:
        (window.benchmarkClient.willStartFirstIteration..createTest): Added the unit as an optional argument
        to report the score in addition to time. Also report the geomean of time instead of the total time.
        (window.benchmarkClient.willStartFirstIteration): Report the geomean of time.
        (window.benchmarkClient.didRunSuites): Record the entire measuredValues instead of just tests.
        (window.benchmarkClient.didFinishLastIteration): Report the scores.
        * resources/results-template.html: Added "Score" as a metric and "pt" as its unit.
        * resources/runner.js:
        (PerfTestRunner..finish): Ditto.

2018-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        StyleBench: Generate more mutation steps
        https://bugs.webkit.org/show_bug.cgi?id=182291

        Rubber-stamped by Antti Koivisto

        Use zero-based index instead of one-based index.

        * StyleBench/resources/tests.js:
        (makeSteps):

2018-01-30  Antti Koivisto  <antti@apple.com>

        StyleBench: Generate more mutation steps
        https://bugs.webkit.org/show_bug.cgi?id=182291

        Reviewed by Ryosuke Niwa.

        The test should be doing multiple rounds of mutations in a single document to test what is supposed to test (like it did before r227756).
        This also makes test results more stable and less dependent on possible first-time costs.

        * StyleBench/resources/benchmark-runner.js:

        Adjust correctionFactor to match the new steps count. With 1.5 Firefox is ~72rpm.

        * StyleBench/resources/tests.js:
        (makeSteps):

        Generate 10 rounds of class/element mutation steps.
        Give each generated step unique name so reporting works.
        Make individual steps do fewer mutations.

2018-01-29  Antti Koivisto  <antti@apple.com>

        StyleBench: Remove : from a test name
        https://bugs.webkit.org/show_bug.cgi?id=182258

        Reviewed by Ryosuke Niwa.

        It breaks reporting.

        * StyleBench/resources/style-bench.js:
        (nthPseudoClassConfiguration):

2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        Temporarily skip StyleBench until webkit.org/b/182088 is fixed.

        * Skipped:

2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        Make StyleBench compatible with run-benchmark and run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=182262

        Reviewed by Antti Koivisto.

        Copied resource files referenced from Speedometer directory since run-benchmark needs to be able
        to checkout each benchmark separately.

        Removed the code to create tests of the same name five times in makeSteps since this
        won't be compatible with either run-benchmark or run-perf-tests.

        * StyleBench/index.html: Removed the code to show warnings for local files since run-benchmark
        doesn't use HTTP server in WebDriver mode.
        * StyleBench/resources/benchmark-report.js: Copied from resources/benchmark-report.js.
        * StyleBench/resources/benchmark-runner.js: Copied from resources/benchmark-runner.js.
        (BenchmarkRunner.prototype._finalize): Use the correction factor of 8 instead of 5 in StyleBench.
        * StyleBench/resources/gauge.png: Copied from resources/gauge.png.
        * StyleBench/resources/gauge@2x.png: Copied from resources/gauge@2x.png.
        * StyleBench/resources/main.css: Copied from resources/main.css.
        * StyleBench/resources/main.js: Copied from resources/main.js.
        * StyleBench/resources/tests.js:
        (makeSteps): Only make each test once.

2018-01-26  Chris Nardi  <cnardi@chromium.org>

        Addressing post-review comments after r226614
        https://bugs.webkit.org/show_bug.cgi?id=182151

        Reviewed by Myles C. Maxfield.

        * StitchMarker/wtf/text/StringImpl.h:
        (WTF::isSpaceOrNewline):
        * StitchMarker/wtf/text/TextBreakIterator.cpp:
        (WTF::numCodeUnitsInGraphemeClusters):
        * StitchMarker/wtf/text/TextBreakIterator.h:

2018-01-22  Antti Koivisto  <antti@apple.com>

        StyleBench: Separate test for :nth pseudo classes
        https://bugs.webkit.org/show_bug.cgi?id=181932

        Reviewed by Sam Weinig.

        Optimization strategies for nth are different from other structural pseudo classes (:first-child etc). Move them to a separate test.

        * StyleBench/resources/style-bench.js:
        (structuralPseudoClassConfiguration):
        (nthPseudoClassConfiguration):

            Add a new configuration.

        (predefinedConfigurations):
        (pseudoClassConfiguration): Deleted.

2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        Temporarily skip Speedometer until we fix the metrics.

        * Skipped:

2018-01-16  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build after r222900

        * MallocBench/MallocBench/CMakeLists.txt:
        The mbmalloc target doesn't exist if we're not in developer mode, so only use it if we are.

2018-01-09  Ryosuke Niwa  <rniwa@webkit.org>

        Speedometer 2.0: Update the About page.
        https://bugs.webkit.org/show_bug.cgi?id=175918

        Reviewed by Keith Miller.

        Updated the about page for Speedometer 2.0.

        * Speedometer/index.html:

== Rolled over to ChangeLog-2018-01-01 ==
