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 ==
