Update ChartPane per change r231087.
[WebKit.git] / Websites / perf.webkit.org / ChangeLog
1 2018-05-11  Dewei Zhu  <dewei_zhu@apple.com>
2
3         Update ChartPane per change r231087.
4         https://bugs.webkit.org/show_bug.cgi?id=185570
5
6         Reviewed by Ryosuke Niwa.
7
8         On r231087 we change the return type of AnalysisTask.create, ChartPane needs to adapt
9         this change.
10
11         * public/v3/pages/chart-pane.js: Adapted the change that AnalysisTask.create now returns
12         an AnalysisTask object.
13         (ChartPane.prototype.async._analyzeRange):
14
15 2018-05-10  Dewei Zhu  <dewei_zhu@apple.com>
16
17         CommitLogViewer._preceedingCommit should not always be null
18         https://bugs.webkit.org/show_bug.cgi?id=185540
19
20         Reviewed by Ryosuke Niwa.
21
22         Fix the bug introduced in r227746 that CommitLogViewer._preceedingCommit is always null.
23
24         * browser-tests/index.html: Fix expected measurement-set url.
25         * public/v3/components/commit-log-viewer.js:
26         (CommitLogViewer.prototype._fetchCommitLogs): CommitLogViewer._preceedingCommit should be set
27          when fetching for preceeding revision succeeds.
28
29 2018-05-03  Dewei Zhu  <dewei_zhu@apple.com>
30
31         Range bisector should check the commits for repositories without change in specified range.
32         https://bugs.webkit.org/show_bug.cgi?id=185269
33
34         Reviewed by Ryosuke Niwa.
35
36         For repositories without a change in the specified range, we still need to use them to filter commit
37         sets. Before this change, code does not apply filtering by those repositories against commit set. As
38         a result, commit sets with different commits for those repositories may be chosen as bisecting commit set.
39
40         * public/v3/commit-set-range-bisector.js: Updated the logic to verify range for repositories without
41         change in range.
42         (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits):
43         * unit-tests/commit-set-range-bisector-tests.js: Added a unit test to guard against this change.
44
45 2018-05-02  Dewei Zhu  <dewei_zhu@apple.com>
46
47         Create analysis task should sync analysis task status after creation.
48         https://bugs.webkit.org/show_bug.cgi?id=185222
49
50         Reviewed by Ryosuke Niwa.
51
52         * public/v3/models/analysis-task.js:
53         (AnalysisTask.async.create): Fetch newly-created analysis task right about its creation.
54         (AnalysisTask):
55         * tools/js/measurement-set-analyzer.js:
56         (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet): Adjust as 'AnalysisTask.create' now
57         returns an anlysis task instance.
58         (MeasurementSetAnalyzer):
59         * unit-tests/analysis-task-tests.js: Added a unit test for this change.
60         (async):
61         * unit-tests/measurement-set-analyzer-tests.js: Update unit tests accordingly.
62         Fix a typo in one previous unit test.
63         (async):
64
65 2018-05-01  Dewei Zhu  <dewei_zhu@apple.com>
66
67         Write a script that detects chart changes by using v3 API.
68         https://bugs.webkit.org/show_bug.cgi?id=184419
69
70         Reviewed by Ryosuke Niwa.
71
72         Added a script that detects chart changes and schedule confirming analysis task.
73
74         * browser-tests/async-task-tests.js: Added a unit test for 'AsyncTask'.
75         * browser-tests/index.html: Added import for 'AsyncTask' for testing.
76         * public/shared/statistics.js: Make 'findRangesForChangeDetectionsWithWelchsTTest' defaults to 0.99 one sided possibility.
77         (Statistics.new.this.findRangesForChangeDetectionsWithWelchsTTest):
78         * public/v3/async-task.js:
79         (AsyncTask.isAvailable): Helper function to determine whether AsyncTask is available or not as 'Worker' is
80         not available in nodejs.
81         (AsyncTask):
82         * public/v3/models/bug.js: Export as a module.
83         * public/v3/models/measurement-set.js:
84         (MeasurementSet.prototype._invokeSegmentationAlgorithm): Added a check to avoid using AsyncTask when running in NodeJs.
85         (MeasurementSet):
86         * server-tests/resources/common-operations.js: Added a helper function to assert certain exception is thrown.
87         (async.assertThrows):
88         * tools/js/measurement-set-analyzer.js: Added 'MeasurementSetAnalyzer' module for analyzing measurement set.
89         (MeasurementSetAnalyzer):
90         (MeasurementSetAnalyzer.prototype.async.analyzeOnce):
91         (MeasurementSetAnalyzer.measurementSetListForAnalysis):
92         (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet):
93         * tools/js/v3-models.js: Added import for 'Bug' object.
94         * tools/run-analysis.js: Added this script to detect measurement set changes.
95         (main):
96         (async.analysisLoop):
97         * unit-tests/measurement-set-analyzer-tests.js: Added unit tests for 'MeasurementSetAnalyzer'.
98         * unit-tests/resources/mock-v3-models.js: Reset 'MeasurementSet._set' every time.
99         Update mock platform to include lastModifiedByMetric information.
100         (MockModels.inject):
101
102 2018-04-30  Ryosuke Niwa  <rniwa@webkit.org>
103
104         Creating a custom analysis task after fetching all analysis tasks fail
105         https://bugs.webkit.org/show_bug.cgi?id=184641
106
107         Reviewed by Saam Barati.
108
109         The bug was caused by AnalysisTask._fetchSubset not fetching the analysis task when all analysis tasks
110         had previously been fetched (AnlaysisTask._fetchAllPromise is set) even when noCache is set to true.
111         Fixed it by ignornig _fetchAllPromise when noCache is set to true.
112
113         This patch also adds noCache argument to AnalysisTask.fetchById and reverts the inadvertent change in
114         r226836 to always set noCache to true in this function.
115
116         * public/v3/models/analysis-task.js:
117         (AnalysisTask.fetchById): Added noCache argument instead of always specifying true, and modernized the code.
118         (AnalysisTask._fetchSubset): Fixed the bug. See above description.
119         * public/v3/models/test-group.js:
120         (TestGroup.createWithTask): Set noCache to true when calling AnalysisTask.fetchById here.
121         * unit-tests/analysis-task-tests.js: Added test cases for AnalysisTask.fetchById, including a test
122         to make sure it doesn't fetch the specified analysis task when noCache is set to false and all analysis
123         tasks had previously been fetched for the aforementioned revert of the inadvertent change in r226836.
124         (sampleAnalysisTasks): Renamed from sampleAnalysisTasks as the result contains multiple analysis tasks.
125         * unit-tests/test-groups-tests.js: Added a test case for TestGroup.createWithTask
126
127 2018-04-30  Ryosuke Niwa  <rniwa@webkit.org>
128
129         REGRESSION(r230960): Browser tests under TimeSeriesChart fetchMeasurementSets all fail
130         https://bugs.webkit.org/show_bug.cgi?id=185125
131
132         Reviewed by Saam Barati.
133
134         The bug was caused by mock-remote-api.js always loading PrivilegedAPI using require, which doesn't work in a browser.
135         Fixed the bug by explicitly requiring the right kind of PrivilegedAPI in each unit test instead.
136
137         * unit-tests/analysis-task-tests.js:
138         * unit-tests/buildbot-syncer-tests.js:
139         * unit-tests/commit-log-tests.js:
140         * unit-tests/commit-set-range-bisector-tests.js:
141         * unit-tests/commit-set-tests.js:
142         * unit-tests/measurement-set-tests.js:
143         * unit-tests/privileged-api-tests.js:
144         * unit-tests/resources/mock-remote-api.js:
145         (MockRemoteAPI.inject): Take PrivilegedAPI instead of the type string. Also fixed a bug that _token wasn't unset
146         after each unit test, and superfluous initializations of originalRemoteAPI and originalPrivilegedAPI.
147         * unit-tests/test-groups-tests.js:
148
149 2018-04-30  Dewei Zhu  <dewei_zhu@apple.com>
150
151         MeasurementSet._constructUrl should construct absolute url.
152         https://bugs.webkit.org/show_bug.cgi?id=185137
153
154         Reviewed by Ryosuke Niwa.
155
156         MeasurementSet._constructUrl should not construct an url with relative path.
157
158         * public/v3/models/measurement-set.js: Should use '/api/measurement-set...' and '/data/measurement-set-...'
159         for uncached and cached fetching.
160         * unit-tests/measurement-set-tests.js: Updated unit tests.
161         (const.set MeasurementSet):
162
163 2018-04-26  Dewei Zhu  <dewei_zhu@apple.com>
164
165         Extend create-analysis-test API to be able to create with confirming test group.
166         https://bugs.webkit.org/show_bug.cgi?id=184958
167
168         Reviewed by Ryosuke Niwa.
169
170         Extend create-analysis-test API to be able to create an analysis task with confirming test group.
171         Update create analysis task UI in chart pane to adapt this new API.
172         Refactored '/privileged-api/create-test-group' API to share some creating test group logic with '/privileged-api/create-analysis-task' API.
173         Moved the shared logic to commit-sets-helpers.php.
174
175         * public/api/analysis-tasks.php: Use 'require_once' instead of 'require'.
176         * public/include/commit-sets-helpers.php: Added.
177         (create_test_group_and_build_requests): A helper function that creates test group and build requests for a analysis
178         task. In long term, this should be a class to avoid passing long argument list around.
179         (insert_commit_sets_and_construct_configuration_list): Based on commit sets returns build and test configurations.
180         (insert_build_request_for_configuration): Insert build requests based on configuration.
181         (commit_sets_from_revision_sets): Returns commit sets from given revision set list.
182         * public/privileged-api/create-analysis-task.php: Added the ability to create analysis task with confirming test
183         groups when repetition count is specified.
184         * public/privileged-api/create-test-group.php: Moved shared function to commit-sets-helpers.php.
185         * public/v3/models/analysis-task.js:
186         (AnalysisTask.create): Instead of accepting run ids, it now accepts points and test group name and confirming iterations.
187         It will conditionally add test group information into parameter when confirming iterations is a positive number.
188         (AnalysisTask):
189         * public/v3/models/commit-set.js:
190         (CommitSet.revisionSetsFromCommitSets): Move 'TestGroup._revisionSetsFromCommitSets' since CommitSet class is more
191         appropriate place and it will be shared by both TestGroup and AnalysisTask
192         (CommitSet):
193         * public/v3/models/test-group.js:
194         (TestGroup.createWithTask): Adapt 'CommitSet.revisionSetsFromCommitSets'.
195         (TestGroup.createWithCustomConfiguration): Adapt 'CommitSet.revisionSetsFromCommitSets'.
196         (TestGroup.createAndRefetchTestGroups): Adapt 'CommitSet.revisionSetsFromCommitSets'.
197         (TestGroup._revisionSetsFromCommitSets): Deleted and moved to 'CommitSet.revisionSetsFromCommitSets'.
198         * public/v3/pages/chart-pane.js:
199         (ChartPane.prototype.didConstructShadowTree): Added the logic to disable options when checkbox for creating confirming
200         test group is unchecked.
201         (ChartPane.prototype._analyzeRange): Conditionally create confirming test group from UI.
202         (ChartPane.cssTemplate):
203         * server-tests/privileged-api-create-analysis-task-tests.js: Added unit tests. Added a unit test for 'NodePrivilegedAPI'.
204         * unit-tests/analysis-task-tests.js: Added unit tests.
205         * unit-tests/commit-set-tests.js: Added unit test for 'CommitSet.revisionSetsFromCommitSets'.
206         * unit-tests/resources/mock-remote-api.js: Reset csrf token when BrowserPrivilegedAPI is used.
207         (MockRemoteAPI.inject):
208
209 2018-04-23  Dewei Zhu  <dewei_zhu@apple.com>
210
211         Tool scripts should not use PrivilegedAPI from 'public/v3/privileged-api.js'.
212         https://bugs.webkit.org/show_bug.cgi?id=184766
213
214         Reviewed by Ryosuke Niwa.
215
216         For tools, we should not use PrivilegedAPI for tools as current PrivilegedAPI
217         is used by UI and it is unnecessary to generate CSRF token for tools.
218         Will post a followup patch that creates a PrivilegedAPI used by tools.
219         Make a change on TestServer.inject and MockRemoteAPI.inject to allow specifying
220         BrowserPrivilegedAPI or NodePrivilegedAPI in the test. Currently defaults to
221         BrowserPrivilegedAPI as this is the test behavior before this change.
222
223         * server-tests/resources/common-operations.js: Allow passing type of privileged api
224         information to TestServer.inject.
225         * server-tests/resources/test-server.js: Conditionally inject PrivilegedAPI based on
226         type of privileged api.
227         (TestServer.prototype.inject):
228         (TestServer):
229         * server-tests/tools-buildbot-triggerable-tests.js: Updated 'prepareServerTest' invocation.
230         * server-tests/tools-os-build-fetcher-tests.js: Updated 'prepareServerTest' invocation.
231         * server-tests/tools-sync-buildbot-integration-tests.js: Temporarily injecting
232         BrowserPrivilegedAPI for mocking UploadedFile. The actual script does not rely on
233         BrowserPrivilegedAPI at all.
234         (async.createTestGroupWihPatch):
235         (beforeEach):
236         * tools/js/privileged-api.js: Added NodePrivilegedAPI
237         (NodePrivilegedAPI.prototype.sendRequest):
238         (NodePrivilegedAPI.configure): Configure the slave name and password.
239         (NodePrivilegedAPI):
240         * tools/js/v3-models.js: Removed the import of PrivilegedAPI.
241         * unit-tests/privileged-api-tests.js:. Added unit tests for NodePrivilegedAPI.
242         * unit-tests/resources/mock-remote-api.js: Conditionally inject PrivilegedAPI based on
243         the type of privileged api.
244         (MockRemoteAPI.inject):
245
246 2018-04-23  Dewei Zhu  <dewei_zhu@apple.com>
247
248         Revision information returned by querying measurement set api with analysis task id should contain commit order.
249         https://bugs.webkit.org/show_bug.cgi?id=184902
250
251         Reviewed by Ryosuke Niwa.
252
253         This is a bug fix for r230719 which does not cover the case while querying `measurement-set.php?analysisTask=$task_id`
254
255         * public/api/measurement-set.php: AnalysisResultsFetcher.fetch_commits results should contains commit order.
256         * server-tests/api-measurement-set-tests.js: Added unit test for this change.
257
258 2018-04-19  Dewei Zhu  <dewei_zhu@apple.com>
259
260         Add a bisect button to automatically schedule bisecting A/B tasks.
261         https://bugs.webkit.org/show_bug.cgi?id=183888
262
263         Reviewed by Ryosuke Niwa.
264
265         Extended AnalysisTask's ability to figure out bisecting A/B tasks based on existing data points and test groups.
266         Updated analysis page UI to show bisect button which will only appear when the middle commit set of the range in
267         test group can be found.
268
269         Finding middle commit set algorithm is described as follows:
270         1. Find all commits from multiple repositories among the ranges specified by two commit sets in test group. In
271         the meanwhile, merge all commits that have commit time into a single list. For commits only have commit order,
272         put those commits into separate lists.
273         2. Filter all the available commit sets in current analysis task by keeping the ones have exact repositories
274         as the two commit sets in specified test group, and every commit of a commit set is in side the commit range.
275         After filtering the commit sets, sort the remaining ones and only keep one commit set if multiple commit sets
276         are equal to each other.
277         3. Among commits processed by step 2, find the commit sets that have the commit which is closest to the middle of
278         all commits that have commit time created from step 1.
279         4. Among commits processed by step 3, find the commit sets that have the commit which is closest to the middle of
280         commits that only have commit order and categorized by repository. We have to iterate through repository as commit
281         order is not granted to be comparable between different repositories.
282         5. If more than one commit sets are found, choose the middle commit set.
283
284         * public/v3/commit-set-range-bisector.js: Added.
285         (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits): Instead of naively returning the middle of
286         existing commit set array, this function selects a bisect bisection points that is closest to actually middle of
287         the revision range based on all revisions reported to performance dashboard.
288         (CommitSetRangeBisector._findCommitSetsWithinRange): Helper function to find commit sets those are in specified range.
289         (CommitSetRangeBisector._orderCommitSetsByTimeAndOrderThenDeduplicate): Helper function to sort and deduplicate commit sets.
290         (CommitSetRangeBisector._closestCommitSetsToBisectingCommitByTime): Helper function to find the commit sets those
291         are closest to the middle of among all the commits in the range that have commit time.
292         (CommitSetRangeBisector._findCommitSetsClosestToMiddleOfCommitsWithOrder): Helper function which goes through all
293         repositories the commit of which has commit order, and find the commit sets those are closest to the middle of
294         commits for each repository.
295         (CommitSetRangeBisector._buildCommitToCommitSetMap): Helper function to builder mapping from a commit to commit
296         sets those contain this commit.
297         (CommitSetRangeBisector._findCommitClosestToMiddleIndex): Helper function to find closest commit to the middle of index.
298         (CommitSetRangeBisector):
299         * public/v3/index.html: Imports 'public/v3/commit-set-range-bisector.js'.
300         * public/v3/models/analysis-task.js:
301         (AnalysisTask.prototype.async.commitSetsFromTestGroupsAndMeasurementSet): Aggregates all existing commit sets in
302         test groups of current analysis tasks.
303         * public/v3/models/commit-log.js:
304         (CommitLog.prototype.hasCommitTime): A helper function determine whether a commit has a commit time. For commit
305         that does not have time, server will return commit time as zero. As it is unrealistic for a commit has commit time
306         0, it would be safe to assume a valid commit time is greater than 0.
307         (CommitLog.prototype.hasCommitOrder): Returns whether a commit has a commit oder.
308         (CommitLog.hasOrdering): Determine whether we can order two commits by commit time or commit order.
309         (CommitLog.orderTwoCommits): Order two commits incrementally.
310         * public/v3/models/commit-set.js:
311         (CommitSet.prototype.hasSameRepositories): A helper function to determine whether a commit set has same repositories
312         as current repository.
313         (CommitSet.containsRootOrPatchOrOwnedCommit): A helper function to determine whether current commit set has root,
314         patch or owned commit.
315         (CommitSet.commitForRepository): This function defined twice identically, remove one of them.
316         * public/v3/models/test-group.js: Make '_computeRequestedCommitSets' a static function as it does not use any
317         instance variables.
318         * public/v3/pages/analysis-task-page.js: Added bisect button.
319         (AnalysisTaskTestGroupPane):
320         (AnalysisTaskTestGroupPane.prototype.didConstructShadowTree):
321         (AnalysisTaskTestGroupPane.prototype.setTestGroups): Update 'setTestGroups' to update _bisectingCommitSetByTestGroup
322         when the test groups changes.
323         (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup): Added code to conditionally show bisect button.
324         Bisect button will only show when there is a middle commit set for that test group.
325         (AnalysisTaskTestGroupPane.htmlTemplate):
326         (AnalysisTaskTestGroupPane.cssTemplate):
327         (AnalysisTaskPage.prototype.didConstructShadowTree):
328         (AnalysisTaskPage.prototype._retryCurrentTestGroup):
329         (AnalysisTaskPage.prototype.async._bisectCurrentTestGroup): A callback when bisect button is clicked.
330         * tools/js/v3-models.js:
331         * unit-tests/commit-log-tests.js: Added unit tests for 'CommitLog.hasCommitTime', 'CommitLog.hasCommitOrder',
332         'CommitLog.orderTwoCommits', 'CommitLog.hasOrdering'.
333         * unit-tests/commit-set-range-bisector-tests.js: Unit tests for 'CommitSetRangeBisector.commitSetClosestToMiddleOfAllCommits'.
334         * unit-tests/commit-set-tests.js: Added unit tests for 'CommitSet.hasSameRepositories' and 'CommitSet.containsRootOrPatchOrOwnedCommit'.
335
336 2018-04-16  Dewei Zhu  <dewei_zhu@apple.com>
337
338         Commit order should always be returned by api.
339         https://bugs.webkit.org/show_bug.cgi?id=184674
340
341         Reviewed by Ryosuke Niwa.
342
343         Commit order sometimes missing in CommitLog object before this change.
344         This makes ordering commits logic become unnecessarily complicate.
345         This change will ensure commit order is always fetched for a CommitLog object.
346         Change measurement-set API to contain commit order information.
347         Change commits API to contain commit order information.
348
349         * public/api/measurement-set.php: Includes commit order information.
350         * public/include/commit-log-fetcher.php:
351         * public/v3/models/commit-log.js: Added a function to return order information.
352         (CommitLog.prototype.updateSingleton): This function should update commit order.
353         (CommitLog.prototype.order): Returns the order of commit.
354         * public/v3/models/commit-set.js:
355         (MeasurementCommitSet): Update MeasurementCommitSet to contain commit order information when creating CommitLog object.
356         * server-tests/api-measurement-set-tests.js: Updated unit tests.
357         * unit-tests/analysis-task-tests.js: Update unit tests to contain commit order information in mock data.
358         (measurementCluster):
359         * unit-tests/commit-log-tests.js: Added unit tests for CommitLog.order.
360         * unit-tests/commit-set-tests.js: Added commit order in MeasurementCommitSet.
361         * unit-tests/measurement-adaptor-tests.js: Updated unit tests to contain commit order information in mock data.
362         * unit-tests/measurement-set-tests.js: Updated unit tests to contain commit order information in mock data.
363
364 2018-04-15  Ryosuke Niwa  <rniwa@webkit.org>
365
366         Make it possible to hide some repository groups
367         https://bugs.webkit.org/show_bug.cgi?id=184632
368
369         Reviewed by Saam Barati.
370
371         Added the ability to hide repository groups in the custom analysis task configurator from the admin page.
372         Hidden repositroy groups will continue to function for existing test groups. This is purely an UI change.
373
374         * init-database.sql: Added repositorygroup_hidden as a new column to triggerable_repository_groups.
375         * public/admin/triggerables.php: Added a form field to hide a repository group.
376         * public/include/manifest-generator.php: Include hidden state in the manifest file.
377         * public/v3/components/custom-analysis-task-configurator.js:
378         (CustomAnalysisTaskConfigurator.prototype._renderRepositoryPanes): Filter out hidden repository groups.
379         * public/v3/models/triggerable.js:
380         (prototype.isHidden): Added.
381         * server-tests/api-manifest-tests.js: Updated an existing test case to test a hidden repository group.
382
383 2018-04-06  Dewei Zhu  <dewei_zhu@apple.com>
384
385         Added 'CommitSet.diff' which will be shared between multiple independent incoming changes.
386         https://bugs.webkit.org/show_bug.cgi?id=184368
387
388         Reviewed by Ryosuke Niwa.
389
390         'CommitSet.diff' will be used in multiple independent incoming changes.
391         It would be easier to make this a separate change to parallelize the changes depends on this API.
392
393         * public/v3/models/commit-set.js:
394         (CommitSet.prototype.createNameWithoutCollision): Moved from 'AnalysisTaskPage' and make it more generic.
395         (CommitSet.prototype.diff): Describe differences between 2 commit sets including commit, root and patch differences.
396         * public/v3/pages/analysis-task-page.js: Move 'AnalysisTaskPage._createRetryNameForTestGroup' to CommitSet in a more generic form.
397         (AnalysisTaskPage.prototype._retryCurrentTestGroup): Use 'CommitSet.withoutRootPatchOrOwnedCommit' instead.
398         (AnalysisTaskPage.prototype._createRetryNameForTestGroup): Moved to CommitSet in a more generic form.
399         * unit-tests/commit-set-tests.js: Added unit tests for 'CommitSet.diff'.
400
401 2018-04-05  Dewei Zhu  <dewei_zhu@apple.com>
402
403         Fix a bug introduced in r230295 that A/B test result is not shown.
404         https://bugs.webkit.org/show_bug.cgi?id=184350
405
406         Reviewed by Ryosuke Niwa.
407
408         result.label should be assigned in `TestGroup._computeRequestedCommitSets`.
409
410         * public/v3/models/test-group.js:
411         (TestGroup.prototype._computeRequestedCommitSets):
412
413 2018-03-29  Dewei Zhu  <dewei_zhu@apple.com>
414
415         Added UI to show potential regressions in chart with t-testing against segmentations.
416         https://bugs.webkit.org/show_bug.cgi?id=184131
417
418         Reviewed by Ryosuke Niwa.
419
420         Added UI in the chart-pane so that user can use new option in trendline which not only
421         shows the segmentation, but also t-test against potential changes indicated by segmentation.
422
423         Fix a bug in AnalysisTaskPage that chart is not updated when change type of task changes.
424
425         * browser-tests/interactive-time-series-chart-tests.js: Fix a unit tests.
426         * browser-tests/time-series-chart-tests.js: Fix a unit tests.
427         * public/shared/statistics.js: Added a function to t-test certain range based on segmentation results.
428         (Statistics.supportedOneSideTTestProbabilities):
429         (Statistics.findRangesForChangeDetectionsWithWelchsTTest): The argument `segmentations`, every 2 items in the list defines 
430         segmentation, that is why the index incremental is 2 in this funcion.
431         * public/v3/components/chart-pane-base.js: Will select the range if user clicks on a suggested annotation.
432         (ChartPaneBase.prototype.configure):
433         (ChartPaneBase.prototype._didClickAnnotation):
434         * public/v3/components/chart-styles.js:
435         (ChartStyles.annotationFillStyleForTask): Added 'annotationFillStyleForTask' to determine the fillStyle for annotation based on change type of a analysis task.
436         * public/v3/components/interactive-time-series-chart.js:
437         (InteractiveTimeSeriesChart.prototype._findAnnotation): Also need to search among suggested annotaions.
438         * 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.
439         (TimeSeriesChart):
440         (TimeSeriesChart.prototype.setSuggestedAnnotations):
441         (TimeSeriesChart.prototype.allAnnotations): Returns both annotations with and without analysis task.
442         (TimeSeriesChart.prototype._layoutAnnotationBars): Should take all annotations in the calculation.
443         * public/v3/models/measurement-set.js:
444         (MeasurementSet.prototype.metricId): Returns metric id.
445         * public/v3/models/metric.js:
446         (Metric.prototype.summarizeForValues): Added helper function to summarize a given value
447         * public/v3/models/test-group.js:
448         (TestGroup.prototype.compareTestResults): Adapted to use 'Metric.summarizeForValues'.
449         * public/v3/pages/chart-pane.js: Added 'Segmentation with t-test analysis' to 'ChartTrendLineTypes'.
450         (ChartPane.prototype._renderTrendLinePopover):
451         (ChartPane.prototype.async._updateTrendLine): make it an async function.
452         * unit-tests/statistics-tests.js: Added unit tests for 'findRangesForChangeDetectionsWithWelchsTTest'.
453
454 2018-04-02  Aakash Jain  <aakash_jain@apple.com>
455
456         Remove deprecated Buildbot 0.8 code from Perf syncing scripts
457         https://bugs.webkit.org/show_bug.cgi?id=183915
458
459         Reviewed by Ryosuke Niwa.
460
461         * server-tests/resources/mock-data.js:
462         (MockData.buildbotBuildersURLDeprecated): Deleted.
463         (MockData.mockBuildbotBuildersDeprecated): Deleted.
464         (MockData.pendingBuildDeprecated): Deleted.
465         (MockData.runningBuildDeprecated): Deleted.
466         (MockData.finishedBuildDeprecated): Deleted.
467         * tools/js/buildbot-syncer.js:
468         (BuildbotBuildEntryDeprecated): Deleted.
469         (BuildbotBuildEntryDeprecated.prototype.initialize): Deleted.
470         (BuildbotBuildEntryDeprecated.prototype.url): Deleted.
471         (BuildbotSyncer.prototype.scheduleBuildOnBuildbotDeprecated): Deleted.
472         (BuildbotSyncer.prototype._pullRecentBuildsDeprecated): Deleted.
473         (BuildbotSyncer.prototype.pathForPendingBuildsJSONDeprecated): Deleted.
474         (BuildbotSyncer.prototype.pathForBuildJSONDeprecated): Deleted.
475         (BuildbotSyncer.prototype.pathForForceBuildDeprecated): Deleted.
476         (BuildbotSyncer.prototype.url): Deleted.
477         (BuildbotSyncer.prototype.urlForBuildNumberDeprecated): Deleted.
478         * tools/js/buildbot-triggerable.js:
479         (BuildbotTriggerable.prototype.getBuilderNameToIDMapDeprecated): Deleted.
480         * unit-tests/buildbot-syncer-tests.js:
481         (smallPendingBuildDeprecated): Deleted.
482         (smallInProgressBuildDeprecated): Deleted.
483         (smallFinishedBuildDeprecated): Deleted.
484         (samplePendingBuildRequestDeprecated): Deleted.
485         (sampleInProgressBuildDeprecated): Deleted.
486         (sampleFinishedBuildDeprecated): Deleted.
487
488 2018-03-19  Aakash Jain  <aakash_jain@apple.com>
489
490         Update Perf buildbot syncing scripts for Buildbot 0.9
491         https://bugs.webkit.org/show_bug.cgi?id=175969
492
493         Reviewed by Ryosuke Niwa.
494
495         * tools/js/buildbot-triggerable.js:
496         (BuildbotTriggerable.prototype.initSyncers): Switch from Deprecated version to new version of getBuilderNameToIDMap.
497         * tools/js/buildbot-syncer.js:
498         (BuildbotSyncer.prototype.scheduleRequestInGroupIfAvailable): Switch from Deprecated version to new version of scheduleRequest.
499         (BuildbotSyncer.prototype.pullBuildbot): Switch from Deprecated version to new version of pathForPendingBuilds, _pullRecentBuilds 
500         and BuildbotBuildEntry. Parse the pending build-requests data in Buildbot 0.9 format.
501         * unit-tests/buildbot-syncer-tests.js: Updated as per Buildbot 0.9 code.
502         * server-tests/tools-sync-buildbot-integration-tests.js: Ditto.
503         * server-tests/tools-buildbot-triggerable-tests.js: Ditto.
504         * server-tests/resources/mock-data.js: Ditto.
505         (MockData.pendingBuildsUrl): Method to construct pendingBuildsUrl in Buildbot 0.9 format.
506         (MockData.recentBuildsUrl): Ditto for recent builds url.
507         (MockData.statusUrl): Ditto for status url.
508         (MockData.builderIDForName): Method to get builder ID from builder name.
509
510 2018-03-15  Aakash Jain  <aakash_jain@apple.com>
511
512         BuildbotBuildEntry creates an incorrect url for pending builds
513         https://bugs.webkit.org/show_bug.cgi?id=183670
514
515         Reviewed by Ryosuke Niwa.
516
517         * tools/js/buildbot-syncer.js:
518         (BuildbotBuildEntry.prototype.initialize): Fetch buildrequestid from Buildbot.
519         (BuildbotBuildEntry.prototype.url): Construct url for pending build using buildrequestid from Buildbot.
520         * unit-tests/buildbot-syncer-tests.js: Updated unit-test.
521
522 2018-03-14  Aakash Jain  <aakash_jain@apple.com>
523
524         Add support for boolean properties in BuildbotSyncer while submitting build request to Buildbot 0.9 server
525         https://bugs.webkit.org/show_bug.cgi?id=183638
526
527         Reviewed by Ryosuke Niwa.
528
529         * tools/js/buildbot-syncer.js:
530         (BuildbotSyncer._parseRepositoryGroupPropertyTemplate): Allow boolean properties.
531         * server-tests/tools-sync-buildbot-integration-tests.js: Tests for boolean properties.
532         * unit-tests/buildbot-syncer-tests.js: Ditto.
533
534 2018-03-04  Dewei Zhu  <dewei_zhu@apple.com>
535
536         Create analysis task should use build time as fallback when commit time is not available.
537         https://bugs.webkit.org/show_bug.cgi?id=183309
538
539         Reviewed by Ryosuke Niwa.
540
541         Added the ability to schedule analysis task for the range without commit time.
542
543         * public/privileged-api/create-analysis-task.php: Use build time as fallback.
544         * server-tests/privileged-api-create-analysis-task-tests.js: Added a unit test for this change.
545
546 2018-03-04  Aakash Jain  <aakash_jain@apple.com>
547
548         BuildbotBuildEntry for buildbot 0.9 uses incorrect buildrequestid
549         https://bugs.webkit.org/show_bug.cgi?id=183194
550
551         Reviewed by Ryosuke Niwa.
552
553         * tools/js/buildbot-syncer.js:
554         (BuildbotBuildEntry.prototype.initialize): Updated _buildRequestId to use correct build-request-id, as set in syncer._buildRequestPropertyName.
555         (BuildbotSyncer.prototype.pathForPendingBuilds): Updated url to fetch properties for build-requests.
556         * unit-tests/buildbot-syncer-tests.js:
557         (sampleBuildData): Updated sampleBuildData with correct build-request-id in properties. Added
558         properties to samplePendingBuildRequestData.
559
560 2018-02-28  Aakash Jain  <aakash_jain@apple.com>
561
562         Rename samplePendingBuild to samplePendingBuildRequest
563         https://bugs.webkit.org/show_bug.cgi?id=183171
564
565         Reviewed by Ryosuke Niwa.
566
567         * unit-tests/buildbot-syncer-tests.js:
568         (samplePendingBuildRequests): Renamed from samplePendingBuild.
569         (samplePendingBuildRequestDeprecated): Renamed from samplePendingBuildDeprecated.
570         (samplePendingBuild): Deleted.
571         (samplePendingBuildDeprecated): Deleted.
572
573 2018-02-02  Aakash Jain  <aakash_jain@apple.com>
574
575         Add support for submitting build request to Buildbot 0.9 server in BuildbotSyncer
576         https://bugs.webkit.org/show_bug.cgi?id=182218
577
578         Reviewed by Ryosuke Niwa.
579
580         * tools/js/buildbot-syncer.js:
581         (BuildbotSyncer.prototype.scheduleRequest): Added assert to ensure forcescheduler property is always defined. Builds can not
582         be scheduled on Buildbot without this property. Updated unit-tests and server-tests accordingly.
583         (BuildbotSyncer.prototype.scheduleBuildOnBuildbotDeprecated): Method to schedule build request on Buildbot 0.8 server.
584         (BuildbotSyncer.prototype.scheduleBuildOnBuildbot): Method to schedule build request on Buildbot 0.9 server.
585         (BuildbotSyncer.prototype.pathForForceBuildDeprecated): Path for scheudling build on Buildbot 0.8 server.
586         (BuildbotSyncer.prototype.pathForForceBuild): Path for scheudling build on Buildbot 0.9 server.
587         * unit-tests/buildbot-syncer-tests.js:
588         (smallConfiguration): Added test-case for scheduleBuildOnBuildbot. Also added forcescheduler property in sample data.
589         * server-tests/resources/mock-data.js: Added forcescheduler property in sample data.
590         * server-tests/tools-buildbot-triggerable-tests.js: Updated server-tests to take care of added forcescheduler property.
591
592 2018-02-02  Aakash Jain  <aakash_jain@apple.com>
593
594         Add support for fetching recent builds in Buildbot 0.9 format in BuildbotSyncer
595         https://bugs.webkit.org/show_bug.cgi?id=179743
596
597         Reviewed by Ryosuke Niwa.
598
599         * tools/js/buildbot-syncer.js:
600         (BuildbotSyncer.prototype._pullRecentBuildsDeprecated): Renamed from _pullRecentBuilds. This method fetch
601         from Buildbot 0.8 server.
602         (BuildbotSyncer.prototype._pullRecentBuilds): Method to fetch recent builds from Buildbot 0.9 server.
603         (BuildbotSyncer.prototype.pathForRecentBuilds): URL for fetching recent builds from Buildbot 0.9 server.
604         (BuildbotSyncer.prototype.pathForBuildJSONDeprecated): Renamed from pathForBuildJSON.
605         * unit-tests/buildbot-syncer-tests.js:
606         (_pullRecentBuilds.it): unit-test - should not fetch recent builds when count is zero.
607         (_pullRecentBuilds.it): unit-test - should pull the right number of recent builds.
608         (_pullRecentBuilds.it): unit-test - should handle unexpected error while fetching recent builds.
609         (_pullRecentBuilds.it): unit-test - should create BuildbotBuildEntry after fetching recent builds.
610
611 2018-02-01  Aakash Jain  <aakash_jain@apple.com>
612
613         Create BuildbotBuildEntry in Buildbot syncer in Buildbot 0.9 format
614         https://bugs.webkit.org/show_bug.cgi?id=182036
615
616         Reviewed by Ryosuke Niwa.
617
618         * tools/js/buildbot-syncer.js:
619         (BuildbotBuildEntry): Class for Buildbot entry in Buildbot 0.9 data format.
620         (BuildbotBuildEntryDeprecated): Renamed from BuildbotBuildEntry, sub-classed from BuildBotEntry. Handles Buildbot 0.8 data format.
621         (BuildbotBuildEntryDeprecated.prototype.url): URL in buildbot 0.8 format.
622         (BuildbotSyncer.prototype.builderID): Added.
623         (BuildbotSyncer.prototype.pathForPendingBuildsJSONDeprecated): Renamed from BuildbotSyncer.prototype.pathForPendingBuildsJSON.
624         (BuildbotSyncer.prototype.pathForPendingBuilds): Path for pending builds in Buildbot 0.9 format.
625         (BuildbotSyncer.prototype.urlForBuildNumberDeprecated): Deprecated. Renamed from urlForBuildNumber.
626         (BuildbotSyncer.prototype.urlForBuildNumber): Updated in Buildbot 0.9 format.
627         (BuildbotSyncer.prototype.urlForPendingBuild): Buildbot 0.9 has individual webpage for pending buildrequests as well. URL to that page.
628         * unit-tests/buildbot-syncer-tests.js: Renamed BuildbotBuildEntry to BuildbotBuildEntryDeprecated.
629         (sampleBuildData): Sample build data. Common method for in-progress and finished build data.
630         (samplePendingBuildData): Sample data for a pending build. Separate method so that we can easily create sample data with multiple builds.
631         (sampleInProgressBuildData): Ditto for in-progress build.
632         (sampleFinishedBuildData): Ditto for finished build.
633         (samplePendingBuild): Sample data for single pending build.
634         (sampleInProgressBuild): Ditto for in-progress build.
635         (sampleFinishedBuild): Ditto for finished build.
636         (samplePendingBuildDeprecated): Renamed from samplePendingBuild.
637         (sampleInProgressBuildDeprecated): Renamed from sampleInProgressBuild.
638         (sampleFinishedBuildDeprecated): Renamed from sampleFinishedBuild.
639         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for pending build.
640         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for in-progress build.
641         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for finished build.
642         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for mix of in-progress and finished build.
643
644 2018-01-31  Dewei Zhu  <dewei_zhu@apple.com>
645
646         Should chose the best match during 'route' if there are multiple matches.
647         https://bugs.webkit.org/show_bug.cgi?id=182326
648
649         Reviewed by Ryosuke Niwa.
650
651         r227749 made a change that 'analysisCategoryPage' will be added before 'analysisTaskPage'.
652         As route names for both pages starts with 'analysis', whichever added first will be chosen.
653         For a route like 'analysis/task/1'. As a result, 'analysisCategoryPage' will be chosen and
654         this is not expected behavior. Adding the logic on the cases when route name does not extact
655         match the route name, always choose the longest mathcing route name.
656
657         Also modernized the code of 'page-router.js' to use const & let instead of var.
658
659         Added a browser test to guard against this bug.
660
661         * browser-tests/index.html: Import 'page-router-tests.js'.
662         * browser-tests/page-router-tests.js: Added unit test to guard against this bug.
663         * public/v3/pages/page-router.js:
664         (PageRouter.prototype.route): Added logic to find best matching in the case of inexact match.
665         (PageRouter.prototype.pageDidOpen):
666         (PageRouter.prototype._updateURLState):
667         (PageRouter.prototype._serializeToHash):
668         (PageRouter.prototype._deserializeFromHash):
669         (PageRouter.prototype._serializeHashQueryValue):
670         (PageRouter.prototype._deserializeHashQueryValue):
671         (PageRouter.prototype._countOccurrences):
672         (PageRouter):
673
674 2018-01-29  Dewei Zhu  <dewei_zhu@apple.com>
675
676         Should fetch owner commits in build-requests-fetcher.
677         https://bugs.webkit.org/show_bug.cgi?id=182266
678
679         Reviewed by Ryosuke Niwa.
680
681         In a build request, owner commit of a commit is not always one of a commit in the commit set.
682         Build request api should contain owner commits in the 'commits' field of the return value.
683
684         * public/include/build-requests-fetcher.php: Added logic to fetch owner commits and added them into 'commits'.
685         * server-tests/api-build-requests-tests.js: Added a unit test.
686         * server-tests/resources/mock-data.js:
687         (MockData.set addTestGroupWithOwnerCommitNotInCommitSet): Added a test group with a build request, the commit set of which does
688         not contain owner commit of one commit.
689
690 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
691
692         Add the support for reporting Speedometer 2.0 results to perf dashboard
693         https://bugs.webkit.org/show_bug.cgi?id=182089
694         <rdar://problem/36172346>
695
696         Rubber-stamped by Chris Dumez.
697
698         Apparently, this has always worked since the very first version of the perf dashboard added in r163688.
699         The relevant code is at the line 313 of report-processor.php now.
700
701         Added regression tests for this feature since we didn't have any tests four years ago.
702
703         * server-tests/api-report-tests.js:
704
705 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
706
707         REGRESSION(r225898): The perf dashboard fails to open when there are no summary pages
708         https://bugs.webkit.org/show_bug.cgi?id=182210
709
710         Rubber-stamped by Chris Dumez.
711
712         The bug was caused by TestFreshnessPage unconditionally assuming that summaryPageConfiguration is set.
713         Fixed it by not creating TestFreshnessPage when there are no summary pages specified.
714
715         Also modernized the code to use const & let instead of var.
716
717         * public/v3/main.js:
718         (main):
719
720 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
721
722         Perf dashboard's page title can be set to a previously visited page
723         https://bugs.webkit.org/show_bug.cgi?id=182209
724
725         Rubber-stamped by Chris Dumez.
726
727         Before this patch, opening a page and navigating away from it could result in the page title
728         getting set to that of the previously visited page after the new page had been opened.
729
730         This bug was caused by Page.render keep setting document.title even though the page is no longer
731         the currently open page of the router. Fixed it by exiting early in Page.enqueueToRender when
732         this page is not the currently open page of the router.
733
734         Also added basic tests for Page.
735
736         * browser-tests/index.html:
737         * browser-tests/page-tests.js: Added.
738         * public/v3/pages/page.js:
739         (Page): Removed the unused second constructor argument.
740         (Page.prototype.enqueueToRender): Fixed the bug.
741         (Page.prototype.render): Use const instead of var.
742
743 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
744
745         CommitLogViewer should not fetch commits in serial
746         https://bugs.webkit.org/show_bug.cgi?id=182207
747
748         Rubber-stamped by Chris Dumez.
749
750         Fetch both the commits in the range as well as the preceding commit at once instead of
751         fetching the preceding commit only after the commits in the range had been fetched.
752
753         * browser-tests/commit-log-viewer-tests.js: Fixed the tcoest case after r224227.
754         * public/v3/components/commit-log-viewer.js:
755         (CommitLogViewer.prototype._fetchCommitLogs): Fetch commits in parallel.
756
757 2018-01-24  Dewei Zhu  <dewei_zhu@apple.com>
758
759         Check existence of 'node_modules_dir' before creating it.
760         https://bugs.webkit.org/show_bug.cgi?id=182040
761
762         Reviewed by Aakash Jain.
763
764         Fix the bug introduced in r227395.
765
766         * tools/run-tests.py: Added directory existence check.
767
768 2018-01-22  Dewei Zhu  <dewei_zhu@apple.com>
769
770         Fix the bug that 'TestGroupResultsViewer' creates unnecessary rows.
771         https://bugs.webkit.org/show_bug.cgi?id=181967
772
773         Reviewed by Ryosuke Niwa.
774
775         Fixed a bug caused by a typo in CommitSet.equals, which makes it returns incorrect results for most
776         comparison between a CommitSet and a MeasurementCommitSet.
777
778         MeasurementCommitSet does not have full information for the commits, thus, it cannot build mappings
779         between root/patch/owner commit/requires build to repository. When querying whether a given repository
780         needs to be built, MeasurementCommitSet will return undefined. Due to 'undefined != false', this
781         equality check will fail. Making 'CommitSet.requiresBuildForRepository' defaults to 'false' would fix
782         this bug.
783
784         * public/v3/models/commit-set.js:
785         (CommitSet.prototype.requiresBuildForRepository): Make it return false when key does not exist
786         instead of 'undefined'.
787         (CommitSet.prototype.equals): Fixed the typo that causes the bug.
788         Use wrapped functions instead of querying the mapping directly.
789         * unit-tests/commit-set-tests.js: Added unit tests.
790
791 2018-01-18  Dewei Zhu  <dewei_zhu@apple.com>
792
793         'run-test.py' script should make sure 'node_modules' directory exists before installing node packages.
794         https://bugs.webkit.org/show_bug.cgi?id=181808
795
796         Reviewed by Ryosuke Niwa.
797
798         'run-test.py' will fail if 'node_modules' does not exist before running this script.
799         Instead of calling 'os.chdir' to change directory, use 'cwd' in subprocess instead.
800
801         * tools/run-tests.py: Added the logic to ensure 'node_modules' exists.
802         Also use 'cwd' in subprocess.call instead of calling 'os.chdir' ahead.
803
804 2018-01-20  Dewei Zhu  <dewei_zhu@apple.com>
805
806         Extend 'ifBuilt' config key to set property based on whether certain repositories are built or not.
807         https://bugs.webkit.org/show_bug.cgi?id=181906
808
809         Reviewed by Ryosuke Niwa.
810
811         Before this change, 'ifBuilt' will always set specified property for test properties as long as there
812         is a build type build in the same build request group. However, this is no longer valid as we don't
813         want to set specified property for testing when only owned commit is built in previous build.
814         'ifBuilt' needs to conditionally set property based on whether certain required repositories are built.
815         Empty required repository list means no requirement on repository to set property.
816
817         * tools/js/buildbot-syncer.js:
818         (BuildbotSyncer.prototype._propertiesForBuildRequest):In the case of 'built', only set property when
819         repository requirment is meet and there is a 'build' root request in the same build request group.
820         (BuildbotSyncer._parseRepositoryGroup): Extend 'ifBuild' to pass information based on contition.
821         * unit-tests/buildbot-syncer-tests.js: Added unit tests.
822
823 2018-01-19  Dewei Zhu  <dewei_zhu@apple.com>
824
825         Should reject updating a build request which has an associated build.
826         https://bugs.webkit.org/show_bug.cgi?id=181893
827
828         Reviewed by Ryosuke Niwa.
829
830         Current code does not prevent submitting to same build request multiple times.
831         This could lead to a build losing its associated build request.
832         As a result, this build will be visible in charts which is not right.
833         Added a check when a build request is reported.
834         Addressed a 'FIXME' for the race condition inside ReportProcessor->resolve_build_id by surrounding
835         it with a database transaction.
836
837         * public/include/report-processor.php:
838         Wrap adding platform and resolve_build_id with a database transaction.
839         Add a check to make sure only a build request has no associated build can be updated.
840         * server-tests/api-report-tests.js: Added unit tests accordingly.
841
842 2018-01-18  Dewei Zhu  <dewei_zhu@apple.com>
843
844         Should allow updating a build-request to 'canceled'.
845         https://bugs.webkit.org/show_bug.cgi?id=181819
846
847         Reviewed by Ryosuke Niwa.
848
849         It's possible syncing script update a build-request to 'canceled' state.
850
851         * public/api/build-requests.php: Added 'canceled' as an acceptable update state.
852         * server-tests/api-build-requests-tests.js: Added a unit test to update a build-request to 'canceled'.
853
854 2018-01-18  Aakash Jain  <aakash_jain@apple.com>
855
856         Add support for builderNameToIDMap in BuildbotSyncer
857         https://bugs.webkit.org/show_bug.cgi?id=176526
858
859         Reviewed by Ryosuke Niwa.
860
861         * tools/js/buildbot-syncer.js:
862         (BuildbotSyncer._loadConfig): Added builderNameToIDMap parameter. It would be used later on.
863         (BuildbotSyncer._resolveBuildersWithPlatforms): Ditto.
864         (BuildbotSyncer._validateAndMergeConfig): Added builderID as a valid config parameter.
865         * tools/js/buildbot-triggerable.js:
866         (BuildbotTriggerable.prototype.getBuilderNameToIDMap): Method to fetch BuilderNameToIDMap from Buildbot 0.9.
867         (BuildbotTriggerable.prototype.getBuilderNameToIDMapDeprecated): Method to fetch BuilderNameToIDMap from Buildbot 0.8.
868         (BuildbotTriggerable.prototype.initSyncers): Updated to use getBuilderNameToIDMap.
869         * unit-tests/buildbot-syncer-tests.js: Updated unit-tests.
870         * server-tests/resources/mock-data.js:
871         (MockData.buildbotBuildersURLDeprecated): URL for fetching Builders list.
872         (MockData.buildbotBuildersURL): Ditto for Buildbot 0.9
873         (MockData.mockBuildbotBuildersDeprecated): Sample builders data for Buildbot 0.8
874         (MockData.mockBuildbotBuilders): Ditto for Buildbot 0.9
875         * server-tests/tools-buildbot-triggerable-tests.js: Added test for getBuilderNameToIDMap. Updated tests to handle
876         newly added promise for fetching builders list from Buildbot.
877         * server-tests/tools-sync-buildbot-integration-tests.js: Ditto.
878
879 2018-01-18  Ryosuke Niwa  <rniwa@webkit.org>
880
881         Charts can be empty when values are all identical
882         https://bugs.webkit.org/show_bug.cgi?id=181828
883
884         Reviewed by Alexey Proskuryakov.
885
886         Fixed the bug that when SampleVarianceUpperTriangularMatrix can store -Infinity as the initial cost
887         of some entries when the sample standard deviation between two points turns out to be 0,
888         and cause splitIntoSegmentsUntilGoodEnough to return undefiend because no segmentation has a finite cost.
889
890         Also fixed the bug that the time series chart fails to show any data points when all data points have
891         identical values as the entire y-coordinate gets collapsed to an empty value range by adjusting the max value
892         when min & max values are identical.
893
894         * public/v3/components/time-series-chart.js:
895         (TimeSeriesChart.prototype._ensureValueRangeCache): Raise the max slightly when min & max are identical
896         to avoid the chart becoming empty. Otherwise valueDiff in _computeVerticalRenderingMetrics becomes 0
897         and value-to-y-coordinate conversion always results in NaN.
898         * public/shared/statistics.js:
899         (Statistics..SampleVarianceUpperTriangularMatrix):
900         * unit-tests/statistics-tests.js: Added a test case.
901
902 2018-01-18  Ryosuke Niwa  <rniwa@webkit.org>
903
904         Don't fetch more than two builds to check duplicity of builds in ReportProcessor
905         https://bugs.webkit.org/show_bug.cgi?id=181786
906
907         Reviewed by Wenson Hsieh.
908
909         Limit the number of builds to check to avoid using a lot of memory with a long delay.
910
911         * public/include/report-processor.php:
912         (ReportProcessor::resolve_build_id): 
913
914 2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>
915
916         Rename config.json to config.json.sample
917         https://bugs.webkit.org/show_bug.cgi?id=181785
918
919         Reviewed by Wenson Hsieh.
920
921         * .gitignore: Added config.json.
922         * ReadMe.md: Updated the instruction.
923         * config.json.sample: Renamed from config.json.
924
925 2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>
926
927         Unreviewed build fixes in TestGroupResultsViewer.
928
929         * public/v3/components/test-group-results-viewer.js:
930         (TestGroupResultsViewer.prototype.render): _renderCurrentMetricsLazily was never called.
931         (TestGroupResultsViewer.prototype._buildRowForMetric): Don't try to render null or NaN.
932
933 2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>
934
935         Fix perf dashboard tests for node v8
936         https://bugs.webkit.org/show_bug.cgi?id=181782
937
938         Reviewed by Wenson Hsieh.
939
940         Fixed the various tests for node.js v8, which is the latest LTS version.
941
942         * server-tests/api-manifest-tests.js: Replaced the missing Triggerable.acceptsTest by Triggerable.acceptedTests
943         after r226836.
944         * server-tests/api-measurement-set-tests.js: Added "Z" to the end timestamps to force UTF timezone now that Date
945         in node.js parses using the local timezone by default.
946         * server-tests/resources/test-server.js:
947         (TestServer.prototype._restoreDataDirectory): Fixed the bug that this function was erroneously using the async
948         function to rename a directory per new warnings. This code was racy, and it used to cause a test error occasionally.
949         * server-tests/tools-os-build-fetcher-tests.js: Fixed the assertions to make it work in the latest node.js.
950         * unit-tests/measurement-set-tests.js:
951         (waitForMeasurementSet): Wait for setTimeout to cycle through all microtasks instead of just two microtask cycles.
952
953 2018-01-11  Ryosuke Niwa  <rniwa@webkit.org>
954
955         Cannot trigger Dromaeo tests on internal perf try bots
956         https://bugs.webkit.org/show_bug.cgi?id=179712
957
958         Reviewed by Chris Dumez.
959
960         The bug was caused by CustomAnalysisTaskConfigurator only showing the top-level tests that are triggerable
961         instead of the list of highest level tests that are triggerable.
962
963         * public/v3/components/custom-analysis-task-configurator.js:
964         (CustomAnalysisTaskConfigurator.prototype.selectTests): Update the test group name when a new test is picked.
965         (CustomAnalysisTaskConfigurator.prototype.selectPlatform):
966         (CustomAnalysisTaskConfigurator.prototype._didUpdateSelectedPlatforms): Extracted from selectPlatform.
967         (CustomAnalysisTaskConfigurator.prototype._renderTriggerableTests): Include the list of all highest-level tests
968         which are triggerable.
969         (CustomAnalysisTaskConfigurator.prototype._renderRadioButtonList): Added labelForObject which returns the label
970         to be used in the list items. For tests, we want to use the full name, not just its label.
971         * public/v3/models/analysis-task.js:
972         (AnalysisTask.fetchById):
973         * public/v3/models/triggerable.js:
974         (Triggerable.prototype.acceptedTests): Added.
975         (Triggerable.prototype.acceptsTest): Deleted.
976
977 == Rolled over to ChangeLog-2018-01-01 ==