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