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