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