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