2019-12-15  Zhifei Fang  <zhifei_fang@apple.com>

        Add power metric to perf dashboard
        https://bugs.webkit.org/show_bug.cgi?id=205227

        Reviewed by Ryosuke Niwa.

        * public/v3/models/metric.js:
        (Metric):

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