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