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