2019-12-05  Dewei Zhu  <dewei_zhu@apple.com>

        Custom analysis task page should allow schedule any triggerable accepted tests.
        https://bugs.webkit.org/show_bug.cgi?id=204925

        Reviewed by Ryosuke Niwa.

        Fix a bug that subtest will not show on custom analysis task page if both itself and parent test are
        accepted by triggerable.
        Order test list in alphabetical order.

        * public/v3/components/custom-analysis-task-configurator.js:
        (CustomAnalysisTaskConfigurator.prototype._renderTriggerableTests):

2019-10-28  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug that cannot unhide a platform.
        https://bugs.webkit.org/show_bug.cgi?id=203521

        Reviewed by Ryosuke Niwa.

        Before this change, the there is no value in POST when 'hidden' checkbox is unchecked.
        Then the update will fail because platform_hidden cannot be NULL.

        * public/admin/platforms.php: Adapted 'update_boolean_field'.
        * public/admin/triggerables.php: Adapted 'update_boolean_field'.
        * public/include/admin-header.php: Added 'update_boolean_field' helper function to set explict
        boolean value for update.

2019-10-25  Dewei Zhu  <dewei_zhu@apple.com>

        Add SSL support for peformance dashboard database connection.
        https://bugs.webkit.org/show_bug.cgi?id=203426

        Reviewed by Ryosuke Niwa.

        Performance dashboard should allow connecting Postgres database with SSL.

        * public/include/db.php: Add SSL configuration to connection string if specified.
        * tools/js/database.js: Add SSL configuration to connection string if specified.
        (Database.prototype._prepareSSLConfig):
        (Database.prototype.connect):
        * unit-tests/checkconfig.js: Added unit tests for optional ssl fields.

2019-10-22  Dewei Zhu  <dewei_zhu@apple.com>

        Refactor "builds" table "build_number" row to "build_tag" to fit more generic use cases.
        https://bugs.webkit.org/show_bug.cgi?id=203270

        Reviewed by Ryosuke Niwa.

        Rename "build_number" to "build_tag" to fit more generic use cases.
        Add support to be backward compatible to accept reports contain either
        "buildNumber" or "buildTag".

        * browser-tests/index.html:
        * init-database.sql:
        * migrate-database.sql: Updated migration sql for this change.
        * public/admin/test-configurations.php:
        * public/api/measurement-set.php:
        * public/api/runs.php:
        * public/api/upload-root.php: Added support for both "buildNumber" and "buildTag".
        * public/include/report-processor.php: Added support for both "buildNumber" and "buildTag".
        * public/v3/models/builder.js:
        (Builder.prototype.urlForBuild):
        (Builder):
        (Build):
        (Build.prototype.buildTag):
        (Build.prototype.label):
        (Build.prototype.url):
        (Build.prototype.buildNumber): Deleted.
        * public/v3/models/measurement-adaptor.js:
        (MeasurementAdaptor):
        (MeasurementAdaptor.prototype.applyTo.return.build):
        * public/v3/pages/chart-pane-status-view.js:
        * public/v3/pages/test-freshness-page.js:
        (TestFreshnessPage.prototype._renderTooltip):
        * server-tests/admin-platforms-tests.js:
        (reportsForDifferentPlatforms):
        * server-tests/admin-reprocess-report-tests.js:
        * server-tests/api-commits-tests.js:
        * server-tests/api-manifest-tests.js:
        * server-tests/api-measurement-set-tests.js:
        * server-tests/api-report-tests.js: Added unit tests for testing "buildNumber" and "buildTag".
        (emptyReport):
        (reportWitMismatchingCommitTime):
        (reportWithOneSecondCommitTimeDifference):
        (emptySlaveReport):
        (makeReport):
        (reportWithSameSubtestName):
        * server-tests/api-upload-root-tests.js: Added unit tests for testing "buildNumber" and "buildTag".
        * server-tests/privileged-api-add-build-requests-tests.js:
        * server-tests/privileged-api-create-analysis-task-tests.js:
        * server-tests/privileged-api-create-test-group-tests.js:
        (createAnalysisTask):
        * server-tests/privileged-api-upate-run-status.js:
        * server-tests/privileged-api-update-test-group-tests.js:
        (async.createAnalysisTask):
        * server-tests/resources/mock-data.js:
        (MockData.addMockConfiguration):
        (MockData.sampleBuildData):
        (MockData.finishedBuildData):
        * server-tests/tools-sync-buildbot-integration-tests.js:
        * tools/js/buildbot-syncer.js:
        (BuildbotBuildEntry.prototype.initialize):
        (BuildbotBuildEntry.prototype.buildTag):
        (BuildbotBuildEntry.prototype.url):
        (BuildbotSyncer.prototype.urlForBuildTag):
        (BuildbotBuildEntry.prototype.buildNumber): Deleted.
        (BuildbotSyncer.prototype.urlForBuildNumber): Deleted.
        * unit-tests/analysis-task-tests.js:
        (measurementCluster):
        * unit-tests/buildbot-syncer-tests.js:
        * unit-tests/measurement-adaptor-tests.js:
        * unit-tests/measurement-set-analyzer-tests.js:
        * unit-tests/measurement-set-tests.js:
        * unit-tests/resources/mock-v3-models.js:

2019-10-11  Dewei Zhu  <dewei_zhu@apple.com>

        Improve test freshness page interaction experience.
        https://bugs.webkit.org/show_bug.cgi?id=202684

        Reviewed by Ryosuke Niwa.

        Change test freshness page show tooltip on click instead of popuping on mouse hover.
        And clicking anywhere in 'page-with-heading' section except the tooltip can dismiss tooltip.
        Add keyboard support to move focus around including 'Tab' key support.
        Add support to use 'Enter' key to show or dismiss tooltip.
        Add support to use 'Escape' key to dismiss tooltip.

        * public/shared/common-component-base.js: Added support for link to specify 'tabindex'.
        (CommonComponentBase.prototype.createLink):
        (CommonComponentBase.createLink):
        (CommonComponentBase):
        * public/v3/components/base.js: Added support for customizing whether or not prevent default and stop propagation
        while creating event handler.
        (ComponentBase.prototype.createEventHandler):
        (ComponentBase.createEventHandler):
        (ComponentBase):
        * public/v3/components/freshness-indicator.js:
        (FreshnessIndicator): Removed 'url' property and removed customization for mouse event.
        (FreshnessIndicator.prototype.update):
        (FreshnessIndicator.prototype.didConstructShadowTree): Deleted.
        * public/v3/pages/test-freshness-page.js:
        (TestFreshnessPage): Changed to show tooltip on click and added key board event.
        (TestFreshnessPage.prototype.didConstructShadowTree): Added key event support.
        (TestFreshnessPage.prototype._findClosestIndicatorAnchorForCoordinate):
        (TestFreshnessPage.prototype.render):
        (TestFreshnessPage.prototype._renderTooltip):
        (TestFreshnessPage.prototype._constructTableCell): Added tabIndex for each cell that contains freshness indicator.
        (TestFreshnessPage.prototype._configureAnchorForIndicator):
        (TestFreshnessPage.prototype._clearIndicatorState): Changed the color of links in tooltip to a more readable color.
        Added styles when anchor for status cell and links on tooltip are focused.
        (TestFreshnessPage.cssTemplate):

2019-10-04  Zhifei Fang  <zhifei_fang@apple.com>

        [perf dashboard] Test fressness popover sometimes point to wrong place
        https://bugs.webkit.org/show_bug.cgi?id=202606

        Reviewed by Ryosuke Niwa.

        * public/v3/pages/test-freshness-page.js: Use a invisable tooltip anchor to cacluate tooltip position. It also helps to get rid of caculation for determine the tooltip table position. 
        (TestFreshnessPage.prototype._renderTooltip):
        (TestFreshnessPage.cssTemplate):

2019-10-04  Zhifei Fang  <zhifei_fang@apple.com>

        [perf dashboard] Make test fressness head and indicator perfect centered
        https://bugs.webkit.org/show_bug.cgi?id=202602

        Reviewed by Ryosuke Niwa.

        * public/v3/components/freshness-indicator.js: make indicator margin auto, it will then horizontally centered in the container
        (FreshnessIndicator.cssTemplate):
        (FreshnessIndicator):
        * public/v3/pages/test-freshness-page.js: make the table head transform based on the center left
        (TestFreshnessPage.cssTemplate):

2019-10-02  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug that warning icon causes infinite rendering when it has warning message.
        https://bugs.webkit.org/show_bug.cgi?id=202502

        Reviewed by Ryosuke Niwa.

        Fix the problem that a warning icon with a warning message will result in infinite rendering.

        * public/v3/components/button-base.js:
        (ButtonBase):
        (ButtonBase.prototype.setButtonTitle): Fixed a typo in function name and moved the title update to
        render function.
        (ButtonBase.prototype.render): Added the logic to render title.
        * public/v3/components/test-group-revision-table.js: Set warning message by invoking setButtonTitle.
        * public/v3/components/warning-icon.js: Removed the warning messge related code and leave the responsibility
        to ButtonBase.
        (WarningIcon):
        (WarningIcon.prototype.render):

2019-07-30  Dewei Zhu  <dewei_zhu@apple.com>

        Provide build request status description information on dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=199810

        Reviewed by Ryosuke Niwa.

        Add build request status description to show detailed information for a build and show it in dashboard.
        Update SQL for existing instance:
            ALTER TABLE build_requests ADD COLUMN IF NOT EXISTS request_status_description varchar(1024) DEFAULT NULL;

        * ReadMe.md: Updated instructions for initializing a database to include running 'migrate-database.sql'.
        * init-database.sql: Added request_status_description column.
        * migrate-database.sql: A file stores migration SQL for existing instance.
        * public/api/build-requests.php: Added support for updating request_status_description.
        * public/include/build-requests-fetcher.php: Exposed `statusDescription` to API.
        * public/v3/components/test-group-revision-table.js: Added UI for showing build request status detail.
        (TestGroupRevisionTable.prototype._renderTable):
        (TestGroupRevisionTable.prototype._buildDescriptionCell):
        (TestGroupRevisionTable.cssTemplate):
        * public/v3/components/warning-icon.js: Extended warning icon to be able to customize information on hover.
        (WarningIcon):
        (WarningIcon.prototype.render):
        * public/v3/components/button-base.js: Added a instance method to set button title.
        (ButtonBase.prototype.setButtonTitle):
        * public/v3/models/build-request.js: Added 'statusDescription' field.
        (BuildRequest):
        (BuildRequest.prototype.updateSingleton):
        (BuildRequest.prototype.statusDescription):
        * server-tests/api-build-requests-tests.js: Fixed unit tests.
        * server-tests/resources/mock-data.js:
        (MockData.set mockTestSyncConfigWithSingleBuilder): Added 'status_description' in buildbot mock data.
        (MockData.sampleBuildData):
        * server-tests/resources/test-server.js:
        (TestServer.prototype.initDatabase): Added code to execute 'migrate-database.sql' on initialization.
        * server-tests/tools-sync-buildbot-integration-tests.js: Added unit tests.
        * tools/js/buildbot-syncer.js: Added 'statusDescription' field to 'BuildbotBuildEntry'.
        (BuildbotBuildEntry.prototype.initialize):
        (BuildbotBuildEntry.prototype.statusDescription):
        * tools/js/buildbot-triggerable.js:
        (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers):
        * unit-tests/buildbot-syncer-tests.js: Added test code for BuildbotBuildEntry.statusDescription.

2019-07-26  Dewei Zhu  <dewei_zhu@apple.com>

        Dashboard should defaults to first dashboard page when summary page is not available.
        https://bugs.webkit.org/show_bug.cgi?id=200180

        Reviewed by Ryosuke Niwa.

        Fix a bug that charts page will become the default when there is no summary page but there
        is at least one dashboard page.

        * public/v3/main.js: Charts page and analysis category page should not be considered as summay pages.
        (main):

2019-07-30  Dewei Zhu  <dewei_zhu@apple.com>

        Analysis task page should show build request author and creation time.
        https://bugs.webkit.org/show_bug.cgi?id=200274

        Reviewed by Ryosuke Niwa.

        Author and creation time of a build request should be visible in analysis task page.

        * public/v3/pages/analysis-task-page.js: Added UI to show build request creation time and author.
        (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup):

2019-07-29  Dewei Zhu  <dewei_zhu@apple.com>

        Should not render latest build information if there is no data points for a config.
        https://bugs.webkit.org/show_bug.cgi?id=200250

        Reviewed by Ryosuke Niwa.

        Fix a bug test freshness page that tooltip cannot be rendered when a cell does not have
        a data point.

        * public/v3/pages/test-freshness-page.js: Added a null check on commit set before rendering
        latest build informaiton.
        (TestFreshnessPage.prototype._renderTooltip):

2019-07-25  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug that cannot update builder password on builders administrative page.
        https://bugs.webkit.org/show_bug.cgi?id=200154

        Reviewed by Ryosuke Niwa.

        'builders' administrative page should be able to update password for a builder.

        * public/admin/builders.php: Should be able to update builder password.

2019-07-23  Dewei Zhu  <dewei_zhu@apple.com>

        Use 12 digits to show a git commit.
        https://bugs.webkit.org/show_bug.cgi?id=200067

        Reviewed by Ryosuke Niwa.

        Use 12 digits to show a git commit to reasonably descrease commit prefix collision probability
        for repository with large amount of commits.

        * public/v3/models/commit-log.js: Increase digits from 8 to 12 for git SHA.
        (CommitLog.prototype.label):
        (CommitLog.prototype.diff):
        * unit-tests/commit-log-tests.js: Updated unit tests.
        * unit-tests/commit-set-tests.js: Updated unit tests.

2019-07-03  Dewei Zhu  <dewei_zhu@apple.com>

        Test freshness page should expose revision information for latest build on tooltip.
        https://bugs.webkit.org/show_bug.cgi?id=199483

        Reviewed by Ryosuke Niwa.

        Added latest build revision information on test freshness page tooltip.

        * public/v3/pages/test-freshness-page.js: Add build revision information on tooltip.
        (TestFreshnessPage.prototype.didConstructShadowTree):
        (TestFreshnessPage.prototype._fetchTestResults):
        (TestFreshnessPage.prototype.render):
        (TestFreshnessPage.prototype._renderTooltip):
        (TestFreshnessPage.cssTemplate):

2019-06-26  Dewei Zhu  <dewei_zhu@apple.com>

        commit api should not return 'AmbiguousRevisionPrefix' if there is an exact revision match
        https://bugs.webkit.org/show_bug.cgi?id=199227

        Reviewed by Ryosuke Niwa.

        When prefix match is specified, api should check whether there is an exact match when multiple commits
        match the prefix.

        * public/include/commit-log-fetcher.php: Added the logic to check if there is an exact match when multiple matches are found.
        * server-tests/api-commits-tests.js: Added an unit test.

2019-06-24  Dean Johnson  <dean_johnson@apple.com>

        [perf.webkit.org] Update summary page calculations to use mean instead of median
        https://bugs.webkit.org/show_bug.cgi?id=199050

        Reviewed by Dewei Zhu.

        * public/v3/pages/summary-page.js:
        (SummaryPageConfigurationGroup): Updated 'median' references to 'mean'.
        (SummaryPageConfigurationGroup.set _startAndEndPointForTimeRange): Factored out logic for finding data
        points in a timeSeries, within a specified timeRange.
        (SummaryPageConfigurationGroup.set _meanForTimeRange): New. Returns the mean of a timeSeries across a
        given timeRange.

2019-06-20  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug that 'test_metrics' and 'tests' tables are not joined correctly in CommitLogFetcher.fetch_latest_for_platform
        https://bugs.webkit.org/show_bug.cgi?id=199062

        Reviewed by Ryosuke Niwa.

        'test_metrics' and 'tests' should be joined based on 'metric_test' and 'test_id'.

        * public/include/commit-log-fetcher.php: Fix the typo in the query.
        * server-tests/api-commits-tests.js: Added a unit test for this change.

2019-06-17  Dewei Zhu  <dewei_zhu@apple.com>

        Customizable test group form should allow user to supply a revision prefix of a commit and revision starts with 'r'.
        https://bugs.webkit.org/show_bug.cgi?id=198940

        Reviewed by Ryosuke Niwa.

        Customizable test group form should adapt prefix matching when fetching for a commit.

        * browser-tests/customizable-test-group-form-tests.js: Updated and added unit tests.
        * public/v3/components/customizable-test-group-form.js: Removed loggings those a unintentionally committed.
        * public/v3/models/commit-set.js: Adapted prefix matching API when fetching a commit.
        (IntermediateCommitSet.prototype._fetchCommitLogAndOwnedCommits):
        * unit-tests/commit-set-tests.js: Updated unit tests accordingly.

2019-06-13  Dewei Zhu  <dewei_zhu@apple.com>

        Custom analysis task configurator should allow supplying commit prefix and revision starts 'r'.
        https://bugs.webkit.org/show_bug.cgi?id=198847

        Reviewed by Ryosuke Niwa.

        Custom analysis task configurator should not require full SHA to start an A/B test.
        Custom analysis task configurator should accept svn revision starts with 'r'.

        * browser-tests/custom-analysis-task-configurator-tests.js: Added a unit test for this change.
        * public/api/commits.php: Extend this API to allow prefix matching when fethcing a single commit.
        * public/include/commit-log-fetcher.php: Added a function to fetch a commit with prefix.
        * public/v3/components/custom-analysis-task-configurator.js: Add UI support for accepting partial revision.
        (CustomAnalysisTaskConfigurator.prototype._computeCommitSet):
        (CustomAnalysisTaskConfigurator.prototype.async._resolveRevision):
        (CustomAnalysisTaskConfigurator.prototype._buildTestabilityList):
        * public/v3/models/commit-log.js:
        (CommitLog.async.fetchForSingleRevision): Added third argument to specify prefix matching which defaults to false.
        * server-tests/api-commits-tests.js: Added unit tests.
        * unit-tests/commit-log-tests.js: Added a unit test.

2019-05-15  Dewei Zhu  <dewei_zhu@apple.com>

        Perf dashboard erroneously rejects a build request to build owned components when there are no patches.
        https://bugs.webkit.org/show_bug.cgi?id=197928

        Reviewed by Ryosuke Niwa.

        Fix a bug that build type build request that only builds owned components failed to pass sanity check when there
        is no repository accepts patch in triggerable repository group.
        Add a sanity check to throw an error when build request type is build but there is no repository group template.

        * tools/js/buildbot-syncer.js:
        (BuildbotSyncer.prototype._propertiesForBuildRequest): Changed sanity check the always requires repository accepts patch when there is a build to make it also works for build request only builds owned components.
        (BuildbotSyncer._parseRepositoryGroup): Added check for repository group templates not null  when build requiest type is build.
        * unit-tests/buildbot-syncer-tests.js: Added unit tests for this change.
        * unit-tests/resources/mock-v3-models.js: Added mock date for unit tests.

2019-05-14  Dewei Zhu  <dewei_zhu@apple.com>

        Pruning old file logic should not stop after removing 10 files if there are more files to be removed.
        https://bugs.webkit.org/show_bug.cgi?id=197870

        Reviewed by Ryosuke Niwa.

        Pruning old file logic should keep removing removable files to make enough space for a new file upload.
        It should only attempt to remve the files that have not been removed.

        * public/include/uploaded-file-helpers.php: Modified 'prune_old_files' to allow to remove more than 10 files.
        Fixed a bug that a removed file keep getting removed but never free up new space.
        * server-tests/privileged-api-upload-file-tests.js:
        (makeRandomAlnumStringForLength): Helper function to generate random content for a given length.
        * server-tests/resources/test-server.js: Update total file size limit for this change.
        (TestServer.prototype.testConfig):

2019-03-25  Dewei Zhu  <dewei_zhu@apple.com>

        Primary cluster of measurement set should always contain latest point.
        https://bugs.webkit.org/show_bug.cgi?id=196243

        Reviewed by Ryosuke Niwa.

        Fix a bug in measurement-set api that primary cluster may not contain latest data point as
        'carry_over' row may not be updated.

        * public/api/measurement-set.php: Should always keep 'carry_over' data points up to date.
        * server-tests/api-measurement-set-tests.js: Added an unit test for this change.
        Fixed a typo.

2019-03-21  Dewei Zhu  <dewei_zhu@apple.com>

        'custom-configuration-test-group-form' should update test name when selected test or platform changes.
        https://bugs.webkit.org/show_bug.cgi?id=196114

        Reviewed by Ryosuke Niwa.

        r240104 fixes commit sets unnecessarily get updated even there is no change.
        However, this made changing test or platform no longer triggers 'commitSetChange' action.
        Test name should change not only when 'commitSet' gets change, but also platform or test changes.
        Renaming the action name from 'commitSetChange' to a more accurate description 'testConfigChange'.
        Dispatch 'testConfigChange' when platform or test changes.

        * browser-tests/custom-analysis-task-configurator-tests.js: Changed action name to 'commitSetChange'.
        * public/v3/components/custom-analysis-task-configurator.js:
        (CustomAnalysisTaskConfigurator.prototype._didUpdateSelectedPlatforms): Should dispatch 'commitSetChange' action.
        (CustomAnalysisTaskConfigurator.prototype._updateCommitSetMap): Changed action name to 'commitSetChange'.
        * public/v3/components/custom-configuration-test-group-form.js: Added a unit test for this change.
        (CustomConfigurationTestGroupForm.prototype.didConstructShadowTree):

2019-03-18  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug from r226303 that latest build time is not correctly calculated.
        https://bugs.webkit.org/show_bug.cgi?id=195912

        Reviewed by Ryosuke Niwa.

        Time series is ordered by revision time which does not grantee the build time is
        monotonically increasing.

        * public/v3/pages/test-freshness-page.js: Use the latest build time instead of the build time of
        last point on the chart.

2019-03-13  Dewei Zhu  <dewei_zhu@apple.com>

        Test freshness page should improve the ability to correlating issues from same builder.
        https://bugs.webkit.org/show_bug.cgi?id=195242

        Reviewed by Ryosuke Niwa.

        Added the ability to highlight indicators with same builder when mouse is hovering over one indicator.
        This is a very useful visualization for correlating issues specific to a builder.
        Added tooltip with latest build link when hovering over an indicator.

        * public/v3/components/freshness-indicator.js:
        (FreshnessIndicator): Removed 'summary' field as it's no longer needed.
        Added 'highlighted' field.
        (FreshnessIndicator.prototype.update): Added 'highlighted' argument.
        (FreshnessIndicator.prototype.didConstructShadowTree): Make indicator to dispatch mouse enter and leave
        messages so that UI can highlight corresponding cells.
        (FreshnessIndicator.prototype.render):
        (FreshnessIndicator.cssTemplate):
        * public/v3/pages/test-freshness-page.js: Added tooltip to show latest build time and build link.
        Added logic to manually compute table body height.
        (TestFreshnessPage):
        (TestFreshnessPage.prototype.didConstructShadowTree):
        (TestFreshnessPage.prototype._fetchTestResults):
        (TestFreshnessPage.prototype.render):
        (TestFreshnessPage.prototype._renderTooltip):
        (TestFreshnessPage.prototype._constructTableCell):
        (TestFreshnessPage.cssTemplate):

2019-02-26  Dewei Zhu  <dewei_zhu@apple.com>

        The table head of test freshness page should not scroll with the page.
        https://bugs.webkit.org/show_bug.cgi?id=195092

        Reviewed by Ryosuke Niwa.

        Fix the location of the freshness table head to make it easier to corelate cell with test.

        * public/v3/pages/test-freshness-page.js: Changed some style rules to make the table head fixed.
        (TestFreshnessPage.prototype._renderTable):
        (TestFreshnessPage.cssTemplate):

2019-01-17  Dewei Zhu  <dewei_zhu@apple.com>

        Analyzing a chart that does not exist should not halt whole run-analysis script.
        https://bugs.webkit.org/show_bug.cgi?id=193563

        Reviewed by Ryosuke Niwa.

        Halting whole run-analysis script while there is any invalid chart specified in Manifest makes the script fragile.
        Run-analysis is also responsible for adding retry and sending notification which should not be block by this error.
        Skipping analyzing the corresponding configuration seems reasonable.

        * public/v3/models/measurement-set.js:
        (MeasurementSet.prototype._ensureClusterPromise): Only add callback when callback is specified.
        This will help to fix 'UnhandledPromiseRejectionWarning' while running the test.
        * tools/js/measurement-set-analyzer.js:
        (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet): Catch the exception while failing to fetch a measurement set and skip the analysis for this config.
        * unit-tests/measurement-set-analyzer-tests.js: Added unit tests for this.

2019-01-17  Dewei Zhu  <dewei_zhu@apple.com>

        Updating commit in OSBuildFetcher should respect revision range in config.
        https://bugs.webkit.org/show_bug.cgi?id=193558

        Reviewed by Ryosuke Niwa.

        OSBuildFetcher._fetchAvailableBuilds should filter out commits those are not in
        revision range specified by cofnig.

        * server-tests/tools-os-build-fetcher-tests.js: Added a unit test for this change.
        * tools/js/os-build-fetcher.js:
        (prototype.async._fetchAvailableBuilds): Filter out commits from update list if commit
        revision is out of range.

2018-12-31  Dewei Zhu  <dewei_zhu@apple.com>

        Test group results notification should not say a build request to build had failed even when it had successfully completed.
        https://bugs.webkit.org/show_bug.cgi?id=193064

        Reviewed by Ryosuke Niwa.

        Should show 'Build completed' or 'Build failed' for build type build requests.

        * browser-tests/test-group-result-page-tests.js: Added a unit test to guard this bug.
        * tools/js/test-group-result-page.js: Show 'Build completed' or 'Build failed' for build type build requests.

2018-12-21  Dewei Zhu  <dewei_zhu@apple.com>

        Add UI in analysis task page to show commit testability information.
        https://bugs.webkit.org/show_bug.cgi?id=192972

        Reviewed by Ryosuke Niwa.

        Add UI in custom analysis task configuration and customizable test group form to show testability information.
        Fix a bug in 'CustomAnalysisTaskConfigurator._updateCommitSetMap' that 'currentComparison' is incorrectly set.
        SQL to update existing database:
            ALTER TABLE commits ADD COLUMN IF NOT EXISTS commit_testability varchar(128) DEFAULT NULL;

        * browser-tests/custom-analysis-task-configurator-tests.js: Added a unit test for the bug in
        'CustomAnalysisTaskConfigurator._updateCommitSetMap'.
        Added a unit test to make sure 'CustomAnalysisTaskConfigurator' still works when commit fetching never returns.
        * browser-tests/index.html: Imported ''custom-analysis-task-configurator-tests.js'.
        * init-database.sql: Increase 'commit_testability' field length from 64 characters to 128.
        * public/v3/components/custom-analysis-task-configurator.js: Added UI to show testability information.
        (CustomAnalysisTaskConfigurator):
        (CustomAnalysisTaskConfigurator.prototype._didUpdateSelectedPlatforms): Should reset related field for corresponding
        repositories that user does not specify revision.
        (CustomAnalysisTaskConfigurator.prototype._updateMapFromSpecifiedRevisionsForConfiguration): A helper function
        to update '_specifiedCommits' and '_invalidRevisionsByConfiguration' per '_specifiedRevisions'.
        (CustomAnalysisTaskConfigurator.prototype.render):
        (CustomAnalysisTaskConfigurator.prototype._updateCommitSetMap): Fixed a bug that 'currentComparison' is incorrectly set.
        (CustomAnalysisTaskConfigurator.prototype._computeCommitSet):
        (CustomAnalysisTaskConfigurator.prototype.async._fetchCommitsForConfiguration):
        (CustomAnalysisTaskConfigurator.prototype.async._resolveRevision):
        (CustomAnalysisTaskConfigurator.prototype._buildRevisionTable):
        (CustomAnalysisTaskConfigurator.prototype._buildTestabilityList):
        (CustomAnalysisTaskConfigurator.prototype._selectRepositoryGroup):
        (CustomAnalysisTaskConfigurator.prototype._buildRevisionInput):
        (CustomAnalysisTaskConfigurator.cssTemplate):
        * public/v3/components/customizable-test-group-form.js: Added UI to show testability information.
        (CustomizableTestGroupForm.prototype._renderCustomRevisionTable):
        (CustomizableTestGroupForm.prototype._constructTestabilityRows.):
        (CustomizableTestGroupForm.prototype._constructTestabilityRows):
        (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):
        Changing either revision editor or radio button should trigger a re-render as testability
        information for updated revision may change.
        (CustomizableTestGroupForm.cssTemplate):
        * public/v3/models/commit-set.js:
        (IntermediateCommitSet.prototype.commitsWithTestability): Renamed from 'commitsWithTestabilityWarnings'.
        (IntermediateCommitSet.prototype.commitsWithTestabilityWarnings): Deleted.

2018-12-14  Dewei Zhu  <dewei_zhu@apple.com>

        Extend commits table to contain testability information.
        https://bugs.webkit.org/show_bug.cgi?id=191557

        Reviewed by Ryosuke Niwa.

        Added the ability to store testability message in commits table.
        Refactored '/api/report-commits' to support updating commit only.
        Updated os version syncing script to be able to update testability information.

        * init-database.sql: Added 'commit_testability' field to 'commits' table.
        * public/api/report-commits.php: Refactor this api to allow only update existing commits.
        * public/include/commit-log-fetcher.php: Expose testability warning information in this API.
        * public/include/commit-updater.php: Added 'CommitUpdater' to manage commit insert and update.
        * public/v3/models/commit-log.js: CommitLog object should expose testability warning information.
        (CommitLog.prototype.updateSingleton):
        (CommitLog.prototype.testability):
        * public/v3/models/commit-set.js: Added 'commitsWithTestability' and 'commits' to CommitSet and
        IntermediateCommitSet instances.
        (CommitSet.prototype.commitsWithTestability):
        (CommitSet.prototype.commits):
        (IntermediateCommitSet.prototype.commitsWithTestability):
        (IntermediateCommitSet.prototype.commits):
        * server-tests/api-report-commits-tests.js: Added unit tests for '/api/report-commits' when `insert=false`.
        * server-tests/tools-os-build-fetcher-tests.js: Added and updated unit tests.
        * tools/js/os-build-fetcher.js: Added the ability to update commit testability warnings.
        (async.fetchReportAndUpdateCommits):
        (prototype.async.fetchReportAndUpdateBuilds):
        (prototype.async._fetchAvailableBuilds):
        (prototype.async._commitsForAvailableBuilds):
        (prototype._commitsWithinRange):
        (prototype.async._reportCommits):
        (fetchAndReportAllInOrder): Deleted.
        (prototype.fetchAndReportNewBuilds): Deleted.
        (prototype._fetchAvailableBuilds): Deleted.
        (prototype._commitsForAvailableBuilds): Deleted.
        (prototype._submitCommits): Deleted.
        * tools/sync-os-versions.js:
        * unit-tests/commit-log-tests.js: Added a unit test for 'testability'.
        * unit-tests/commit-set-tests.js: Added unit tests for 'commitsWithTestability'.

2018-11-16  Ryosuke Niwa  <rniwa@webkit.org>

        Manifest file can contain a test metric which references a non-existent test
        https://bugs.webkit.org/show_bug.cgi?id=191796

        Reviewed by Dewei Zhu.

        The bug was caused by a race condition between the manifest file fetching the list of tests and test metrics
        and new tests and test metrics being added. Because we would fetch tests before test metrics, it was possible
        for new test metrics which references a test not included in the fetched tests to be present in the test metrics.

        Fixed the bug by changing the order of the queries so that test metrics are fetched before tests. This guarantees
        that any test referenced by a test metric always exists and thefore included in the manifest file.

        Unfortunately no new tests beucase this involes a race condition.

        * public/include/manifest-generator.php:

2018-11-13  Dewei Zhu  <dewei_zhu@apple.com>

        Add cache for CommitLog objects to avoid refetching same commit.
        https://bugs.webkit.org/show_bug.cgi?id=191621

        Reviewed by Ryosuke Niwa.

        Added a cache for fully fetched commit log objects to avoid refetching.

        * public/v3/models/commit-log.js:
        (CommitLog): Added assertion for id.
        Removed unused 'remoteId' as it has been removed since r198479.
        (CommitLog.async.fetchBetweenRevisions): Turned it into async function.
        (CommitLog.async.fetchForSingleRevision): Added the logic to check cache before fetching.
        (CommitLog._constructFromRawData): Added logic to add entries to cache.
        * public/v3/models/repository.js: Added the ability to track fetched commit for certain repository.
        (Repository.commitForRevision): Fixed measurement set not passing commit id while constructing a
        commit log object.
        (Repository.setCommitForRevision): Sets commit for a given revision.
        * public/v3/models/commit-set.js: Fixed unit tests.
        * unit-tests/commit-log-tests.js: Added unit tests for this change.
        Fixed existing tests.
        * unit-tests/commit-set-range-bisector-tests.js: Fixed unit tests.
        * unit-tests/commit-set-tests.js: Fixed unit tests.

2018-11-08  Dewei Zhu  <dewei_zhu@apple.com>

        commit time returned by '/api/measurement-set' should match the one returned by '/api/commits'.
        https://bugs.webkit.org/show_bug.cgi?id=191457

        Reviewed by Dean Jackson and Ryosuke Niwa.

        Commit time returned by '/api/measurement-set' sometimes is calculated by 'epoch from ..'.
        This function may return a floating number with 5 or 6 decimal digits due to double precision limitations.
        However, some commits may be reported with 6 decimal decimal.
        So the commit time for those commits will sometime be rounded to 5 decimal digits.
        In order to avoid front end assertion failure in CommitLog, Database::to_js_time need to round to 5 digits.

        * public/include/db.php: Change the behavior to match that of postgres.
        Added logic to avoid losing precision in php.
        * server-tests/api-measurement-set-tests.js: Added unit tests for this bug.
        (queryPlatformAndMetric): Fix a bug that arguments are not used at all.

2018-11-07  Dewei Zhu  <dewei_zhu@apple.com>

        "/api/report" does not check commit time correctly.
        https://bugs.webkit.org/show_bug.cgi?id=191351

        Reviewed by Ryosuke Niwa.

        Test result report API does not convert formated time string to timestamp correctly
        which result in not checking commit time correctly.

        * public/include/report-processor.php: Use 'strtotime' instead of 'floatval'.
        Accepts the time delta within 1 seconds.
        * server-tests/api-report-tests.js: Added unit tests.
        (reportWitMismatchingCommitTime):
        (reportWithOneSecondCommitTimeDifference):

2018-11-06  Dewei Zhu  <dewei_zhu@apple.com>

        Custom test group form should use commit set map before customization as the behavior of radio buttons.
        https://bugs.webkit.org/show_bug.cgi?id=191347

        Reviewed by Ryosuke Niwa.

        The radio button behavior should always set the same revision while editing the revision input.
        That means we should not use the intermediate commit set map but use the commit set map before
        "Customize" link is clicked.

        * browser-tests/customizable-test-group-form-tests.js: Added a unit test for this bug.
        * public/v3/components/customizable-test-group-form.js: Pass uncustomized commit set so that the radio button
        behavoir preserves.
        (CustomizableTestGroupForm):
        (CustomizableTestGroupForm.prototype.setCommitSetMap):
        (CustomizableTestGroupForm.prototype.didConstructShadowTree):
        (CustomizableTestGroupForm.prototype.render):
        (CustomizableTestGroupForm.prototype._renderCustomRevisionTable):
        (CustomizableTestGroupForm.prototype._constructTableBodyList):
        (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithoutOwner):
        (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithOwner):
        (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):

2018-11-06  Dewei Zhu  <dewei_zhu@apple.com>

        Customizable test group form should not reset manually edited commit value sometimes.
        https://bugs.webkit.org/show_bug.cgi?id=190863

        Reviewed by Ryosuke Niwa.

        After changing the radio button and manually editing the commit value, commit value should not be reset
        while changing the name of the test group.
        Add the logic to prompt warning when manually typed commit does not exist.

        * browser-tests/customizable-test-group-form-tests.js: Added a unit test for this bug.
        * browser-tests/index.html:
        * public/v3/components/customizable-test-group-form.js: Should always update commit set as long as
        the repository of that row does not have a owner repository.
        (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithoutOwner):
        (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithOwner):
        (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):

2018-10-16  Dewei Zhu  <dewei_zhu@apple.com>

        Unreviewed, rolling out r236996.

        Temporarily rollout to fix a manifest generation bug.
        "lastModified" field for certain platform & metric configurations may be missing.

        Reverted changeset:

        "ManifestGenerator shouldn't need more than 1GB of memory or
        run for 30 seconds"
        https://bugs.webkit.org/show_bug.cgi?id=190393
        https://trac.webkit.org/changeset/236996

2018-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Perf dashboard: add a test for aggregating subtests without a matching metric in /api/report
        https://bugs.webkit.org/show_bug.cgi?id=190544

        Rubber-stamped by Keith Miller and unofficially reviewed by Dewei Zhu.

        Added tests for reporting results to /api/report where a test with aggregated metrics has a subtest
        without a matching metric type. The aggregation should simply skip such a subtest instead of returning
        an error or aggregating with a mismatching metric type.

        * server-tests/api-report-tests.js:
        (.makeReport): Extracted out of a test case.

2018-10-11  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r236956. Use array_get to avoid warnings.

        * public/include/report-processor.php:

2018-10-09  Dewei Zhu  <dewei_zhu@apple.com>

        Performance dashboard should show added iterations due failed build requests.
        https://bugs.webkit.org/show_bug.cgi?id=190419

        Reviewed by Ryosuke Niwa.

        Added UI to show added build requests due to previous failed build requests.
        Updated the retry/bisect button to default to initial repetition count when test group is created.

        * public/v3/pages/analysis-task-page.js: Added a div to show added build requests.
        Retry and bisect button should default to initial repetion count.
        (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup):
        (AnalysisTaskTestGroupPane.cssTemplate):

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

        ManifestGenerator shouldn't need more than 1GB of memory or run for 30 seconds
        https://bugs.webkit.org/show_bug.cgi?id=190393

        Reviewed by Antti Koivisto and unofficially reviewed by Dewei Zhu.

        This patch reduces the runtime of /api/manifest from 13s to 7s and reduces the memory requirement from
        1GB to 400MB for the internal dashboard in my local testing.

        The biggest perf win comes from avoid running a complex query over test_configurations to compute
        the latest modified date across different test configuration types ("current" vs. "baseline").
        Instead, we now fetch the entire table row by row and compute the latest modified date in memory.

        Also call intval in many more places to avoid generating double quotes, which is a pretty significant
        proportion of the JSON file size at this point.

        Finally, use references in more places to avoid deep copying of arrays.

        * public/include/manifest-generator.php:
        (ManifestGenerator::generate): Skip the generation of "dashboard" since it's only used by v1 UI.
        (ManifestGenerator::tests): Don't copy each row.
        (ManifestGenerator::metrics): Ditto.
        (ManifestGenerator::platforms): Implement the aforementioned optimization. Instead of grouping
        test configurations for a given metric and platform together, fetch them all and do in-memory
        processing in PHP. Avoid more copying as well.
        (ManifestGenerator::repositories): Avoid more copying.
        (ManifestGenerator::bug_trackers): Ditto.
        (ManifestGenerator::fetch_triggerables): Ditto.

2018-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        /api/report takes 15+ minutes submitting some test results
        https://bugs.webkit.org/show_bug.cgi?id=190382

        Rubber-stamped by Alexey Proskuryakov and unofficially reviewed by Dewei Zhu.

        The issue was that recursively_ensure_tests would issue thousands of dependent queries.

        Since most reporting of results would be happening after all the tests and test metrics had been created,
        simply fetch the list of all tests and test metrics upfront in memory.

        This would slow-down the reporting of other test results but in practice doesn't matter (an extra few seconds
        of overhead) but for slow reporting, it can significantly reduce the runtime from ~10 minutes to ~10 seconds.

        * public/include/report-processor.php:
        (ReportProcessor::process): Call fetch_tests before recursively_ensure_tests.
        (ReportProcessor::fetch_tests): Added. This builds up a mapping of tests based on a parent test ID as well as
        a mapping of metrics per test based on its name and then its aggregator's name.
        (ReportProcessor::recursively_ensure_tests): Added. Use the in-memory maps built in fetch_tests when possible.
        (ReportProcessor::aggregator_list_if_exists): Take a reference instead of passing it by value.
        (TestRunsGenerator::add_aggregated_metric): Now takes metric ID. The code to add the test metric had been moved
        to recursively_ensure_tests.

2018-10-01  Dewei Zhu  <dewei_zhu@apple.com>

        Add retry for test groups with failed build requests.
        https://bugs.webkit.org/show_bug.cgi?id=190188

        Reviewed by Ryosuke Niwa.

        Added retry logic in run-analysis script.
        Current retry logic will only be triggered when there is at least one successful build request for each commit set
        in a test group.

        * init-database.sql: Added 'testgroup_initial_repetition_count' and 'testgroup_may_need_more_requests'.
        SQL to update existing database:
        '''
        BEGIN;
            ALTER TABLE analysis_test_groups
                ADD COLUMN testgroup_initial_repetition_count integer DEFAULT NULL,
                ADD COLUMN testgroup_may_need_more_requests boolean DEFAULT FALSE;
            UPDATE analysis_test_groups SET testgroup_initial_repetition_count = (
                SELECT DISTINCT(COUNT(*)) FROM build_requests WHERE request_group = testgroup_id AND request_order >= 0 GROUP BY request_commit_set
            );
            ALTER TABLE analysis_test_groups ALTER COLUMN testgroup_initial_repetition_count DROP DEFAULT, ALTER COLUMN testgroup_may_need_more_requests SET NOT NULL;
        END;
        '''
        'testgroup_initial_repetition_count' represents the number of successful build request for each commit set when
        test group is created.
        'testgroup_may_need_more_requests' will be set when any build request in test group is set to 'failed'.
        * public/api/build-requests.php: Added the logic to set 'testgroup_may_need_more_requests'.
        * public/api/test-groups.php: Updated 'ready-for-notification' to 'ready-for-further-processing' so that it returns finished test
        groups those either have 'needs_notification' or  'may_need_more_requests' set.
        * public/include/commit-sets-helpers.php: Set 'initial_repetition_count' to repetition count.
        * public/privileged-api/update-test-group.php: Added APIs to add build request for a test group and
        update 'may_need_more_requests' flag.
        * public/v3/models/test-group.js:
        (TestGroup): Added '_mayNeedMoreRequests' and '_initialRepetitionCount' field.
        Refactored code that interacts with '/api/update-test-group'.
        (TestGroup.prototype.updateSingleton):
        (TestGroup.prototype.mayNeedMoreRequests):
        (TestGroup.prototype.initialRepetitionCount):
        (TestGroup.prototype.async._updateBuildRequest):
        (TestGroup.prototype.updateName):
        (TestGroup.prototype.updateHiddenFlag):
        (TestGroup.prototype.async.didSendNotification):
        (TestGroup.prototype.async.addMoreBuildRequests):
        (TestGroup.prototype.async.clearMayNeedMoreBuildRequests): Added API to clear 'may_need_more_requests' flag.
        (TestGroup.fetchAllReadyForFurtherProcessing): Refactored 'TestGroup.fetchAllWithNotificationReady' to return test groups either
        have 'needs_notification' or  'may_need_more_requests' set.
        (TestGroup.fetchAllThatMayNeedMoreRequests): Fetches test groups those may need more build requests.
        * server-tests/api-test-groups.js: Added unit tests.
        * server-tests/privileged-api-add-build-requests-tests.js: Added unit tests for 'add-build-requests' API.
        * server-tests/privileged-api-update-test-group-tests.js: Added unit tests.
        * server-tests/resources/mock-data.js:
        (MockData.addMockData):
        * server-tests/resources/test-server.js:
        (TestServer.prototype._determinePgsqlDirectory): Fixed a bug that 'childProcess.execFileSync' may return a buffer.
        * tools/run-analysis.js: Added logic to add extra build request before sennding notification.
        * tools/js/retry-failed-build-requests.js:
        (async.createAdditionalBuildRequestsForTestGroupsWithFailedRequests): Module that add extra build requests.
        * unit-tests/retry-failed-build-requests-tests.js: Added.
        * unit-tests/test-groups-tests.js: Added unit tests.

2018-09-21  Dewei Zhu  <dewei_zhu@apple.com>

        Apache can return a corrupt manifest file while ManifestGenerator::store is running
        https://bugs.webkit.org/show_bug.cgi?id=189822

        Reviewed by Ryosuke Niwa.

        Updating a file on performance dashboard should be transactional between php and apache.
        Otherwise, partial content may be served.

        * public/api/measurement-set.php: Adapted invocation of 'generate_json_date_with_elapsed_time_if_needed'.
        * public/api/runs.php: Adapted invocation of 'generate_json_date_with_elapsed_time_if_needed'.
        * public/include/db.php: Make creating file transactionaly by taking advantage of
        'move/rename' operation is atomic in OS.
        Added logic to avoid overwriting file if all content except specified filed are identical.
        * public/include/json-header.php: Added a helper function that added 'status' but does not
        convert content to json.
        * public/include/manifest-generator.php: Adapted invocation of 'generate_json_date_with_elapsed_time_if_needed'.
        * public/shared/statistics.js: Removed unnecessary logging.
        (Statistics.new.sampleMeanAndVarianceFromMultipleSamples):
        * server-tests/api-manifest-tests.js: Updated one unit test.

2018-08-22  Dewei Zhu  <dewei_zhu@apple.com>

        Show t-test results based on individual measurements to analysis task page.
        https://bugs.webkit.org/show_bug.cgi?id=188425

        Reviewed by Ryosuke Niwa.

        Added comparison for individual iterations in analysis task page.
        Added comparison for individual iterations for notification on A/B tests completion.
        Refactored t-distribution inverse lookup to any degree of freedom with 5 significant figures.

        * public/shared/statistics.js: Refactored t-distribution inverse lookup function and adapted this
        change to all invocations.
        (Statistics.new.this.supportedConfidenceIntervalProbabilities):
        (Statistics.new.this.supportedOneSideTTestProbabilities):
        (Statistics.new.this.confidenceIntervalDelta):
        (Statistics.new.sampleMeanAndVarianceForMultipleSamples):
        (Statistics.new.this.probabilityRangeForWelchsT):
        (Statistics.new.this.probabilityRangeForWelchsTFromTwoSampleSets):
        (Statistics.new.this._determinetwoSidedProbabilityBoundaryForWelchsT):
        (Statistics.new.this.computeWelchsT):
        (Statistics.new.this._computeWelchsTFromStatistics):
        (Statistics.new.this.minimumTForOneSidedProbability): Function that does t-distribution inverse lookup.
        * public/v3/components/analysis-results-viewer.js: Adapted TestGroup.compareTestResults change.
        (AnalysisResultsViewer.TestGroupStackingBlock.prototype._measurementsForCommitSet):
        (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus):
        (AnalysisResultsViewer.TestGroupStackingBlock.prototype._valuesForCommitSet): Deleted.
        * public/v3/components/test-group-results-viewer.js: Show both comparisions for both individual and mean.
        (TestGroupResultsViewer.prototype._renderResultsTable):
        (TestGroupResultsViewer.prototype._buildRowForMetric.):
        (TestGroupResultsViewer.prototype._buildValueMap):
        * public/v3/models/test-group.js:
        (TestGroup.compareTestResults): Added comparison for individual iterations.
        * tools/js/test-group-result-page.js:
        (TestGroupResultPage.prototype._constructTableForMetric):
        (TestGroupResultPage.prototype.get styleTemplate):
        (TestGroupResultPage):
        (TestGroupResultPage.prototype._URLForAnalysisTask): Renamed to '_resultsForTestGroup'
        * unit-tests/statistics-tests.js: Updated and added unit tests.

2018-07-13  Dewei Zhu  <dewei_zhu@apple.com>

        CustomConfigurationTestGroupForm should dispatch different arguments based on whether analysis task is created.
        https://bugs.webkit.org/show_bug.cgi?id=187675

        Reviewed by Ryosuke Niwa.

        This change will fix the bug that no notification will be sent for any test groups except the
        first one in any custom perf-try A/B task.

        * public/v3/components/custom-configuration-test-group-form.js:
        (CustomConfigurationTestGroupForm.prototype.startTesting): Conditionally includes taskName based on
        whether or not analysis task is created.

2018-07-03  Dewei Zhu  <dewei_zhu@apple.com>

        MeasurementSet should merge last four segments into two if values are identical.
        https://bugs.webkit.org/show_bug.cgi?id=187311

        Reviewed by Ryosuke Niwa.

        If last four segments has the same value, MeasurmentSet should merge them.

        * public/v3/models/measurement-set.js: Added the logic to conditionally merge last segments.
        (MeasurementSet.prototype.fetchSegmentation):
        * unit-tests/measurement-set-tests.js: Added a unit test for this change.

2018-06-29  Dewei Zhu  <dewei_zhu@apple.com>

        Manifest.reset should clear static map for BugTracker and Bug objects.
        https://bugs.webkit.org/show_bug.cgi?id=187186

        Reviewed by Ryosuke Niwa.

        If static maps of BugTracker and Bug objects are not cleared up, updating singleton
        of Bug object will fail assertion.

        * public/v3/models/manifest.js: Clear static map for BugTracker and Bug.
        (Manifest.reset):
        * server-tests/api-manifest-tests.js: Added a unit test for this change.

2018-06-29  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug in range bisector that start commit may be counted twice.
        https://bugs.webkit.org/show_bug.cgi?id=187205

        Reviewed by Darin Adler.

        Range bisector counted start commit twice if start commit is the same as end commit.

        * public/v3/commit-set-range-bisector.js:
        (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits):
        * unit-tests/commit-set-range-bisector-tests.js: Added a unit test for this change.

2018-06-28  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug ComponentBase that wrong content template may be used.
        https://bugs.webkit.org/show_bug.cgi?id=187159

        Reviewed by Ryosuke Niwa.

        ComponentBase uses '_parsed' to mark whether content and style templates of a class
        is parsed. However, derived class parsing will be skipped as 'Derive._parsed' is available
        via prototype chain whenever the base class is parsed.

        * browser-tests/component-base-tests.js: Added unit tests.
        * public/v3/components/base.js: Added 'hasOwnProperty' to make sure current class is parsed.
        (ComponentBase.prototype._ensureShadowTree):

2018-06-25  Dewei Zhu  <dewei_zhu@apple.com>

        MeasurementSetAnalyzer should check triggerable availability before creating confirming A/B tests.
        https://bugs.webkit.org/show_bug.cgi?id=187028

        Reviewed by Ryosuke Niwa.

        If the triggerable is not available, MeasurmentSetAnalyzer should only create analysis task without
        confirming A/B tests.

        * tools/js/measurement-set-analyzer.js: Added logic to check triggerable availability.
        (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet):
        (MeasurementSetAnalyzer):
        * unit-tests/measurement-set-analyzer-tests.js: Updated unit tests and added a new unit test for this change.

2018-06-11  Dewei Zhu  <dewei_zhu@apple.com>

        Extend test group rule to support 'userInitiated' field.
        https://bugs.webkit.org/show_bug.cgi?id=186544

        Reviewed by Ryosuke Niwa.

        Added support for rule specifying whether or not test group is user initiated.

        * tools/js/analysis-results-notifier.js: Rule now support 'userInitiated' field.
        (AnalysisResultsNotifier.prototype.async.sendNotificationsForTestGroups):
        (AnalysisResultsNotifier.prototype._applyRules):
        (AnalysisResultsNotifier._matchesRule):
        * unit-tests/analysis-results-notifier-tests.js: Added unit tests for this change.

2018-05-29  Dewei Zhu  <dewei_zhu@apple.com>

        CommitSet range bisector should use commits occur in commit sets which specify the range as valid commits for commits without ordering.
        https://bugs.webkit.org/show_bug.cgi?id=186062

        Reviewed by Ryosuke Niwa.

        For commits without ordering, we should use the commits occurs in the commit sets which specify the range as valid commits.
        Commit sets in range should only contain those valid commits for corresponding repositories.

        * public/v3/commit-set-range-bisector.js: Updated logic to add check on commits without ordering.
        (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits):
        * unit-tests/commit-set-range-bisector-tests.js: Added a unit test for this case.

2018-06-07  Dewei Zhu  <dewei_zhu@apple.com>

        Related task may not have a metric or platform.
        https://bugs.webkit.org/show_bug.cgi?id=186426

        Reviewed by Ryosuke Niwa.

        Related task in the related task list can be a custom analysis task which
        may not have platform or metric.

        * public/v3/pages/analysis-task-page.js: Added null checks for platform and metric.
        (AnalysisTaskPage.prototype._renderRelatedTasks):

2018-06-07  Dewei Zhu  <dewei_zhu@apple.com>

        Fix browser test failed assertions and a bug in 'common-component-base'
        https://bugs.webkit.org/show_bug.cgi?id=186423

        Reviewed by Ryosuke Niwa.

        Fixed serveral assertion failures in browser tests.
        Fixed a bug in common-component-base that null/undefined as attribute value is not allowed.

        * browser-tests/chart-revision-range-tests.js: Should not import 'lazily-evaluated-function.js' twice.
        * browser-tests/chart-status-evaluator-tests.js: Should not import 'lazily-evaluated-function.js' twice.
        * browser-tests/component-base-tests.js: Added a unit test for element attributes being null or undefined.
        * browser-tests/index.html: Make mocked data from makeSampleCluster also contains commit_order.
        * public/shared/common-component-base.js: Make it allow to take null as attribute value.
        (CommonComponentBase.createElement):

2018-05-24  Dewei Zhu  <dewei_zhu@apple.com>

        Added sending notification feature when test group finishes.
        https://bugs.webkit.org/show_bug.cgi?id=184340

        Reviewed by Ryosuke Niwa.

        Added 'testgroup_needs_notification' filed to 'analysis_test_group' table to indicate whether a test group
        has a pending notification.
        Added 'testgroup_notification_sent_at' to record the last notification sent time.
        SQL queries to update existing database are:
            'ALTER TABLE analysis_test_groups ADD COLUMN testgroup_needs_notification boolean NOT NULL DEFAULT FALSE;'
            'ALTER TABLE analysis_test_groups ADD COLUMN testgroup_notification_sent_at timestamp DEFAULT NULL;'
        Updated 'run-analysis' script to be able to send notification when test group finishes.
        Added 'Notify on completion' checkbox while creating/retrying/bisecting a test group.

        * browser-tests/test-group-form-tests.js: Updated existing tests and added a new test.
        * browser-tests/test-group-result-page-tests.js: Added unit tests for TestGroupResultPage.
        * init-database.sql: Added 'testgroup_needs_notification' filed to 'analysis_test_group' table.
        * public/api/test-groups.php: Added '/api/test-groups/ready-for-notification' API to 'test-group' to show all
        test groups that need to send notification. Only the ones with 'completed', 'failed' or 'cancelled' status and its
        'testgroup_needs_notification' is true will be returned by this API.
        * public/include/build-requests-fetcher.php: Added 'fetch_requests_for_groups' to return test groups with given ids.
        * public/include/commit-sets-helpers.php: Updated the logic to support setting 'testgroup_needs_notification'
        while create an analysis_test_groups.
        * public/privileged-api/create-analysis-task.php: Updated the logic to support setting 'testgroup_needs_notification'.
        * public/privileged-api/create-test-group.php: Updated the logic to support setting 'testgroup_needs_notification'.
        * public/privileged-api/update-test-group.php: Updated the logic to support updating 'testgroup_needs_notification'.
        Extended this API to allow authentication both from CSRF token and slave.
        * public/v3/components/custom-configuration-test-group-form.js:
        (CustomConfigurationTestGroupForm.prototype.startTesting): Pass 'notifyOnCompletion' information which represents
        'testgroup_needs_notification' from API perspective.
        * public/v3/components/customizable-test-group-form.js:
        (CustomizableTestGroupForm.prototype.startTesting): Pass 'notifyOnCompletion' information which represents
        'testgroup_needs_notification' from API perspective.
        (CustomizableTestGroupForm.cssTemplate): Added space between 'Notify on completion' checkbox and test group iteration selection list.
        * public/v3/components/test-group-form.js:
        (TestGroupForm): Added '_notifyOnCompletion' instance variable.
        (TestGroupForm.prototype.didConstructShadowTree): Added 'onchange' event for notify on completion checkbox.
        (TestGroupForm.prototype.startTesting): Pass 'notifyOnCompletion' information which represents
        'testgroup_needs_notification' from API perspective.
        (TestGroupForm.cssTemplate): Added space between 'Notify on completion' checkbox and test group iteration selection list.
        * public/v3/models/analysis-results.js: Export 'AnalysisResults'.
        (AnalysisResults.fetch): Update API path to use absolute url.
        (AnalysisResults):
        * public/v3/models/analysis-task.js:
        (AnalysisTask.async.create): Extend this function to take notifyOnCompletion as argument which will be used as
        'needsNotification' to send to server.
        (AnalysisTask):
        * public/v3/models/test-group.js:
        (TestGroup): Added '_needsNotification' field.
        (TestGroup.prototype.updateSingleton): Added logic to update '_needsNotification' field.
        (TestGroup.prototype.needsNotification): Returns '_needsNotification' field.
        (TestGroup.prototype.author): Returns author information.
        (TestGroup.prototype.async.didSendNotification): API that updates 'testgroup_needs_notification' to true.
        (TestGroup.prototype.async.fetchTask): API to fetch the task when it has not been fetched.
        (TestGroup.createWithTask): Updated this function to accept 'notifyOnCompletion' which will be used as
        'needsNotification' to send to server.
        (TestGroup.createWithCustomConfiguration): Updated this function to accept 'notifyOnCompletion' which will be used as
        'needsNotification' to send to server.
        (TestGroup.createAndRefetchTestGroups): Updated this function to accept 'notifyOnCompletion' which will be used as
        'needsNotification' to send to server.
        (TestGroup.fetchAllWithNotificationReady): New function that invokes '/api/test-groups/ready-for-notification'.
        * public/v3/pages/analysis-task-page.js: Update logic to 'notifyOnCompletion' around
        (AnalysisTaskChartPane.prototype.didConstructShadowTree):
        (AnalysisTaskResultsPane.prototype.didConstructShadowTree):
        (AnalysisTaskTestGroupPane.prototype.didConstructShadowTree):
        (AnalysisTaskPage.prototype.didConstructShadowTree):
        (AnalysisTaskPage.prototype._retryCurrentTestGroup):
        (AnalysisTaskPage.prototype.async._bisectCurrentTestGroup):
        (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList.set const):
        (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList):
        (AnalysisTaskPage.prototype._createCustomTestGroup):
        * public/v3/pages/chart-pane.js: Added 'Notify on completion' checkbox.
        (ChartPane.prototype.didConstructShadowTree):
        (ChartPane.prototype.async._analyzeRange):
        * public/v3/pages/create-analysis-task-page.js: Adapted API change.
        (CreateAnalysisTaskPage.prototype._createAnalysisTaskWithGroup):
        * server-tests/api-test-groups.js: Added tests for '/api/test-groups/ready-for-notification'.
        * server-tests/privileged-api-create-analysis-task-tests.js: Updated tests to adapt this change.
        Added new tests.
        * server-tests/privileged-api-create-test-group-tests.js: Added new tests.
        * server-tests/privileged-api-update-test-group-tests.js: Added unit test for 'update-test-group' API.
        * server-tests/resources/mock-data.js: addMockData should set 'testgroup_needs_notification' to be true.
        * server-tests/tools-sync-buildbot-integration-tests.js: Updated tests to adapt this change.
        (async.createTestGroupWihPatch):
        (createTestGroupWihOwnedCommit):
        * tools/js/analysis-results-notifier.js: Added notifier to send notification for completed test groups.
        (AnalysisResultsNotifier):
        (AnalysisResultsNotifier.prototype.async.sendNotificationsForTestGroups):
        (AnalysisResultsNotifier.prototype._sendNotification): Invoke remote API to send notification.
        (AnalysisResultsNotifier.prototype._constructMessageByRules):
        (AnalysisResultsNotifier._matchesRule):
        (AnalysisResultsNotifier._applyUpdate):
        (AnalysisResultsNotifier.async._messageForTestGroup): Build html as message body for a test group.
        (AnalysisResultsNotifier._URLForAnalysisTask): Returns URL for an analysis task.
        (AnalysisResultsNotifier._instantiateNotificationTemplate):
        * tools/js/test-group-result-page.js: Added 'TestGroupResultPage' and 'BarGraph' to show test group result.
        (TestGroupResultPage):
        (TestGroupResultPage.prototype.async.setTestGroup):
        (TestGroupResultPage._urlForAnalysisTask):
        (TestGroupResultPage.prototype._URLForAnalysisTask):
        (TestGroupResultPage.prototype.constructTables):
        (TestGroupResultPage.prototype._constructTableForMetric):
        (TestGroupResultPage.):
        (TestGroupResultPage.prototype.get pageContent):
        (TestGroupResultPage.prototype.get styleTemplate):
        (BarGraph):
        (BarGraph.prototype.setWidth):
        (BarGraph.prototype._constructBarGraph):
        (BarGraph.prototype.get pageContent):
        (BarGraph.prototype.get styleTemplate):
        * tools/js/measurement-set-analyzer.js: Adapted 'AnalysisTask.create' change.
        (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet):
        (MeasurementSetAnalyzer):
        * tools/js/v3-models.js:
        * tools/run-analysis.js: Added the logic that sends notification for completed test groups.
        (main):
        (async.analysisLoop):
        * unit-tests/analysis-task-tests.js:
        * unit-tests/analysis-results-notifier-tests.js: Added a unit test for 'AnalysisResultsNotifier' and 'NotificationService'.
        * unit-tests/measurement-set-analyzer-tests.js: Updated unit tests per this change.
        * unit-tests/test-groups-tests.js: Added unit tests for 'TestGroup.needsNotification'.
        * unit-tests/resources/mock-remote-api.js: Only set 'privilegedAPI' when it exits.

2018-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        Add the basic support for writing components in node.js
        https://bugs.webkit.org/show_bug.cgi?id=186299

        Reviewed by Antti Koivisto.

        Add the basic support for writing components in node.js for generating rich email notifications.

        To do this, this patch introduces MarkupComponentBase and MarkupPage which implement similar API
        to ComponentBase and Page classes of v3 UI code. This enables us to share code between frontend
        and the backend in the future. Because there is no support for declarative custom elements or
        shadow root in HTML, MarkupComponentBase uses a similar but distinct concept of "content" tree
        to represent the "DOM" tree for a component. When generating the HTML, MarkupComponentBase and
        MarkupPage collectively transforms stylesheets and flattens the tree into a single HTML. In order
        to keep this flatteneing logic simple, MarkupComponentBase only supports a very small subset of
        CSS selectors to select elements by their local names and class names.

        Specifically, each class name and element name based selectors are replaced by a globally unique
        class name based selector, and each element which matches the selector is applied of the same
        globally unique class name. The transformation is applied when constructing the "content" tree
        as well as calls to renderReplace.

        Because much of v3 frontend code relies on DOM API, this patch also implements the simplest form
        of a fake DOM API as MarkupNode, MarkupParentNode, MarkupElement, and MarkupText. In order to avoid
        reimplementing HTML & CSS parsers, this patch introduces the concept of content and style templates
        to ComponentBase which are JSON alternatives to HTML & CSS template strings which can be used in
        both frontend & backend.

        * browser-tests/close-button-tests.js: Include CommonComponentBase.
        * browser-tests/commit-log-viewer-tests.js: Ditto.
        * browser-tests/component-base-tests.js: Ditto. Added a test cases for content & style templates.
        (async.importComponentBase): Added.
        * browser-tests/editable-text-tests.js: Include CommonComponentBase.
        * browser-tests/index.html:
        * browser-tests/markup-page-tests.js: Added.
        * browser-tests/page-router-tests.js: Include CommonComponentBase.
        * browser-tests/page-tests.js: Ditto.
        * browser-tests/test-group-form-tests.js: Ditto.
        * public/shared/common-component-base.js: Added.
        (CommonComponentBase): Extracted out of ComponentBase.
        (CommonComponentBase.prototype.renderReplace): Added.
        (CommonComponentBase.renderReplace): Moved from ComponentBase.
        (CommonComponentBase.prototype._recursivelyUpgradeUnknownElements): Moved and renamed from
        ComponentBase's _recursivelyReplaceUnknownElementsByComponents.
        (CommonComponentBase.prototype._upgradeUnknownElement): Extracted out of the same function.
        (CommonComponentBase._constructStylesheetFromTemplate): Added.
        (CommonComponentBase._constructNodeTreeFromTemplate): Added.
        (CommonComponentBase.prototype.createElement): Added.
        (CommonComponentBase.createElement): Moved from ComponentBase.
        (CommonComponentBase._addContentToElement): Moved from ComponentBase.
        (CommonComponentBase.prototype.createLink): Added.
        (CommonComponentBase.createLink): Moved from ComponentBase.
        (CommonComponentBase._context): Added. Set to document in a browser and MarkupDocument in node.js.
        (CommonComponentBase._isNode): Added. Set to a function which does instanceof Node/MarkupNode check.
        (CommonComponentBase._baseClass): Added. Set to ComponentBase or MarkupComponentBase.
        * public/v3/components/base.js:
        (ComponentBase):
        (ComponentBase.prototype._ensureShadowTree): Added the support for the content and style templates.
        Also avoid parsing the html template each time a component is instantiated by caching the result.
        * public/v3/index.html:
        * tools/js/markup-component.js: Added.
        (MarkupDocument): Added. A fake Document.
        (MarkupDocument.prototype.createContentRoot): A substitude for attachShadow.
        (MarkupDocument.prototype.createElement):
        (MarkupDocument.prototype.createTextNode):
        (MarkupDocument.prototype._idForClone):
        (MarkupDocument.prototype.reset):
        (MarkupDocument.prototype.markup):
        (MarkupDocument.prototype.escapeAttributeValue):
        (MarkupDocument.prototype.escapeNodeData):
        (MarkupNode): Added. A fake Node. Each node gets an unique ID.
        (MarkupNode.prototype._markup):
        (MarkupNode.prototype.clone): Implemented by the leave class.
        (MarkupNode.prototype._cloneNodeData):
        (MarkupNode.prototype.remove):
        (MarkupParentNode): Added. An equivalent of ContainerNode in WebCore.
        (MarkupParentNode.prototype.get childNodes):
        (MarkupParentNode.prototype._cloneNodeData):
        (MarkupParentNode.prototype.appendChild):
        (MarkupParentNode.prototype.removeChild):
        (MarkupParentNode.prototype.removeAllChildren):
        (MarkupParentNode.prototype.replaceChild):
        (MarkupContentRoot): Added. Used like a shadow tree.
        (MarkupContentRoot.prototype._markup): Added.
        (MarkupElement): Added. A fake Element. It also implements a subset of IDL attributes implemented by
        subclasses such as HTMLInputElement for simplicity.
        (MarkupElement.prototype.get id): Added.
        (MarkupElement.prototype.get localName): Added.
        (MarkupElement.prototype.clone): Added.
        (MarkupElement.prototype.appendChild): Added.
        (MarkupElement.prototype.addEventListener): Added.
        (MarkupElement.prototype.setAttribute): Added.
        (MarkupElement.prototype.getAttribute): Added.
        (MarkupElement.prototype.get attributes): Added.
        (MarkupElement.prototype.get textContent): Added.
        (MarkupElement.prototype.set textContent): Added.
        (MarkupElement.prototype._serializeStyle): Added.
        (MarkupElement.prototype._markup): Added. Flattens the tree with content tree like copy & paste so
        this can't be used to implement innerHTML.
        (MarkupElement.prototype.get value): Added.
        (MarkupElement.prototype.set value): Added.
        (MarkupElement.prototype.get style): Added. Returns a fake writeonly CSSStyleDeclaration.
        (MarkupElement.prototype.set style): Added.
        (MarkupElement.get selfClosingNames): Added. A small list of self-closing tags for the HTML generation.
        (MarkupText): Added.
        (MarkupText.prototype.clone): Added.
        (MarkupText.prototype._markup): Added.
        (MarkupText.prototype.get data): Added.
        (MarkupText.prototype.set data): Added.
        (MarkupComponentBase): Added.
        (MarkupComponentBase.prototype.element): Added. Like ComponentBase's element.
        (MarkupComponentBase.prototype.content): Added. Like ComponentBase's content.
        (MarkupComponentBase.prototype._findElementRecursivelyById): Added. A fake getElementById.
        (MarkupComponentBase.prototype.render): Added. Like ComponentBase's render.
        (MarkupComponentBase.prototype.runRenderLoop): Added. In ComponentBase, we use requestAnimationFrame.
        In MarkupComponentBase, we keep rendering until the queue drains empty.
        (MarkupComponentBase.prototype.renderReplace): Added. Like ComponentBase's renderReplace but applies
        the transformation of classes to workaround the lack of shadow tree support in scriptless HTML.
        (MarkupComponentBase.prototype._applyStyleOverrides): Added. Recursively applies the transformation.
        (MarkupComponentBase.prototype._ensureContentTree): Added. Like ComponentBase's _ensureShadowTree.
        (MarkupComponentBase.reset): Added.
        (MarkupComponentBase._parseTemplates): Added. Parses the content & style templates, and generates the
        transformed fake DOM tree and stylesheet text whereby selectors in each component is modified to be
        unique across all components. The function to apply the necessary changes to an element is saved in
        the global map of components, and later used in renderReplace via _applyStyleOverrides.
        (MarkupComponentBase.defineElement): Added. Like ComponentBase's defineElement.
        (MarkupComponentBase.prototype.createEventHandler): Added.
        (MarkupComponentBase.createEventHandler): Added.
        (MarkupPage): Added. The top-level component responsible for generating a DOCTYPE, head, and body.
        (MarkupPage.prototype.pageTitle): Added.
        (MarkupPage.prototype.content): Added. Overrides the one in MarkupComponentBase to return what would
        be the content of the body element as opposed to the html element for the connivance of subclasses,
        and to match the behavior of the frontend Page class.
        (MarkupPage.prototype.render): Added.
        (MarkupPage.prototype._updateComponentsStylesheet): Added. Concatenates the transformed stylesheet of
        all components used.
        (MarkupPage.get contentTemplate): Added.
        (MarkupPage.prototype.generateMarkup): Added. Enqueues the page to render, spin the render loop, and
        generates the HTML. We enqueue the page twice in order to invoke _updateComponentsStylesheet after
        all subcomponent had finished rendering.
        * unit-tests/markup-component-base-tests.js: Added.
        * unit-tests/markup-element-tests.js: Added.
        (.createElement): Added.
        * unit-tests/markup-page-tests.js: Added.

2018-05-23  Dewei Zhu  <dewei_zhu@apple.com>

        OSBuildFetcher should respect maxRevision while finding OS builds to report.
        https://bugs.webkit.org/show_bug.cgi?id=185925

        Reviewed by Ryosuke Niwa.

        * server-tests/tools-os-build-fetcher-tests.js: Fix a typo in the unit tests.
        Added unit tests for this change. Aslo convert an existing test using async.
        * tools/js/os-build-fetcher.js:
        (prototype._fetchAvailableBuilds): It should also use 'maxRevision' to filter builds to be reported.
        It should use 'minRevisionOrder' when no commit has ever been submitted.
        (prototype._commitsForAvailableBuilds): Takes 'maxOrder' as fifth argument.
        'minOrder' and 'maxOrder' should be inclusive.

2018-05-11  Dewei Zhu  <dewei_zhu@apple.com>

        Update ChartPane per change r231087.
        https://bugs.webkit.org/show_bug.cgi?id=185570

        Reviewed by Ryosuke Niwa.

        On r231087 we change the return type of AnalysisTask.create, ChartPane needs to adapt
        this change.

        * public/v3/pages/chart-pane.js: Adapted the change that AnalysisTask.create now returns
        an AnalysisTask object.
        (ChartPane.prototype.async._analyzeRange):

2018-05-10  Dewei Zhu  <dewei_zhu@apple.com>

        CommitLogViewer._preceedingCommit should not always be null
        https://bugs.webkit.org/show_bug.cgi?id=185540

        Reviewed by Ryosuke Niwa.

        Fix the bug introduced in r227746 that CommitLogViewer._preceedingCommit is always null.

        * browser-tests/index.html: Fix expected measurement-set url.
        * public/v3/components/commit-log-viewer.js:
        (CommitLogViewer.prototype._fetchCommitLogs): CommitLogViewer._preceedingCommit should be set
         when fetching for preceeding revision succeeds.

2018-05-03  Dewei Zhu  <dewei_zhu@apple.com>

        Range bisector should check the commits for repositories without change in specified range.
        https://bugs.webkit.org/show_bug.cgi?id=185269

        Reviewed by Ryosuke Niwa.

        For repositories without a change in the specified range, we still need to use them to filter commit
        sets. Before this change, code does not apply filtering by those repositories against commit set. As
        a result, commit sets with different commits for those repositories may be chosen as bisecting commit set.

        * public/v3/commit-set-range-bisector.js: Updated the logic to verify range for repositories without
        change in range.
        (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits):
        * unit-tests/commit-set-range-bisector-tests.js: Added a unit test to guard against this change.

2018-05-02  Dewei Zhu  <dewei_zhu@apple.com>

        Create analysis task should sync analysis task status after creation.
        https://bugs.webkit.org/show_bug.cgi?id=185222

        Reviewed by Ryosuke Niwa.

        * public/v3/models/analysis-task.js:
        (AnalysisTask.async.create): Fetch newly-created analysis task right about its creation.
        (AnalysisTask):
        * tools/js/measurement-set-analyzer.js:
        (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet): Adjust as 'AnalysisTask.create' now
        returns an anlysis task instance.
        (MeasurementSetAnalyzer):
        * unit-tests/analysis-task-tests.js: Added a unit test for this change.
        (async):
        * unit-tests/measurement-set-analyzer-tests.js: Update unit tests accordingly.
        Fix a typo in one previous unit test.
        (async):

2018-05-01  Dewei Zhu  <dewei_zhu@apple.com>

        Write a script that detects chart changes by using v3 API.
        https://bugs.webkit.org/show_bug.cgi?id=184419

        Reviewed by Ryosuke Niwa.

        Added a script that detects chart changes and schedule confirming analysis task.

        * browser-tests/async-task-tests.js: Added a unit test for 'AsyncTask'.
        * browser-tests/index.html: Added import for 'AsyncTask' for testing.
        * public/shared/statistics.js: Make 'findRangesForChangeDetectionsWithWelchsTTest' defaults to 0.99 one sided possibility.
        (Statistics.new.this.findRangesForChangeDetectionsWithWelchsTTest):
        * public/v3/async-task.js:
        (AsyncTask.isAvailable): Helper function to determine whether AsyncTask is available or not as 'Worker' is
        not available in nodejs.
        (AsyncTask):
        * public/v3/models/bug.js: Export as a module.
        * public/v3/models/measurement-set.js:
        (MeasurementSet.prototype._invokeSegmentationAlgorithm): Added a check to avoid using AsyncTask when running in NodeJs.
        (MeasurementSet):
        * server-tests/resources/common-operations.js: Added a helper function to assert certain exception is thrown.
        (async.assertThrows):
        * tools/js/measurement-set-analyzer.js: Added 'MeasurementSetAnalyzer' module for analyzing measurement set.
        (MeasurementSetAnalyzer):
        (MeasurementSetAnalyzer.prototype.async.analyzeOnce):
        (MeasurementSetAnalyzer.measurementSetListForAnalysis):
        (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet):
        * tools/js/v3-models.js: Added import for 'Bug' object.
        * tools/run-analysis.js: Added this script to detect measurement set changes.
        (main):
        (async.analysisLoop):
        * unit-tests/measurement-set-analyzer-tests.js: Added unit tests for 'MeasurementSetAnalyzer'.
        * unit-tests/resources/mock-v3-models.js: Reset 'MeasurementSet._set' every time.
        Update mock platform to include lastModifiedByMetric information.
        (MockModels.inject):

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

        Creating a custom analysis task after fetching all analysis tasks fail
        https://bugs.webkit.org/show_bug.cgi?id=184641

        Reviewed by Saam Barati.

        The bug was caused by AnalysisTask._fetchSubset not fetching the analysis task when all analysis tasks
        had previously been fetched (AnlaysisTask._fetchAllPromise is set) even when noCache is set to true.
        Fixed it by ignornig _fetchAllPromise when noCache is set to true.

        This patch also adds noCache argument to AnalysisTask.fetchById and reverts the inadvertent change in
        r226836 to always set noCache to true in this function.

        * public/v3/models/analysis-task.js:
        (AnalysisTask.fetchById): Added noCache argument instead of always specifying true, and modernized the code.
        (AnalysisTask._fetchSubset): Fixed the bug. See above description.
        * public/v3/models/test-group.js:
        (TestGroup.createWithTask): Set noCache to true when calling AnalysisTask.fetchById here.
        * unit-tests/analysis-task-tests.js: Added test cases for AnalysisTask.fetchById, including a test
        to make sure it doesn't fetch the specified analysis task when noCache is set to false and all analysis
        tasks had previously been fetched for the aforementioned revert of the inadvertent change in r226836.
        (sampleAnalysisTasks): Renamed from sampleAnalysisTasks as the result contains multiple analysis tasks.
        * unit-tests/test-groups-tests.js: Added a test case for TestGroup.createWithTask

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

        REGRESSION(r230960): Browser tests under TimeSeriesChart fetchMeasurementSets all fail
        https://bugs.webkit.org/show_bug.cgi?id=185125

        Reviewed by Saam Barati.

        The bug was caused by mock-remote-api.js always loading PrivilegedAPI using require, which doesn't work in a browser.
        Fixed the bug by explicitly requiring the right kind of PrivilegedAPI in each unit test instead.

        * unit-tests/analysis-task-tests.js:
        * unit-tests/buildbot-syncer-tests.js:
        * unit-tests/commit-log-tests.js:
        * unit-tests/commit-set-range-bisector-tests.js:
        * unit-tests/commit-set-tests.js:
        * unit-tests/measurement-set-tests.js:
        * unit-tests/privileged-api-tests.js:
        * unit-tests/resources/mock-remote-api.js:
        (MockRemoteAPI.inject): Take PrivilegedAPI instead of the type string. Also fixed a bug that _token wasn't unset
        after each unit test, and superfluous initializations of originalRemoteAPI and originalPrivilegedAPI.
        * unit-tests/test-groups-tests.js:

2018-04-30  Dewei Zhu  <dewei_zhu@apple.com>

        MeasurementSet._constructUrl should construct absolute url.
        https://bugs.webkit.org/show_bug.cgi?id=185137

        Reviewed by Ryosuke Niwa.

        MeasurementSet._constructUrl should not construct an url with relative path.

        * public/v3/models/measurement-set.js: Should use '/api/measurement-set...' and '/data/measurement-set-...'
        for uncached and cached fetching.
        * unit-tests/measurement-set-tests.js: Updated unit tests.
        (const.set MeasurementSet):

2018-04-26  Dewei Zhu  <dewei_zhu@apple.com>

        Extend create-analysis-test API to be able to create with confirming test group.
        https://bugs.webkit.org/show_bug.cgi?id=184958

        Reviewed by Ryosuke Niwa.

        Extend create-analysis-test API to be able to create an analysis task with confirming test group.
        Update create analysis task UI in chart pane to adapt this new API.
        Refactored '/privileged-api/create-test-group' API to share some creating test group logic with '/privileged-api/create-analysis-task' API.
        Moved the shared logic to commit-sets-helpers.php.

        * public/api/analysis-tasks.php: Use 'require_once' instead of 'require'.
        * public/include/commit-sets-helpers.php: Added.
        (create_test_group_and_build_requests): A helper function that creates test group and build requests for a analysis
        task. In long term, this should be a class to avoid passing long argument list around.
        (insert_commit_sets_and_construct_configuration_list): Based on commit sets returns build and test configurations.
        (insert_build_request_for_configuration): Insert build requests based on configuration.
        (commit_sets_from_revision_sets): Returns commit sets from given revision set list.
        * public/privileged-api/create-analysis-task.php: Added the ability to create analysis task with confirming test
        groups when repetition count is specified.
        * public/privileged-api/create-test-group.php: Moved shared function to commit-sets-helpers.php.
        * public/v3/models/analysis-task.js:
        (AnalysisTask.create): Instead of accepting run ids, it now accepts points and test group name and confirming iterations.
        It will conditionally add test group information into parameter when confirming iterations is a positive number.
        (AnalysisTask):
        * public/v3/models/commit-set.js:
        (CommitSet.revisionSetsFromCommitSets): Move 'TestGroup._revisionSetsFromCommitSets' since CommitSet class is more
        appropriate place and it will be shared by both TestGroup and AnalysisTask
        (CommitSet):
        * public/v3/models/test-group.js:
        (TestGroup.createWithTask): Adapt 'CommitSet.revisionSetsFromCommitSets'.
        (TestGroup.createWithCustomConfiguration): Adapt 'CommitSet.revisionSetsFromCommitSets'.
        (TestGroup.createAndRefetchTestGroups): Adapt 'CommitSet.revisionSetsFromCommitSets'.
        (TestGroup._revisionSetsFromCommitSets): Deleted and moved to 'CommitSet.revisionSetsFromCommitSets'.
        * public/v3/pages/chart-pane.js:
        (ChartPane.prototype.didConstructShadowTree): Added the logic to disable options when checkbox for creating confirming
        test group is unchecked.
        (ChartPane.prototype._analyzeRange): Conditionally create confirming test group from UI.
        (ChartPane.cssTemplate):
        * server-tests/privileged-api-create-analysis-task-tests.js: Added unit tests. Added a unit test for 'NodePrivilegedAPI'.
        * unit-tests/analysis-task-tests.js: Added unit tests.
        * unit-tests/commit-set-tests.js: Added unit test for 'CommitSet.revisionSetsFromCommitSets'.
        * unit-tests/resources/mock-remote-api.js: Reset csrf token when BrowserPrivilegedAPI is used.
        (MockRemoteAPI.inject):

2018-04-23  Dewei Zhu  <dewei_zhu@apple.com>

        Tool scripts should not use PrivilegedAPI from 'public/v3/privileged-api.js'.
        https://bugs.webkit.org/show_bug.cgi?id=184766

        Reviewed by Ryosuke Niwa.

        For tools, we should not use PrivilegedAPI for tools as current PrivilegedAPI
        is used by UI and it is unnecessary to generate CSRF token for tools.
        Will post a followup patch that creates a PrivilegedAPI used by tools.
        Make a change on TestServer.inject and MockRemoteAPI.inject to allow specifying
        BrowserPrivilegedAPI or NodePrivilegedAPI in the test. Currently defaults to
        BrowserPrivilegedAPI as this is the test behavior before this change.

        * server-tests/resources/common-operations.js: Allow passing type of privileged api
        information to TestServer.inject.
        * server-tests/resources/test-server.js: Conditionally inject PrivilegedAPI based on
        type of privileged api.
        (TestServer.prototype.inject):
        (TestServer):
        * server-tests/tools-buildbot-triggerable-tests.js: Updated 'prepareServerTest' invocation.
        * server-tests/tools-os-build-fetcher-tests.js: Updated 'prepareServerTest' invocation.
        * server-tests/tools-sync-buildbot-integration-tests.js: Temporarily injecting
        BrowserPrivilegedAPI for mocking UploadedFile. The actual script does not rely on
        BrowserPrivilegedAPI at all.
        (async.createTestGroupWihPatch):
        (beforeEach):
        * tools/js/privileged-api.js: Added NodePrivilegedAPI
        (NodePrivilegedAPI.prototype.sendRequest):
        (NodePrivilegedAPI.configure): Configure the slave name and password.
        (NodePrivilegedAPI):
        * tools/js/v3-models.js: Removed the import of PrivilegedAPI.
        * unit-tests/privileged-api-tests.js:. Added unit tests for NodePrivilegedAPI.
        * unit-tests/resources/mock-remote-api.js: Conditionally inject PrivilegedAPI based on
        the type of privileged api.
        (MockRemoteAPI.inject):

2018-04-23  Dewei Zhu  <dewei_zhu@apple.com>

        Revision information returned by querying measurement set api with analysis task id should contain commit order.
        https://bugs.webkit.org/show_bug.cgi?id=184902

        Reviewed by Ryosuke Niwa.

        This is a bug fix for r230719 which does not cover the case while querying `measurement-set.php?analysisTask=$task_id`

        * public/api/measurement-set.php: AnalysisResultsFetcher.fetch_commits results should contains commit order.
        * server-tests/api-measurement-set-tests.js: Added unit test for this change.

2018-04-19  Dewei Zhu  <dewei_zhu@apple.com>

        Add a bisect button to automatically schedule bisecting A/B tasks.
        https://bugs.webkit.org/show_bug.cgi?id=183888

        Reviewed by Ryosuke Niwa.

        Extended AnalysisTask's ability to figure out bisecting A/B tasks based on existing data points and test groups.
        Updated analysis page UI to show bisect button which will only appear when the middle commit set of the range in
        test group can be found.

        Finding middle commit set algorithm is described as follows:
        1. Find all commits from multiple repositories among the ranges specified by two commit sets in test group. In
        the meanwhile, merge all commits that have commit time into a single list. For commits only have commit order,
        put those commits into separate lists.
        2. Filter all the available commit sets in current analysis task by keeping the ones have exact repositories
        as the two commit sets in specified test group, and every commit of a commit set is in side the commit range.
        After filtering the commit sets, sort the remaining ones and only keep one commit set if multiple commit sets
        are equal to each other.
        3. Among commits processed by step 2, find the commit sets that have the commit which is closest to the middle of
        all commits that have commit time created from step 1.
        4. Among commits processed by step 3, find the commit sets that have the commit which is closest to the middle of
        commits that only have commit order and categorized by repository. We have to iterate through repository as commit
        order is not granted to be comparable between different repositories.
        5. If more than one commit sets are found, choose the middle commit set.

        * public/v3/commit-set-range-bisector.js: Added.
        (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits): Instead of naively returning the middle of
        existing commit set array, this function selects a bisect bisection points that is closest to actually middle of
        the revision range based on all revisions reported to performance dashboard.
        (CommitSetRangeBisector._findCommitSetsWithinRange): Helper function to find commit sets those are in specified range.
        (CommitSetRangeBisector._orderCommitSetsByTimeAndOrderThenDeduplicate): Helper function to sort and deduplicate commit sets.
        (CommitSetRangeBisector._closestCommitSetsToBisectingCommitByTime): Helper function to find the commit sets those
        are closest to the middle of among all the commits in the range that have commit time.
        (CommitSetRangeBisector._findCommitSetsClosestToMiddleOfCommitsWithOrder): Helper function which goes through all
        repositories the commit of which has commit order, and find the commit sets those are closest to the middle of
        commits for each repository.
        (CommitSetRangeBisector._buildCommitToCommitSetMap): Helper function to builder mapping from a commit to commit
        sets those contain this commit.
        (CommitSetRangeBisector._findCommitClosestToMiddleIndex): Helper function to find closest commit to the middle of index.
        (CommitSetRangeBisector):
        * public/v3/index.html: Imports 'public/v3/commit-set-range-bisector.js'.
        * public/v3/models/analysis-task.js:
        (AnalysisTask.prototype.async.commitSetsFromTestGroupsAndMeasurementSet): Aggregates all existing commit sets in
        test groups of current analysis tasks.
        * public/v3/models/commit-log.js:
        (CommitLog.prototype.hasCommitTime): A helper function determine whether a commit has a commit time. For commit
        that does not have time, server will return commit time as zero. As it is unrealistic for a commit has commit time
        0, it would be safe to assume a valid commit time is greater than 0.
        (CommitLog.prototype.hasCommitOrder): Returns whether a commit has a commit oder.
        (CommitLog.hasOrdering): Determine whether we can order two commits by commit time or commit order.
        (CommitLog.orderTwoCommits): Order two commits incrementally.
        * public/v3/models/commit-set.js:
        (CommitSet.prototype.hasSameRepositories): A helper function to determine whether a commit set has same repositories
        as current repository.
        (CommitSet.containsRootOrPatchOrOwnedCommit): A helper function to determine whether current commit set has root,
        patch or owned commit.
        (CommitSet.commitForRepository): This function defined twice identically, remove one of them.
        * public/v3/models/test-group.js: Make '_computeRequestedCommitSets' a static function as it does not use any
        instance variables.
        * public/v3/pages/analysis-task-page.js: Added bisect button.
        (AnalysisTaskTestGroupPane):
        (AnalysisTaskTestGroupPane.prototype.didConstructShadowTree):
        (AnalysisTaskTestGroupPane.prototype.setTestGroups): Update 'setTestGroups' to update _bisectingCommitSetByTestGroup
        when the test groups changes.
        (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup): Added code to conditionally show bisect button.
        Bisect button will only show when there is a middle commit set for that test group.
        (AnalysisTaskTestGroupPane.htmlTemplate):
        (AnalysisTaskTestGroupPane.cssTemplate):
        (AnalysisTaskPage.prototype.didConstructShadowTree):
        (AnalysisTaskPage.prototype._retryCurrentTestGroup):
        (AnalysisTaskPage.prototype.async._bisectCurrentTestGroup): A callback when bisect button is clicked.
        * tools/js/v3-models.js:
        * unit-tests/commit-log-tests.js: Added unit tests for 'CommitLog.hasCommitTime', 'CommitLog.hasCommitOrder',
        'CommitLog.orderTwoCommits', 'CommitLog.hasOrdering'.
        * unit-tests/commit-set-range-bisector-tests.js: Unit tests for 'CommitSetRangeBisector.commitSetClosestToMiddleOfAllCommits'.
        * unit-tests/commit-set-tests.js: Added unit tests for 'CommitSet.hasSameRepositories' and 'CommitSet.containsRootOrPatchOrOwnedCommit'.

2018-04-16  Dewei Zhu  <dewei_zhu@apple.com>

        Commit order should always be returned by api.
        https://bugs.webkit.org/show_bug.cgi?id=184674

        Reviewed by Ryosuke Niwa.

        Commit order sometimes missing in CommitLog object before this change.
        This makes ordering commits logic become unnecessarily complicate.
        This change will ensure commit order is always fetched for a CommitLog object.
        Change measurement-set API to contain commit order information.
        Change commits API to contain commit order information.

        * public/api/measurement-set.php: Includes commit order information.
        * public/include/commit-log-fetcher.php:
        * public/v3/models/commit-log.js: Added a function to return order information.
        (CommitLog.prototype.updateSingleton): This function should update commit order.
        (CommitLog.prototype.order): Returns the order of commit.
        * public/v3/models/commit-set.js:
        (MeasurementCommitSet): Update MeasurementCommitSet to contain commit order information when creating CommitLog object.
        * server-tests/api-measurement-set-tests.js: Updated unit tests.
        * unit-tests/analysis-task-tests.js: Update unit tests to contain commit order information in mock data.
        (measurementCluster):
        * unit-tests/commit-log-tests.js: Added unit tests for CommitLog.order.
        * unit-tests/commit-set-tests.js: Added commit order in MeasurementCommitSet.
        * unit-tests/measurement-adaptor-tests.js: Updated unit tests to contain commit order information in mock data.
        * unit-tests/measurement-set-tests.js: Updated unit tests to contain commit order information in mock data.

2018-04-15  Ryosuke Niwa  <rniwa@webkit.org>

        Make it possible to hide some repository groups
        https://bugs.webkit.org/show_bug.cgi?id=184632

        Reviewed by Saam Barati.

        Added the ability to hide repository groups in the custom analysis task configurator from the admin page.
        Hidden repositroy groups will continue to function for existing test groups. This is purely an UI change.

        * init-database.sql: Added repositorygroup_hidden as a new column to triggerable_repository_groups.
        * public/admin/triggerables.php: Added a form field to hide a repository group.
        * public/include/manifest-generator.php: Include hidden state in the manifest file.
        * public/v3/components/custom-analysis-task-configurator.js:
        (CustomAnalysisTaskConfigurator.prototype._renderRepositoryPanes): Filter out hidden repository groups.
        * public/v3/models/triggerable.js:
        (prototype.isHidden): Added.
        * server-tests/api-manifest-tests.js: Updated an existing test case to test a hidden repository group.

2018-04-06  Dewei Zhu  <dewei_zhu@apple.com>

        Added 'CommitSet.diff' which will be shared between multiple independent incoming changes.
        https://bugs.webkit.org/show_bug.cgi?id=184368

        Reviewed by Ryosuke Niwa.

        'CommitSet.diff' will be used in multiple independent incoming changes.
        It would be easier to make this a separate change to parallelize the changes depends on this API.

        * public/v3/models/commit-set.js:
        (CommitSet.prototype.createNameWithoutCollision): Moved from 'AnalysisTaskPage' and make it more generic.
        (CommitSet.prototype.diff): Describe differences between 2 commit sets including commit, root and patch differences.
        * public/v3/pages/analysis-task-page.js: Move 'AnalysisTaskPage._createRetryNameForTestGroup' to CommitSet in a more generic form.
        (AnalysisTaskPage.prototype._retryCurrentTestGroup): Use 'CommitSet.withoutRootPatchOrOwnedCommit' instead.
        (AnalysisTaskPage.prototype._createRetryNameForTestGroup): Moved to CommitSet in a more generic form.
        * unit-tests/commit-set-tests.js: Added unit tests for 'CommitSet.diff'.

2018-04-05  Dewei Zhu  <dewei_zhu@apple.com>

        Fix a bug introduced in r230295 that A/B test result is not shown.
        https://bugs.webkit.org/show_bug.cgi?id=184350

        Reviewed by Ryosuke Niwa.

        result.label should be assigned in `TestGroup._computeRequestedCommitSets`.

        * public/v3/models/test-group.js:
        (TestGroup.prototype._computeRequestedCommitSets):

2018-03-29  Dewei Zhu  <dewei_zhu@apple.com>

        Added UI to show potential regressions in chart with t-testing against segmentations.
        https://bugs.webkit.org/show_bug.cgi?id=184131

        Reviewed by Ryosuke Niwa.

        Added UI in the chart-pane so that user can use new option in trendline which not only
        shows the segmentation, but also t-test against potential changes indicated by segmentation.

        Fix a bug in AnalysisTaskPage that chart is not updated when change type of task changes.

        * browser-tests/interactive-time-series-chart-tests.js: Fix a unit tests.
        * browser-tests/time-series-chart-tests.js: Fix a unit tests.
        * public/shared/statistics.js: Added a function to t-test certain range based on segmentation results.
        (Statistics.supportedOneSideTTestProbabilities):
        (Statistics.findRangesForChangeDetectionsWithWelchsTTest): The argument `segmentations`, every 2 items in the list defines 
        segmentation, that is why the index incremental is 2 in this funcion.
        * public/v3/components/chart-pane-base.js: Will select the range if user clicks on a suggested annotation.
        (ChartPaneBase.prototype.configure):
        (ChartPaneBase.prototype._didClickAnnotation):
        * public/v3/components/chart-styles.js:
        (ChartStyles.annotationFillStyleForTask): Added 'annotationFillStyleForTask' to determine the fillStyle for annotation based on change type of a analysis task.
        * public/v3/components/interactive-time-series-chart.js:
        (InteractiveTimeSeriesChart.prototype._findAnnotation): Also need to search among suggested annotaions.
        * public/v3/components/time-series-chart.js: Introduced 'suggested annotaion' which does not have an existing task and is suggested by t-test based on segmentation.
        (TimeSeriesChart):
        (TimeSeriesChart.prototype.setSuggestedAnnotations):
        (TimeSeriesChart.prototype.allAnnotations): Returns both annotations with and without analysis task.
        (TimeSeriesChart.prototype._layoutAnnotationBars): Should take all annotations in the calculation.
        * public/v3/models/measurement-set.js:
        (MeasurementSet.prototype.metricId): Returns metric id.
        * public/v3/models/metric.js:
        (Metric.prototype.summarizeForValues): Added helper function to summarize a given value
        * public/v3/models/test-group.js:
        (TestGroup.prototype.compareTestResults): Adapted to use 'Metric.summarizeForValues'.
        * public/v3/pages/chart-pane.js: Added 'Segmentation with t-test analysis' to 'ChartTrendLineTypes'.
        (ChartPane.prototype._renderTrendLinePopover):
        (ChartPane.prototype.async._updateTrendLine): make it an async function.
        * unit-tests/statistics-tests.js: Added unit tests for 'findRangesForChangeDetectionsWithWelchsTTest'.

2018-04-02  Aakash Jain  <aakash_jain@apple.com>

        Remove deprecated Buildbot 0.8 code from Perf syncing scripts
        https://bugs.webkit.org/show_bug.cgi?id=183915

        Reviewed by Ryosuke Niwa.

        * server-tests/resources/mock-data.js:
        (MockData.buildbotBuildersURLDeprecated): Deleted.
        (MockData.mockBuildbotBuildersDeprecated): Deleted.
        (MockData.pendingBuildDeprecated): Deleted.
        (MockData.runningBuildDeprecated): Deleted.
        (MockData.finishedBuildDeprecated): Deleted.
        * tools/js/buildbot-syncer.js:
        (BuildbotBuildEntryDeprecated): Deleted.
        (BuildbotBuildEntryDeprecated.prototype.initialize): Deleted.
        (BuildbotBuildEntryDeprecated.prototype.url): Deleted.
        (BuildbotSyncer.prototype.scheduleBuildOnBuildbotDeprecated): Deleted.
        (BuildbotSyncer.prototype._pullRecentBuildsDeprecated): Deleted.
        (BuildbotSyncer.prototype.pathForPendingBuildsJSONDeprecated): Deleted.
        (BuildbotSyncer.prototype.pathForBuildJSONDeprecated): Deleted.
        (BuildbotSyncer.prototype.pathForForceBuildDeprecated): Deleted.
        (BuildbotSyncer.prototype.url): Deleted.
        (BuildbotSyncer.prototype.urlForBuildNumberDeprecated): Deleted.
        * tools/js/buildbot-triggerable.js:
        (BuildbotTriggerable.prototype.getBuilderNameToIDMapDeprecated): Deleted.
        * unit-tests/buildbot-syncer-tests.js:
        (smallPendingBuildDeprecated): Deleted.
        (smallInProgressBuildDeprecated): Deleted.
        (smallFinishedBuildDeprecated): Deleted.
        (samplePendingBuildRequestDeprecated): Deleted.
        (sampleInProgressBuildDeprecated): Deleted.
        (sampleFinishedBuildDeprecated): Deleted.

2018-03-19  Aakash Jain  <aakash_jain@apple.com>

        Update Perf buildbot syncing scripts for Buildbot 0.9
        https://bugs.webkit.org/show_bug.cgi?id=175969

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-triggerable.js:
        (BuildbotTriggerable.prototype.initSyncers): Switch from Deprecated version to new version of getBuilderNameToIDMap.
        * tools/js/buildbot-syncer.js:
        (BuildbotSyncer.prototype.scheduleRequestInGroupIfAvailable): Switch from Deprecated version to new version of scheduleRequest.
        (BuildbotSyncer.prototype.pullBuildbot): Switch from Deprecated version to new version of pathForPendingBuilds, _pullRecentBuilds 
        and BuildbotBuildEntry. Parse the pending build-requests data in Buildbot 0.9 format.
        * unit-tests/buildbot-syncer-tests.js: Updated as per Buildbot 0.9 code.
        * server-tests/tools-sync-buildbot-integration-tests.js: Ditto.
        * server-tests/tools-buildbot-triggerable-tests.js: Ditto.
        * server-tests/resources/mock-data.js: Ditto.
        (MockData.pendingBuildsUrl): Method to construct pendingBuildsUrl in Buildbot 0.9 format.
        (MockData.recentBuildsUrl): Ditto for recent builds url.
        (MockData.statusUrl): Ditto for status url.
        (MockData.builderIDForName): Method to get builder ID from builder name.

2018-03-15  Aakash Jain  <aakash_jain@apple.com>

        BuildbotBuildEntry creates an incorrect url for pending builds
        https://bugs.webkit.org/show_bug.cgi?id=183670

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-syncer.js:
        (BuildbotBuildEntry.prototype.initialize): Fetch buildrequestid from Buildbot.
        (BuildbotBuildEntry.prototype.url): Construct url for pending build using buildrequestid from Buildbot.
        * unit-tests/buildbot-syncer-tests.js: Updated unit-test.

2018-03-14  Aakash Jain  <aakash_jain@apple.com>

        Add support for boolean properties in BuildbotSyncer while submitting build request to Buildbot 0.9 server
        https://bugs.webkit.org/show_bug.cgi?id=183638

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-syncer.js:
        (BuildbotSyncer._parseRepositoryGroupPropertyTemplate): Allow boolean properties.
        * server-tests/tools-sync-buildbot-integration-tests.js: Tests for boolean properties.
        * unit-tests/buildbot-syncer-tests.js: Ditto.

2018-03-04  Dewei Zhu  <dewei_zhu@apple.com>

        Create analysis task should use build time as fallback when commit time is not available.
        https://bugs.webkit.org/show_bug.cgi?id=183309

        Reviewed by Ryosuke Niwa.

        Added the ability to schedule analysis task for the range without commit time.

        * public/privileged-api/create-analysis-task.php: Use build time as fallback.
        * server-tests/privileged-api-create-analysis-task-tests.js: Added a unit test for this change.

2018-03-04  Aakash Jain  <aakash_jain@apple.com>

        BuildbotBuildEntry for buildbot 0.9 uses incorrect buildrequestid
        https://bugs.webkit.org/show_bug.cgi?id=183194

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-syncer.js:
        (BuildbotBuildEntry.prototype.initialize): Updated _buildRequestId to use correct build-request-id, as set in syncer._buildRequestPropertyName.
        (BuildbotSyncer.prototype.pathForPendingBuilds): Updated url to fetch properties for build-requests.
        * unit-tests/buildbot-syncer-tests.js:
        (sampleBuildData): Updated sampleBuildData with correct build-request-id in properties. Added
        properties to samplePendingBuildRequestData.

2018-02-28  Aakash Jain  <aakash_jain@apple.com>

        Rename samplePendingBuild to samplePendingBuildRequest
        https://bugs.webkit.org/show_bug.cgi?id=183171

        Reviewed by Ryosuke Niwa.

        * unit-tests/buildbot-syncer-tests.js:
        (samplePendingBuildRequests): Renamed from samplePendingBuild.
        (samplePendingBuildRequestDeprecated): Renamed from samplePendingBuildDeprecated.
        (samplePendingBuild): Deleted.
        (samplePendingBuildDeprecated): Deleted.

2018-02-02  Aakash Jain  <aakash_jain@apple.com>

        Add support for submitting build request to Buildbot 0.9 server in BuildbotSyncer
        https://bugs.webkit.org/show_bug.cgi?id=182218

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-syncer.js:
        (BuildbotSyncer.prototype.scheduleRequest): Added assert to ensure forcescheduler property is always defined. Builds can not
        be scheduled on Buildbot without this property. Updated unit-tests and server-tests accordingly.
        (BuildbotSyncer.prototype.scheduleBuildOnBuildbotDeprecated): Method to schedule build request on Buildbot 0.8 server.
        (BuildbotSyncer.prototype.scheduleBuildOnBuildbot): Method to schedule build request on Buildbot 0.9 server.
        (BuildbotSyncer.prototype.pathForForceBuildDeprecated): Path for scheudling build on Buildbot 0.8 server.
        (BuildbotSyncer.prototype.pathForForceBuild): Path for scheudling build on Buildbot 0.9 server.
        * unit-tests/buildbot-syncer-tests.js:
        (smallConfiguration): Added test-case for scheduleBuildOnBuildbot. Also added forcescheduler property in sample data.
        * server-tests/resources/mock-data.js: Added forcescheduler property in sample data.
        * server-tests/tools-buildbot-triggerable-tests.js: Updated server-tests to take care of added forcescheduler property.

2018-02-02  Aakash Jain  <aakash_jain@apple.com>

        Add support for fetching recent builds in Buildbot 0.9 format in BuildbotSyncer
        https://bugs.webkit.org/show_bug.cgi?id=179743

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-syncer.js:
        (BuildbotSyncer.prototype._pullRecentBuildsDeprecated): Renamed from _pullRecentBuilds. This method fetch
        from Buildbot 0.8 server.
        (BuildbotSyncer.prototype._pullRecentBuilds): Method to fetch recent builds from Buildbot 0.9 server.
        (BuildbotSyncer.prototype.pathForRecentBuilds): URL for fetching recent builds from Buildbot 0.9 server.
        (BuildbotSyncer.prototype.pathForBuildJSONDeprecated): Renamed from pathForBuildJSON.
        * unit-tests/buildbot-syncer-tests.js:
        (_pullRecentBuilds.it): unit-test - should not fetch recent builds when count is zero.
        (_pullRecentBuilds.it): unit-test - should pull the right number of recent builds.
        (_pullRecentBuilds.it): unit-test - should handle unexpected error while fetching recent builds.
        (_pullRecentBuilds.it): unit-test - should create BuildbotBuildEntry after fetching recent builds.

2018-02-01  Aakash Jain  <aakash_jain@apple.com>

        Create BuildbotBuildEntry in Buildbot syncer in Buildbot 0.9 format
        https://bugs.webkit.org/show_bug.cgi?id=182036

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-syncer.js:
        (BuildbotBuildEntry): Class for Buildbot entry in Buildbot 0.9 data format.
        (BuildbotBuildEntryDeprecated): Renamed from BuildbotBuildEntry, sub-classed from BuildBotEntry. Handles Buildbot 0.8 data format.
        (BuildbotBuildEntryDeprecated.prototype.url): URL in buildbot 0.8 format.
        (BuildbotSyncer.prototype.builderID): Added.
        (BuildbotSyncer.prototype.pathForPendingBuildsJSONDeprecated): Renamed from BuildbotSyncer.prototype.pathForPendingBuildsJSON.
        (BuildbotSyncer.prototype.pathForPendingBuilds): Path for pending builds in Buildbot 0.9 format.
        (BuildbotSyncer.prototype.urlForBuildNumberDeprecated): Deprecated. Renamed from urlForBuildNumber.
        (BuildbotSyncer.prototype.urlForBuildNumber): Updated in Buildbot 0.9 format.
        (BuildbotSyncer.prototype.urlForPendingBuild): Buildbot 0.9 has individual webpage for pending buildrequests as well. URL to that page.
        * unit-tests/buildbot-syncer-tests.js: Renamed BuildbotBuildEntry to BuildbotBuildEntryDeprecated.
        (sampleBuildData): Sample build data. Common method for in-progress and finished build data.
        (samplePendingBuildData): Sample data for a pending build. Separate method so that we can easily create sample data with multiple builds.
        (sampleInProgressBuildData): Ditto for in-progress build.
        (sampleFinishedBuildData): Ditto for finished build.
        (samplePendingBuild): Sample data for single pending build.
        (sampleInProgressBuild): Ditto for in-progress build.
        (sampleFinishedBuild): Ditto for finished build.
        (samplePendingBuildDeprecated): Renamed from samplePendingBuild.
        (sampleInProgressBuildDeprecated): Renamed from sampleInProgressBuild.
        (sampleFinishedBuildDeprecated): Renamed from sampleFinishedBuild.
        (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for pending build.
        (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for in-progress build.
        (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for finished build.
        (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for mix of in-progress and finished build.

2018-01-31  Dewei Zhu  <dewei_zhu@apple.com>

        Should chose the best match during 'route' if there are multiple matches.
        https://bugs.webkit.org/show_bug.cgi?id=182326

        Reviewed by Ryosuke Niwa.

        r227749 made a change that 'analysisCategoryPage' will be added before 'analysisTaskPage'.
        As route names for both pages starts with 'analysis', whichever added first will be chosen.
        For a route like 'analysis/task/1'. As a result, 'analysisCategoryPage' will be chosen and
        this is not expected behavior. Adding the logic on the cases when route name does not extact
        match the route name, always choose the longest mathcing route name.

        Also modernized the code of 'page-router.js' to use const & let instead of var.

        Added a browser test to guard against this bug.

        * browser-tests/index.html: Import 'page-router-tests.js'.
        * browser-tests/page-router-tests.js: Added unit test to guard against this bug.
        * public/v3/pages/page-router.js:
        (PageRouter.prototype.route): Added logic to find best matching in the case of inexact match.
        (PageRouter.prototype.pageDidOpen):
        (PageRouter.prototype._updateURLState):
        (PageRouter.prototype._serializeToHash):
        (PageRouter.prototype._deserializeFromHash):
        (PageRouter.prototype._serializeHashQueryValue):
        (PageRouter.prototype._deserializeHashQueryValue):
        (PageRouter.prototype._countOccurrences):
        (PageRouter):

2018-01-29  Dewei Zhu  <dewei_zhu@apple.com>

        Should fetch owner commits in build-requests-fetcher.
        https://bugs.webkit.org/show_bug.cgi?id=182266

        Reviewed by Ryosuke Niwa.

        In a build request, owner commit of a commit is not always one of a commit in the commit set.
        Build request api should contain owner commits in the 'commits' field of the return value.

        * public/include/build-requests-fetcher.php: Added logic to fetch owner commits and added them into 'commits'.
        * server-tests/api-build-requests-tests.js: Added a unit test.
        * server-tests/resources/mock-data.js:
        (MockData.set addTestGroupWithOwnerCommitNotInCommitSet): Added a test group with a build request, the commit set of which does
        not contain owner commit of one commit.

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

        Add the support for reporting Speedometer 2.0 results to perf dashboard
        https://bugs.webkit.org/show_bug.cgi?id=182089
        <rdar://problem/36172346>

        Rubber-stamped by Chris Dumez.

        Apparently, this has always worked since the very first version of the perf dashboard added in r163688.
        The relevant code is at the line 313 of report-processor.php now.

        Added regression tests for this feature since we didn't have any tests four years ago.

        * server-tests/api-report-tests.js:

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

        REGRESSION(r225898): The perf dashboard fails to open when there are no summary pages
        https://bugs.webkit.org/show_bug.cgi?id=182210

        Rubber-stamped by Chris Dumez.

        The bug was caused by TestFreshnessPage unconditionally assuming that summaryPageConfiguration is set.
        Fixed it by not creating TestFreshnessPage when there are no summary pages specified.

        Also modernized the code to use const & let instead of var.

        * public/v3/main.js:
        (main):

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

        Perf dashboard's page title can be set to a previously visited page
        https://bugs.webkit.org/show_bug.cgi?id=182209

        Rubber-stamped by Chris Dumez.

        Before this patch, opening a page and navigating away from it could result in the page title
        getting set to that of the previously visited page after the new page had been opened.

        This bug was caused by Page.render keep setting document.title even though the page is no longer
        the currently open page of the router. Fixed it by exiting early in Page.enqueueToRender when
        this page is not the currently open page of the router.

        Also added basic tests for Page.

        * browser-tests/index.html:
        * browser-tests/page-tests.js: Added.
        * public/v3/pages/page.js:
        (Page): Removed the unused second constructor argument.
        (Page.prototype.enqueueToRender): Fixed the bug.
        (Page.prototype.render): Use const instead of var.

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

        CommitLogViewer should not fetch commits in serial
        https://bugs.webkit.org/show_bug.cgi?id=182207

        Rubber-stamped by Chris Dumez.

        Fetch both the commits in the range as well as the preceding commit at once instead of
        fetching the preceding commit only after the commits in the range had been fetched.

        * browser-tests/commit-log-viewer-tests.js: Fixed the tcoest case after r224227.
        * public/v3/components/commit-log-viewer.js:
        (CommitLogViewer.prototype._fetchCommitLogs): Fetch commits in parallel.

2018-01-24  Dewei Zhu  <dewei_zhu@apple.com>

        Check existence of 'node_modules_dir' before creating it.
        https://bugs.webkit.org/show_bug.cgi?id=182040

        Reviewed by Aakash Jain.

        Fix the bug introduced in r227395.

        * tools/run-tests.py: Added directory existence check.

2018-01-22  Dewei Zhu  <dewei_zhu@apple.com>

        Fix the bug that 'TestGroupResultsViewer' creates unnecessary rows.
        https://bugs.webkit.org/show_bug.cgi?id=181967

        Reviewed by Ryosuke Niwa.

        Fixed a bug caused by a typo in CommitSet.equals, which makes it returns incorrect results for most
        comparison between a CommitSet and a MeasurementCommitSet.

        MeasurementCommitSet does not have full information for the commits, thus, it cannot build mappings
        between root/patch/owner commit/requires build to repository. When querying whether a given repository
        needs to be built, MeasurementCommitSet will return undefined. Due to 'undefined != false', this
        equality check will fail. Making 'CommitSet.requiresBuildForRepository' defaults to 'false' would fix
        this bug.

        * public/v3/models/commit-set.js:
        (CommitSet.prototype.requiresBuildForRepository): Make it return false when key does not exist
        instead of 'undefined'.
        (CommitSet.prototype.equals): Fixed the typo that causes the bug.
        Use wrapped functions instead of querying the mapping directly.
        * unit-tests/commit-set-tests.js: Added unit tests.

2018-01-18  Dewei Zhu  <dewei_zhu@apple.com>

        'run-test.py' script should make sure 'node_modules' directory exists before installing node packages.
        https://bugs.webkit.org/show_bug.cgi?id=181808

        Reviewed by Ryosuke Niwa.

        'run-test.py' will fail if 'node_modules' does not exist before running this script.
        Instead of calling 'os.chdir' to change directory, use 'cwd' in subprocess instead.

        * tools/run-tests.py: Added the logic to ensure 'node_modules' exists.
        Also use 'cwd' in subprocess.call instead of calling 'os.chdir' ahead.

2018-01-20  Dewei Zhu  <dewei_zhu@apple.com>

        Extend 'ifBuilt' config key to set property based on whether certain repositories are built or not.
        https://bugs.webkit.org/show_bug.cgi?id=181906

        Reviewed by Ryosuke Niwa.

        Before this change, 'ifBuilt' will always set specified property for test properties as long as there
        is a build type build in the same build request group. However, this is no longer valid as we don't
        want to set specified property for testing when only owned commit is built in previous build.
        'ifBuilt' needs to conditionally set property based on whether certain required repositories are built.
        Empty required repository list means no requirement on repository to set property.

        * tools/js/buildbot-syncer.js:
        (BuildbotSyncer.prototype._propertiesForBuildRequest):In the case of 'built', only set property when
        repository requirment is meet and there is a 'build' root request in the same build request group.
        (BuildbotSyncer._parseRepositoryGroup): Extend 'ifBuild' to pass information based on contition.
        * unit-tests/buildbot-syncer-tests.js: Added unit tests.

2018-01-19  Dewei Zhu  <dewei_zhu@apple.com>

        Should reject updating a build request which has an associated build.
        https://bugs.webkit.org/show_bug.cgi?id=181893

        Reviewed by Ryosuke Niwa.

        Current code does not prevent submitting to same build request multiple times.
        This could lead to a build losing its associated build request.
        As a result, this build will be visible in charts which is not right.
        Added a check when a build request is reported.
        Addressed a 'FIXME' for the race condition inside ReportProcessor->resolve_build_id by surrounding
        it with a database transaction.

        * public/include/report-processor.php:
        Wrap adding platform and resolve_build_id with a database transaction.
        Add a check to make sure only a build request has no associated build can be updated.
        * server-tests/api-report-tests.js: Added unit tests accordingly.

2018-01-18  Dewei Zhu  <dewei_zhu@apple.com>

        Should allow updating a build-request to 'canceled'.
        https://bugs.webkit.org/show_bug.cgi?id=181819

        Reviewed by Ryosuke Niwa.

        It's possible syncing script update a build-request to 'canceled' state.

        * public/api/build-requests.php: Added 'canceled' as an acceptable update state.
        * server-tests/api-build-requests-tests.js: Added a unit test to update a build-request to 'canceled'.

2018-01-18  Aakash Jain  <aakash_jain@apple.com>

        Add support for builderNameToIDMap in BuildbotSyncer
        https://bugs.webkit.org/show_bug.cgi?id=176526

        Reviewed by Ryosuke Niwa.

        * tools/js/buildbot-syncer.js:
        (BuildbotSyncer._loadConfig): Added builderNameToIDMap parameter. It would be used later on.
        (BuildbotSyncer._resolveBuildersWithPlatforms): Ditto.
        (BuildbotSyncer._validateAndMergeConfig): Added builderID as a valid config parameter.
        * tools/js/buildbot-triggerable.js:
        (BuildbotTriggerable.prototype.getBuilderNameToIDMap): Method to fetch BuilderNameToIDMap from Buildbot 0.9.
        (BuildbotTriggerable.prototype.getBuilderNameToIDMapDeprecated): Method to fetch BuilderNameToIDMap from Buildbot 0.8.
        (BuildbotTriggerable.prototype.initSyncers): Updated to use getBuilderNameToIDMap.
        * unit-tests/buildbot-syncer-tests.js: Updated unit-tests.
        * server-tests/resources/mock-data.js:
        (MockData.buildbotBuildersURLDeprecated): URL for fetching Builders list.
        (MockData.buildbotBuildersURL): Ditto for Buildbot 0.9
        (MockData.mockBuildbotBuildersDeprecated): Sample builders data for Buildbot 0.8
        (MockData.mockBuildbotBuilders): Ditto for Buildbot 0.9
        * server-tests/tools-buildbot-triggerable-tests.js: Added test for getBuilderNameToIDMap. Updated tests to handle
        newly added promise for fetching builders list from Buildbot.
        * server-tests/tools-sync-buildbot-integration-tests.js: Ditto.

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

        Charts can be empty when values are all identical
        https://bugs.webkit.org/show_bug.cgi?id=181828

        Reviewed by Alexey Proskuryakov.

        Fixed the bug that when SampleVarianceUpperTriangularMatrix can store -Infinity as the initial cost
        of some entries when the sample standard deviation between two points turns out to be 0,
        and cause splitIntoSegmentsUntilGoodEnough to return undefiend because no segmentation has a finite cost.

        Also fixed the bug that the time series chart fails to show any data points when all data points have
        identical values as the entire y-coordinate gets collapsed to an empty value range by adjusting the max value
        when min & max values are identical.

        * public/v3/components/time-series-chart.js:
        (TimeSeriesChart.prototype._ensureValueRangeCache): Raise the max slightly when min & max are identical
        to avoid the chart becoming empty. Otherwise valueDiff in _computeVerticalRenderingMetrics becomes 0
        and value-to-y-coordinate conversion always results in NaN.
        * public/shared/statistics.js:
        (Statistics..SampleVarianceUpperTriangularMatrix):
        * unit-tests/statistics-tests.js: Added a test case.

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

        Don't fetch more than two builds to check duplicity of builds in ReportProcessor
        https://bugs.webkit.org/show_bug.cgi?id=181786

        Reviewed by Wenson Hsieh.

        Limit the number of builds to check to avoid using a lot of memory with a long delay.

        * public/include/report-processor.php:
        (ReportProcessor::resolve_build_id): 

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

        Rename config.json to config.json.sample
        https://bugs.webkit.org/show_bug.cgi?id=181785

        Reviewed by Wenson Hsieh.

        * .gitignore: Added config.json.
        * ReadMe.md: Updated the instruction.
        * config.json.sample: Renamed from config.json.

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

        Unreviewed build fixes in TestGroupResultsViewer.

        * public/v3/components/test-group-results-viewer.js:
        (TestGroupResultsViewer.prototype.render): _renderCurrentMetricsLazily was never called.
        (TestGroupResultsViewer.prototype._buildRowForMetric): Don't try to render null or NaN.

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

        Fix perf dashboard tests for node v8
        https://bugs.webkit.org/show_bug.cgi?id=181782

        Reviewed by Wenson Hsieh.

        Fixed the various tests for node.js v8, which is the latest LTS version.

        * server-tests/api-manifest-tests.js: Replaced the missing Triggerable.acceptsTest by Triggerable.acceptedTests
        after r226836.
        * server-tests/api-measurement-set-tests.js: Added "Z" to the end timestamps to force UTF timezone now that Date
        in node.js parses using the local timezone by default.
        * server-tests/resources/test-server.js:
        (TestServer.prototype._restoreDataDirectory): Fixed the bug that this function was erroneously using the async
        function to rename a directory per new warnings. This code was racy, and it used to cause a test error occasionally.
        * server-tests/tools-os-build-fetcher-tests.js: Fixed the assertions to make it work in the latest node.js.
        * unit-tests/measurement-set-tests.js:
        (waitForMeasurementSet): Wait for setTimeout to cycle through all microtasks instead of just two microtask cycles.

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

        Cannot trigger Dromaeo tests on internal perf try bots
        https://bugs.webkit.org/show_bug.cgi?id=179712

        Reviewed by Chris Dumez.

        The bug was caused by CustomAnalysisTaskConfigurator only showing the top-level tests that are triggerable
        instead of the list of highest level tests that are triggerable.

        * public/v3/components/custom-analysis-task-configurator.js:
        (CustomAnalysisTaskConfigurator.prototype.selectTests): Update the test group name when a new test is picked.
        (CustomAnalysisTaskConfigurator.prototype.selectPlatform):
        (CustomAnalysisTaskConfigurator.prototype._didUpdateSelectedPlatforms): Extracted from selectPlatform.
        (CustomAnalysisTaskConfigurator.prototype._renderTriggerableTests): Include the list of all highest-level tests
        which are triggerable.
        (CustomAnalysisTaskConfigurator.prototype._renderRadioButtonList): Added labelForObject which returns the label
        to be used in the list items. For tests, we want to use the full name, not just its label.
        * public/v3/models/analysis-task.js:
        (AnalysisTask.fetchById):
        * public/v3/models/triggerable.js:
        (Triggerable.prototype.acceptedTests): Added.
        (Triggerable.prototype.acceptsTest): Deleted.

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