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