3b19641aa089c67ea32f06b974eab79d035eb491
[WebKit.git] / Websites / perf.webkit.org / ChangeLog
1 2019-10-04  Zhifei Fang  <zhifei_fang@apple.com>
2
3         [perf dashboard] Test fressness popover sometimes point to wrong place
4         https://bugs.webkit.org/show_bug.cgi?id=202606
5
6         Reviewed by Ryosuke Niwa.
7
8         * public/v3/pages/test-freshness-page.js: Use a invisable tooltip anchor to cacluate tooltip position. It also helps to get rid of caculation for determine the tooltip table position. 
9         (TestFreshnessPage.prototype._renderTooltip):
10         (TestFreshnessPage.cssTemplate):
11
12 2019-10-04  Zhifei Fang  <zhifei_fang@apple.com>
13
14         [perf dashboard] Make test fressness head and indicator perfect centered
15         https://bugs.webkit.org/show_bug.cgi?id=202602
16
17         Reviewed by Ryosuke Niwa.
18
19         * public/v3/components/freshness-indicator.js: make indicator margin auto, it will then horizontally centered in the container
20         (FreshnessIndicator.cssTemplate):
21         (FreshnessIndicator):
22         * public/v3/pages/test-freshness-page.js: make the table head transform based on the center left
23         (TestFreshnessPage.cssTemplate):
24
25 2019-10-02  Dewei Zhu  <dewei_zhu@apple.com>
26
27         Fix a bug that warning icon causes infinite rendering when it has warning message.
28         https://bugs.webkit.org/show_bug.cgi?id=202502
29
30         Reviewed by Ryosuke Niwa.
31
32         Fix the problem that a warning icon with a warning message will result in infinite rendering.
33
34         * public/v3/components/button-base.js:
35         (ButtonBase):
36         (ButtonBase.prototype.setButtonTitle): Fixed a typo in function name and moved the title update to
37         render function.
38         (ButtonBase.prototype.render): Added the logic to render title.
39         * public/v3/components/test-group-revision-table.js: Set warning message by invoking setButtonTitle.
40         * public/v3/components/warning-icon.js: Removed the warning messge related code and leave the responsibility
41         to ButtonBase.
42         (WarningIcon):
43         (WarningIcon.prototype.render):
44
45 2019-07-30  Dewei Zhu  <dewei_zhu@apple.com>
46
47         Provide build request status description information on dashboard.
48         https://bugs.webkit.org/show_bug.cgi?id=199810
49
50         Reviewed by Ryosuke Niwa.
51
52         Add build request status description to show detailed information for a build and show it in dashboard.
53         Update SQL for existing instance:
54             ALTER TABLE build_requests ADD COLUMN IF NOT EXISTS request_status_description varchar(1024) DEFAULT NULL;
55
56         * ReadMe.md: Updated instructions for initializing a database to include running 'migrate-database.sql'.
57         * init-database.sql: Added request_status_description column.
58         * migrate-database.sql: A file stores migration SQL for existing instance.
59         * public/api/build-requests.php: Added support for updating request_status_description.
60         * public/include/build-requests-fetcher.php: Exposed `statusDescription` to API.
61         * public/v3/components/test-group-revision-table.js: Added UI for showing build request status detail.
62         (TestGroupRevisionTable.prototype._renderTable):
63         (TestGroupRevisionTable.prototype._buildDescriptionCell):
64         (TestGroupRevisionTable.cssTemplate):
65         * public/v3/components/warning-icon.js: Extended warning icon to be able to customize information on hover.
66         (WarningIcon):
67         (WarningIcon.prototype.render):
68         * public/v3/components/button-base.js: Added a instance method to set button title.
69         (ButtonBase.prototype.setButtonTitle):
70         * public/v3/models/build-request.js: Added 'statusDescription' field.
71         (BuildRequest):
72         (BuildRequest.prototype.updateSingleton):
73         (BuildRequest.prototype.statusDescription):
74         * server-tests/api-build-requests-tests.js: Fixed unit tests.
75         * server-tests/resources/mock-data.js:
76         (MockData.set mockTestSyncConfigWithSingleBuilder): Added 'status_description' in buildbot mock data.
77         (MockData.sampleBuildData):
78         * server-tests/resources/test-server.js:
79         (TestServer.prototype.initDatabase): Added code to execute 'migrate-database.sql' on initialization.
80         * server-tests/tools-sync-buildbot-integration-tests.js: Added unit tests.
81         * tools/js/buildbot-syncer.js: Added 'statusDescription' field to 'BuildbotBuildEntry'.
82         (BuildbotBuildEntry.prototype.initialize):
83         (BuildbotBuildEntry.prototype.statusDescription):
84         * tools/js/buildbot-triggerable.js:
85         (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers):
86         * unit-tests/buildbot-syncer-tests.js: Added test code for BuildbotBuildEntry.statusDescription.
87
88 2019-07-26  Dewei Zhu  <dewei_zhu@apple.com>
89
90         Dashboard should defaults to first dashboard page when summary page is not available.
91         https://bugs.webkit.org/show_bug.cgi?id=200180
92
93         Reviewed by Ryosuke Niwa.
94
95         Fix a bug that charts page will become the default when there is no summary page but there
96         is at least one dashboard page.
97
98         * public/v3/main.js: Charts page and analysis category page should not be considered as summay pages.
99         (main):
100
101 2019-07-30  Dewei Zhu  <dewei_zhu@apple.com>
102
103         Analysis task page should show build request author and creation time.
104         https://bugs.webkit.org/show_bug.cgi?id=200274
105
106         Reviewed by Ryosuke Niwa.
107
108         Author and creation time of a build request should be visible in analysis task page.
109
110         * public/v3/pages/analysis-task-page.js: Added UI to show build request creation time and author.
111         (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup):
112
113 2019-07-29  Dewei Zhu  <dewei_zhu@apple.com>
114
115         Should not render latest build information if there is no data points for a config.
116         https://bugs.webkit.org/show_bug.cgi?id=200250
117
118         Reviewed by Ryosuke Niwa.
119
120         Fix a bug test freshness page that tooltip cannot be rendered when a cell does not have
121         a data point.
122
123         * public/v3/pages/test-freshness-page.js: Added a null check on commit set before rendering
124         latest build informaiton.
125         (TestFreshnessPage.prototype._renderTooltip):
126
127 2019-07-25  Dewei Zhu  <dewei_zhu@apple.com>
128
129         Fix a bug that cannot update builder password on builders administrative page.
130         https://bugs.webkit.org/show_bug.cgi?id=200154
131
132         Reviewed by Ryosuke Niwa.
133
134         'builders' administrative page should be able to update password for a builder.
135
136         * public/admin/builders.php: Should be able to update builder password.
137
138 2019-07-23  Dewei Zhu  <dewei_zhu@apple.com>
139
140         Use 12 digits to show a git commit.
141         https://bugs.webkit.org/show_bug.cgi?id=200067
142
143         Reviewed by Ryosuke Niwa.
144
145         Use 12 digits to show a git commit to reasonably descrease commit prefix collision probability
146         for repository with large amount of commits.
147
148         * public/v3/models/commit-log.js: Increase digits from 8 to 12 for git SHA.
149         (CommitLog.prototype.label):
150         (CommitLog.prototype.diff):
151         * unit-tests/commit-log-tests.js: Updated unit tests.
152         * unit-tests/commit-set-tests.js: Updated unit tests.
153
154 2019-07-03  Dewei Zhu  <dewei_zhu@apple.com>
155
156         Test freshness page should expose revision information for latest build on tooltip.
157         https://bugs.webkit.org/show_bug.cgi?id=199483
158
159         Reviewed by Ryosuke Niwa.
160
161         Added latest build revision information on test freshness page tooltip.
162
163         * public/v3/pages/test-freshness-page.js: Add build revision information on tooltip.
164         (TestFreshnessPage.prototype.didConstructShadowTree):
165         (TestFreshnessPage.prototype._fetchTestResults):
166         (TestFreshnessPage.prototype.render):
167         (TestFreshnessPage.prototype._renderTooltip):
168         (TestFreshnessPage.cssTemplate):
169
170 2019-06-26  Dewei Zhu  <dewei_zhu@apple.com>
171
172         commit api should not return 'AmbiguousRevisionPrefix' if there is an exact revision match
173         https://bugs.webkit.org/show_bug.cgi?id=199227
174
175         Reviewed by Ryosuke Niwa.
176
177         When prefix match is specified, api should check whether there is an exact match when multiple commits
178         match the prefix.
179
180         * public/include/commit-log-fetcher.php: Added the logic to check if there is an exact match when multiple matches are found.
181         * server-tests/api-commits-tests.js: Added an unit test.
182
183 2019-06-24  Dean Johnson  <dean_johnson@apple.com>
184
185         [perf.webkit.org] Update summary page calculations to use mean instead of median
186         https://bugs.webkit.org/show_bug.cgi?id=199050
187
188         Reviewed by Dewei Zhu.
189
190         * public/v3/pages/summary-page.js:
191         (SummaryPageConfigurationGroup): Updated 'median' references to 'mean'.
192         (SummaryPageConfigurationGroup.set _startAndEndPointForTimeRange): Factored out logic for finding data
193         points in a timeSeries, within a specified timeRange.
194         (SummaryPageConfigurationGroup.set _meanForTimeRange): New. Returns the mean of a timeSeries across a
195         given timeRange.
196
197 2019-06-20  Dewei Zhu  <dewei_zhu@apple.com>
198
199         Fix a bug that 'test_metrics' and 'tests' tables are not joined correctly in CommitLogFetcher.fetch_latest_for_platform
200         https://bugs.webkit.org/show_bug.cgi?id=199062
201
202         Reviewed by Ryosuke Niwa.
203
204         'test_metrics' and 'tests' should be joined based on 'metric_test' and 'test_id'.
205
206         * public/include/commit-log-fetcher.php: Fix the typo in the query.
207         * server-tests/api-commits-tests.js: Added a unit test for this change.
208
209 2019-06-17  Dewei Zhu  <dewei_zhu@apple.com>
210
211         Customizable test group form should allow user to supply a revision prefix of a commit and revision starts with 'r'.
212         https://bugs.webkit.org/show_bug.cgi?id=198940
213
214         Reviewed by Ryosuke Niwa.
215
216         Customizable test group form should adapt prefix matching when fetching for a commit.
217
218         * browser-tests/customizable-test-group-form-tests.js: Updated and added unit tests.
219         * public/v3/components/customizable-test-group-form.js: Removed loggings those a unintentionally committed.
220         * public/v3/models/commit-set.js: Adapted prefix matching API when fetching a commit.
221         (IntermediateCommitSet.prototype._fetchCommitLogAndOwnedCommits):
222         * unit-tests/commit-set-tests.js: Updated unit tests accordingly.
223
224 2019-06-13  Dewei Zhu  <dewei_zhu@apple.com>
225
226         Custom analysis task configurator should allow supplying commit prefix and revision starts 'r'.
227         https://bugs.webkit.org/show_bug.cgi?id=198847
228
229         Reviewed by Ryosuke Niwa.
230
231         Custom analysis task configurator should not require full SHA to start an A/B test.
232         Custom analysis task configurator should accept svn revision starts with 'r'.
233
234         * browser-tests/custom-analysis-task-configurator-tests.js: Added a unit test for this change.
235         * public/api/commits.php: Extend this API to allow prefix matching when fethcing a single commit.
236         * public/include/commit-log-fetcher.php: Added a function to fetch a commit with prefix.
237         * public/v3/components/custom-analysis-task-configurator.js: Add UI support for accepting partial revision.
238         (CustomAnalysisTaskConfigurator.prototype._computeCommitSet):
239         (CustomAnalysisTaskConfigurator.prototype.async._resolveRevision):
240         (CustomAnalysisTaskConfigurator.prototype._buildTestabilityList):
241         * public/v3/models/commit-log.js:
242         (CommitLog.async.fetchForSingleRevision): Added third argument to specify prefix matching which defaults to false.
243         * server-tests/api-commits-tests.js: Added unit tests.
244         * unit-tests/commit-log-tests.js: Added a unit test.
245
246 2019-05-15  Dewei Zhu  <dewei_zhu@apple.com>
247
248         Perf dashboard erroneously rejects a build request to build owned components when there are no patches.
249         https://bugs.webkit.org/show_bug.cgi?id=197928
250
251         Reviewed by Ryosuke Niwa.
252
253         Fix a bug that build type build request that only builds owned components failed to pass sanity check when there
254         is no repository accepts patch in triggerable repository group.
255         Add a sanity check to throw an error when build request type is build but there is no repository group template.
256
257         * tools/js/buildbot-syncer.js:
258         (BuildbotSyncer.prototype._propertiesForBuildRequest): Changed sanity check the always requires repository accepts patch when there is a build to make it also works for build request only builds owned components.
259         (BuildbotSyncer._parseRepositoryGroup): Added check for repository group templates not null  when build requiest type is build.
260         * unit-tests/buildbot-syncer-tests.js: Added unit tests for this change.
261         * unit-tests/resources/mock-v3-models.js: Added mock date for unit tests.
262
263 2019-05-14  Dewei Zhu  <dewei_zhu@apple.com>
264
265         Pruning old file logic should not stop after removing 10 files if there are more files to be removed.
266         https://bugs.webkit.org/show_bug.cgi?id=197870
267
268         Reviewed by Ryosuke Niwa.
269
270         Pruning old file logic should keep removing removable files to make enough space for a new file upload.
271         It should only attempt to remve the files that have not been removed.
272
273         * public/include/uploaded-file-helpers.php: Modified 'prune_old_files' to allow to remove more than 10 files.
274         Fixed a bug that a removed file keep getting removed but never free up new space.
275         * server-tests/privileged-api-upload-file-tests.js:
276         (makeRandomAlnumStringForLength): Helper function to generate random content for a given length.
277         * server-tests/resources/test-server.js: Update total file size limit for this change.
278         (TestServer.prototype.testConfig):
279
280 2019-03-25  Dewei Zhu  <dewei_zhu@apple.com>
281
282         Primary cluster of measurement set should always contain latest point.
283         https://bugs.webkit.org/show_bug.cgi?id=196243
284
285         Reviewed by Ryosuke Niwa.
286
287         Fix a bug in measurement-set api that primary cluster may not contain latest data point as
288         'carry_over' row may not be updated.
289
290         * public/api/measurement-set.php: Should always keep 'carry_over' data points up to date.
291         * server-tests/api-measurement-set-tests.js: Added an unit test for this change.
292         Fixed a typo.
293
294 2019-03-21  Dewei Zhu  <dewei_zhu@apple.com>
295
296         'custom-configuration-test-group-form' should update test name when selected test or platform changes.
297         https://bugs.webkit.org/show_bug.cgi?id=196114
298
299         Reviewed by Ryosuke Niwa.
300
301         r240104 fixes commit sets unnecessarily get updated even there is no change.
302         However, this made changing test or platform no longer triggers 'commitSetChange' action.
303         Test name should change not only when 'commitSet' gets change, but also platform or test changes.
304         Renaming the action name from 'commitSetChange' to a more accurate description 'testConfigChange'.
305         Dispatch 'testConfigChange' when platform or test changes.
306
307         * browser-tests/custom-analysis-task-configurator-tests.js: Changed action name to 'commitSetChange'.
308         * public/v3/components/custom-analysis-task-configurator.js:
309         (CustomAnalysisTaskConfigurator.prototype._didUpdateSelectedPlatforms): Should dispatch 'commitSetChange' action.
310         (CustomAnalysisTaskConfigurator.prototype._updateCommitSetMap): Changed action name to 'commitSetChange'.
311         * public/v3/components/custom-configuration-test-group-form.js: Added a unit test for this change.
312         (CustomConfigurationTestGroupForm.prototype.didConstructShadowTree):
313
314 2019-03-18  Dewei Zhu  <dewei_zhu@apple.com>
315
316         Fix a bug from r226303 that latest build time is not correctly calculated.
317         https://bugs.webkit.org/show_bug.cgi?id=195912
318
319         Reviewed by Ryosuke Niwa.
320
321         Time series is ordered by revision time which does not grantee the build time is
322         monotonically increasing.
323
324         * public/v3/pages/test-freshness-page.js: Use the latest build time instead of the build time of
325         last point on the chart.
326
327 2019-03-13  Dewei Zhu  <dewei_zhu@apple.com>
328
329         Test freshness page should improve the ability to correlating issues from same builder.
330         https://bugs.webkit.org/show_bug.cgi?id=195242
331
332         Reviewed by Ryosuke Niwa.
333
334         Added the ability to highlight indicators with same builder when mouse is hovering over one indicator.
335         This is a very useful visualization for correlating issues specific to a builder.
336         Added tooltip with latest build link when hovering over an indicator.
337
338         * public/v3/components/freshness-indicator.js:
339         (FreshnessIndicator): Removed 'summary' field as it's no longer needed.
340         Added 'highlighted' field.
341         (FreshnessIndicator.prototype.update): Added 'highlighted' argument.
342         (FreshnessIndicator.prototype.didConstructShadowTree): Make indicator to dispatch mouse enter and leave
343         messages so that UI can highlight corresponding cells.
344         (FreshnessIndicator.prototype.render):
345         (FreshnessIndicator.cssTemplate):
346         * public/v3/pages/test-freshness-page.js: Added tooltip to show latest build time and build link.
347         Added logic to manually compute table body height.
348         (TestFreshnessPage):
349         (TestFreshnessPage.prototype.didConstructShadowTree):
350         (TestFreshnessPage.prototype._fetchTestResults):
351         (TestFreshnessPage.prototype.render):
352         (TestFreshnessPage.prototype._renderTooltip):
353         (TestFreshnessPage.prototype._constructTableCell):
354         (TestFreshnessPage.cssTemplate):
355
356 2019-02-26  Dewei Zhu  <dewei_zhu@apple.com>
357
358         The table head of test freshness page should not scroll with the page.
359         https://bugs.webkit.org/show_bug.cgi?id=195092
360
361         Reviewed by Ryosuke Niwa.
362
363         Fix the location of the freshness table head to make it easier to corelate cell with test.
364
365         * public/v3/pages/test-freshness-page.js: Changed some style rules to make the table head fixed.
366         (TestFreshnessPage.prototype._renderTable):
367         (TestFreshnessPage.cssTemplate):
368
369 2019-01-17  Dewei Zhu  <dewei_zhu@apple.com>
370
371         Analyzing a chart that does not exist should not halt whole run-analysis script.
372         https://bugs.webkit.org/show_bug.cgi?id=193563
373
374         Reviewed by Ryosuke Niwa.
375
376         Halting whole run-analysis script while there is any invalid chart specified in Manifest makes the script fragile.
377         Run-analysis is also responsible for adding retry and sending notification which should not be block by this error.
378         Skipping analyzing the corresponding configuration seems reasonable.
379
380         * public/v3/models/measurement-set.js:
381         (MeasurementSet.prototype._ensureClusterPromise): Only add callback when callback is specified.
382         This will help to fix 'UnhandledPromiseRejectionWarning' while running the test.
383         * tools/js/measurement-set-analyzer.js:
384         (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet): Catch the exception while failing to fetch a measurement set and skip the analysis for this config.
385         * unit-tests/measurement-set-analyzer-tests.js: Added unit tests for this.
386
387 2019-01-17  Dewei Zhu  <dewei_zhu@apple.com>
388
389         Updating commit in OSBuildFetcher should respect revision range in config.
390         https://bugs.webkit.org/show_bug.cgi?id=193558
391
392         Reviewed by Ryosuke Niwa.
393
394         OSBuildFetcher._fetchAvailableBuilds should filter out commits those are not in
395         revision range specified by cofnig.
396
397         * server-tests/tools-os-build-fetcher-tests.js: Added a unit test for this change.
398         * tools/js/os-build-fetcher.js:
399         (prototype.async._fetchAvailableBuilds): Filter out commits from update list if commit
400         revision is out of range.
401
402 2018-12-31  Dewei Zhu  <dewei_zhu@apple.com>
403
404         Test group results notification should not say a build request to build had failed even when it had successfully completed.
405         https://bugs.webkit.org/show_bug.cgi?id=193064
406
407         Reviewed by Ryosuke Niwa.
408
409         Should show 'Build completed' or 'Build failed' for build type build requests.
410
411         * browser-tests/test-group-result-page-tests.js: Added a unit test to guard this bug.
412         * tools/js/test-group-result-page.js: Show 'Build completed' or 'Build failed' for build type build requests.
413
414 2018-12-21  Dewei Zhu  <dewei_zhu@apple.com>
415
416         Add UI in analysis task page to show commit testability information.
417         https://bugs.webkit.org/show_bug.cgi?id=192972
418
419         Reviewed by Ryosuke Niwa.
420
421         Add UI in custom analysis task configuration and customizable test group form to show testability information.
422         Fix a bug in 'CustomAnalysisTaskConfigurator._updateCommitSetMap' that 'currentComparison' is incorrectly set.
423         SQL to update existing database:
424             ALTER TABLE commits ADD COLUMN IF NOT EXISTS commit_testability varchar(128) DEFAULT NULL;
425
426         * browser-tests/custom-analysis-task-configurator-tests.js: Added a unit test for the bug in
427         'CustomAnalysisTaskConfigurator._updateCommitSetMap'.
428         Added a unit test to make sure 'CustomAnalysisTaskConfigurator' still works when commit fetching never returns.
429         * browser-tests/index.html: Imported ''custom-analysis-task-configurator-tests.js'.
430         * init-database.sql: Increase 'commit_testability' field length from 64 characters to 128.
431         * public/v3/components/custom-analysis-task-configurator.js: Added UI to show testability information.
432         (CustomAnalysisTaskConfigurator):
433         (CustomAnalysisTaskConfigurator.prototype._didUpdateSelectedPlatforms): Should reset related field for corresponding
434         repositories that user does not specify revision.
435         (CustomAnalysisTaskConfigurator.prototype._updateMapFromSpecifiedRevisionsForConfiguration): A helper function
436         to update '_specifiedCommits' and '_invalidRevisionsByConfiguration' per '_specifiedRevisions'.
437         (CustomAnalysisTaskConfigurator.prototype.render):
438         (CustomAnalysisTaskConfigurator.prototype._updateCommitSetMap): Fixed a bug that 'currentComparison' is incorrectly set.
439         (CustomAnalysisTaskConfigurator.prototype._computeCommitSet):
440         (CustomAnalysisTaskConfigurator.prototype.async._fetchCommitsForConfiguration):
441         (CustomAnalysisTaskConfigurator.prototype.async._resolveRevision):
442         (CustomAnalysisTaskConfigurator.prototype._buildRevisionTable):
443         (CustomAnalysisTaskConfigurator.prototype._buildTestabilityList):
444         (CustomAnalysisTaskConfigurator.prototype._selectRepositoryGroup):
445         (CustomAnalysisTaskConfigurator.prototype._buildRevisionInput):
446         (CustomAnalysisTaskConfigurator.cssTemplate):
447         * public/v3/components/customizable-test-group-form.js: Added UI to show testability information.
448         (CustomizableTestGroupForm.prototype._renderCustomRevisionTable):
449         (CustomizableTestGroupForm.prototype._constructTestabilityRows.):
450         (CustomizableTestGroupForm.prototype._constructTestabilityRows):
451         (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):
452         Changing either revision editor or radio button should trigger a re-render as testability
453         information for updated revision may change.
454         (CustomizableTestGroupForm.cssTemplate):
455         * public/v3/models/commit-set.js:
456         (IntermediateCommitSet.prototype.commitsWithTestability): Renamed from 'commitsWithTestabilityWarnings'.
457         (IntermediateCommitSet.prototype.commitsWithTestabilityWarnings): Deleted.
458
459 2018-12-14  Dewei Zhu  <dewei_zhu@apple.com>
460
461         Extend commits table to contain testability information.
462         https://bugs.webkit.org/show_bug.cgi?id=191557
463
464         Reviewed by Ryosuke Niwa.
465
466         Added the ability to store testability message in commits table.
467         Refactored '/api/report-commits' to support updating commit only.
468         Updated os version syncing script to be able to update testability information.
469
470         * init-database.sql: Added 'commit_testability' field to 'commits' table.
471         * public/api/report-commits.php: Refactor this api to allow only update existing commits.
472         * public/include/commit-log-fetcher.php: Expose testability warning information in this API.
473         * public/include/commit-updater.php: Added 'CommitUpdater' to manage commit insert and update.
474         * public/v3/models/commit-log.js: CommitLog object should expose testability warning information.
475         (CommitLog.prototype.updateSingleton):
476         (CommitLog.prototype.testability):
477         * public/v3/models/commit-set.js: Added 'commitsWithTestability' and 'commits' to CommitSet and
478         IntermediateCommitSet instances.
479         (CommitSet.prototype.commitsWithTestability):
480         (CommitSet.prototype.commits):
481         (IntermediateCommitSet.prototype.commitsWithTestability):
482         (IntermediateCommitSet.prototype.commits):
483         * server-tests/api-report-commits-tests.js: Added unit tests for '/api/report-commits' when `insert=false`.
484         * server-tests/tools-os-build-fetcher-tests.js: Added and updated unit tests.
485         * tools/js/os-build-fetcher.js: Added the ability to update commit testability warnings.
486         (async.fetchReportAndUpdateCommits):
487         (prototype.async.fetchReportAndUpdateBuilds):
488         (prototype.async._fetchAvailableBuilds):
489         (prototype.async._commitsForAvailableBuilds):
490         (prototype._commitsWithinRange):
491         (prototype.async._reportCommits):
492         (fetchAndReportAllInOrder): Deleted.
493         (prototype.fetchAndReportNewBuilds): Deleted.
494         (prototype._fetchAvailableBuilds): Deleted.
495         (prototype._commitsForAvailableBuilds): Deleted.
496         (prototype._submitCommits): Deleted.
497         * tools/sync-os-versions.js:
498         * unit-tests/commit-log-tests.js: Added a unit test for 'testability'.
499         * unit-tests/commit-set-tests.js: Added unit tests for 'commitsWithTestability'.
500
501 2018-11-16  Ryosuke Niwa  <rniwa@webkit.org>
502
503         Manifest file can contain a test metric which references a non-existent test
504         https://bugs.webkit.org/show_bug.cgi?id=191796
505
506         Reviewed by Dewei Zhu.
507
508         The bug was caused by a race condition between the manifest file fetching the list of tests and test metrics
509         and new tests and test metrics being added. Because we would fetch tests before test metrics, it was possible
510         for new test metrics which references a test not included in the fetched tests to be present in the test metrics.
511
512         Fixed the bug by changing the order of the queries so that test metrics are fetched before tests. This guarantees
513         that any test referenced by a test metric always exists and thefore included in the manifest file.
514
515         Unfortunately no new tests beucase this involes a race condition.
516
517         * public/include/manifest-generator.php:
518
519 2018-11-13  Dewei Zhu  <dewei_zhu@apple.com>
520
521         Add cache for CommitLog objects to avoid refetching same commit.
522         https://bugs.webkit.org/show_bug.cgi?id=191621
523
524         Reviewed by Ryosuke Niwa.
525
526         Added a cache for fully fetched commit log objects to avoid refetching.
527
528         * public/v3/models/commit-log.js:
529         (CommitLog): Added assertion for id.
530         Removed unused 'remoteId' as it has been removed since r198479.
531         (CommitLog.async.fetchBetweenRevisions): Turned it into async function.
532         (CommitLog.async.fetchForSingleRevision): Added the logic to check cache before fetching.
533         (CommitLog._constructFromRawData): Added logic to add entries to cache.
534         * public/v3/models/repository.js: Added the ability to track fetched commit for certain repository.
535         (Repository.commitForRevision): Fixed measurement set not passing commit id while constructing a
536         commit log object.
537         (Repository.setCommitForRevision): Sets commit for a given revision.
538         * public/v3/models/commit-set.js: Fixed unit tests.
539         * unit-tests/commit-log-tests.js: Added unit tests for this change.
540         Fixed existing tests.
541         * unit-tests/commit-set-range-bisector-tests.js: Fixed unit tests.
542         * unit-tests/commit-set-tests.js: Fixed unit tests.
543
544 2018-11-08  Dewei Zhu  <dewei_zhu@apple.com>
545
546         commit time returned by '/api/measurement-set' should match the one returned by '/api/commits'.
547         https://bugs.webkit.org/show_bug.cgi?id=191457
548
549         Reviewed by Dean Jackson and Ryosuke Niwa.
550
551         Commit time returned by '/api/measurement-set' sometimes is calculated by 'epoch from ..'.
552         This function may return a floating number with 5 or 6 decimal digits due to double precision limitations.
553         However, some commits may be reported with 6 decimal decimal.
554         So the commit time for those commits will sometime be rounded to 5 decimal digits.
555         In order to avoid front end assertion failure in CommitLog, Database::to_js_time need to round to 5 digits.
556
557         * public/include/db.php: Change the behavior to match that of postgres.
558         Added logic to avoid losing precision in php.
559         * server-tests/api-measurement-set-tests.js: Added unit tests for this bug.
560         (queryPlatformAndMetric): Fix a bug that arguments are not used at all.
561
562 2018-11-07  Dewei Zhu  <dewei_zhu@apple.com>
563
564         "/api/report" does not check commit time correctly.
565         https://bugs.webkit.org/show_bug.cgi?id=191351
566
567         Reviewed by Ryosuke Niwa.
568
569         Test result report API does not convert formated time string to timestamp correctly
570         which result in not checking commit time correctly.
571
572         * public/include/report-processor.php: Use 'strtotime' instead of 'floatval'.
573         Accepts the time delta within 1 seconds.
574         * server-tests/api-report-tests.js: Added unit tests.
575         (reportWitMismatchingCommitTime):
576         (reportWithOneSecondCommitTimeDifference):
577
578 2018-11-06  Dewei Zhu  <dewei_zhu@apple.com>
579
580         Custom test group form should use commit set map before customization as the behavior of radio buttons.
581         https://bugs.webkit.org/show_bug.cgi?id=191347
582
583         Reviewed by Ryosuke Niwa.
584
585         The radio button behavior should always set the same revision while editing the revision input.
586         That means we should not use the intermediate commit set map but use the commit set map before
587         "Customize" link is clicked.
588
589         * browser-tests/customizable-test-group-form-tests.js: Added a unit test for this bug.
590         * public/v3/components/customizable-test-group-form.js: Pass uncustomized commit set so that the radio button
591         behavoir preserves.
592         (CustomizableTestGroupForm):
593         (CustomizableTestGroupForm.prototype.setCommitSetMap):
594         (CustomizableTestGroupForm.prototype.didConstructShadowTree):
595         (CustomizableTestGroupForm.prototype.render):
596         (CustomizableTestGroupForm.prototype._renderCustomRevisionTable):
597         (CustomizableTestGroupForm.prototype._constructTableBodyList):
598         (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithoutOwner):
599         (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithOwner):
600         (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):
601
602 2018-11-06  Dewei Zhu  <dewei_zhu@apple.com>
603
604         Customizable test group form should not reset manually edited commit value sometimes.
605         https://bugs.webkit.org/show_bug.cgi?id=190863
606
607         Reviewed by Ryosuke Niwa.
608
609         After changing the radio button and manually editing the commit value, commit value should not be reset
610         while changing the name of the test group.
611         Add the logic to prompt warning when manually typed commit does not exist.
612
613         * browser-tests/customizable-test-group-form-tests.js: Added a unit test for this bug.
614         * browser-tests/index.html:
615         * public/v3/components/customizable-test-group-form.js: Should always update commit set as long as
616         the repository of that row does not have a owner repository.
617         (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithoutOwner):
618         (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithOwner):
619         (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons):
620
621 2018-10-16  Dewei Zhu  <dewei_zhu@apple.com>
622
623         Unreviewed, rolling out r236996.
624
625         Temporarily rollout to fix a manifest generation bug.
626         "lastModified" field for certain platform & metric configurations may be missing.
627
628         Reverted changeset:
629
630         "ManifestGenerator shouldn't need more than 1GB of memory or
631         run for 30 seconds"
632         https://bugs.webkit.org/show_bug.cgi?id=190393
633         https://trac.webkit.org/changeset/236996
634
635 2018-10-12  Ryosuke Niwa  <rniwa@webkit.org>
636
637         Perf dashboard: add a test for aggregating subtests without a matching metric in /api/report
638         https://bugs.webkit.org/show_bug.cgi?id=190544
639
640         Rubber-stamped by Keith Miller and unofficially reviewed by Dewei Zhu.
641
642         Added tests for reporting results to /api/report where a test with aggregated metrics has a subtest
643         without a matching metric type. The aggregation should simply skip such a subtest instead of returning
644         an error or aggregating with a mismatching metric type.
645
646         * server-tests/api-report-tests.js:
647         (.makeReport): Extracted out of a test case.
648
649 2018-10-11  Ryosuke Niwa  <rniwa@webkit.org>
650
651         Build fix after r236956. Use array_get to avoid warnings.
652
653         * public/include/report-processor.php:
654
655 2018-10-09  Dewei Zhu  <dewei_zhu@apple.com>
656
657         Performance dashboard should show added iterations due failed build requests.
658         https://bugs.webkit.org/show_bug.cgi?id=190419
659
660         Reviewed by Ryosuke Niwa.
661
662         Added UI to show added build requests due to previous failed build requests.
663         Updated the retry/bisect button to default to initial repetition count when test group is created.
664
665         * public/v3/pages/analysis-task-page.js: Added a div to show added build requests.
666         Retry and bisect button should default to initial repetion count.
667         (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup):
668         (AnalysisTaskTestGroupPane.cssTemplate):
669
670 2018-10-09  Ryosuke Niwa  <rniwa@webkit.org>
671
672         ManifestGenerator shouldn't need more than 1GB of memory or run for 30 seconds
673         https://bugs.webkit.org/show_bug.cgi?id=190393
674
675         Reviewed by Antti Koivisto and unofficially reviewed by Dewei Zhu.
676
677         This patch reduces the runtime of /api/manifest from 13s to 7s and reduces the memory requirement from
678         1GB to 400MB for the internal dashboard in my local testing.
679
680         The biggest perf win comes from avoid running a complex query over test_configurations to compute
681         the latest modified date across different test configuration types ("current" vs. "baseline").
682         Instead, we now fetch the entire table row by row and compute the latest modified date in memory.
683
684         Also call intval in many more places to avoid generating double quotes, which is a pretty significant
685         proportion of the JSON file size at this point.
686
687         Finally, use references in more places to avoid deep copying of arrays.
688
689         * public/include/manifest-generator.php:
690         (ManifestGenerator::generate): Skip the generation of "dashboard" since it's only used by v1 UI.
691         (ManifestGenerator::tests): Don't copy each row.
692         (ManifestGenerator::metrics): Ditto.
693         (ManifestGenerator::platforms): Implement the aforementioned optimization. Instead of grouping
694         test configurations for a given metric and platform together, fetch them all and do in-memory
695         processing in PHP. Avoid more copying as well.
696         (ManifestGenerator::repositories): Avoid more copying.
697         (ManifestGenerator::bug_trackers): Ditto.
698         (ManifestGenerator::fetch_triggerables): Ditto.
699
700 2018-10-08  Ryosuke Niwa  <rniwa@webkit.org>
701
702         /api/report takes 15+ minutes submitting some test results
703         https://bugs.webkit.org/show_bug.cgi?id=190382
704
705         Rubber-stamped by Alexey Proskuryakov and unofficially reviewed by Dewei Zhu.
706
707         The issue was that recursively_ensure_tests would issue thousands of dependent queries.
708
709         Since most reporting of results would be happening after all the tests and test metrics had been created,
710         simply fetch the list of all tests and test metrics upfront in memory.
711
712         This would slow-down the reporting of other test results but in practice doesn't matter (an extra few seconds
713         of overhead) but for slow reporting, it can significantly reduce the runtime from ~10 minutes to ~10 seconds.
714
715         * public/include/report-processor.php:
716         (ReportProcessor::process): Call fetch_tests before recursively_ensure_tests.
717         (ReportProcessor::fetch_tests): Added. This builds up a mapping of tests based on a parent test ID as well as
718         a mapping of metrics per test based on its name and then its aggregator's name.
719         (ReportProcessor::recursively_ensure_tests): Added. Use the in-memory maps built in fetch_tests when possible.
720         (ReportProcessor::aggregator_list_if_exists): Take a reference instead of passing it by value.
721         (TestRunsGenerator::add_aggregated_metric): Now takes metric ID. The code to add the test metric had been moved
722         to recursively_ensure_tests.
723
724 2018-10-01  Dewei Zhu  <dewei_zhu@apple.com>
725
726         Add retry for test groups with failed build requests.
727         https://bugs.webkit.org/show_bug.cgi?id=190188
728
729         Reviewed by Ryosuke Niwa.
730
731         Added retry logic in run-analysis script.
732         Current retry logic will only be triggered when there is at least one successful build request for each commit set
733         in a test group.
734
735         * init-database.sql: Added 'testgroup_initial_repetition_count' and 'testgroup_may_need_more_requests'.
736         SQL to update existing database:
737         '''
738         BEGIN;
739             ALTER TABLE analysis_test_groups
740                 ADD COLUMN testgroup_initial_repetition_count integer DEFAULT NULL,
741                 ADD COLUMN testgroup_may_need_more_requests boolean DEFAULT FALSE;
742             UPDATE analysis_test_groups SET testgroup_initial_repetition_count = (
743                 SELECT DISTINCT(COUNT(*)) FROM build_requests WHERE request_group = testgroup_id AND request_order >= 0 GROUP BY request_commit_set
744             );
745             ALTER TABLE analysis_test_groups ALTER COLUMN testgroup_initial_repetition_count DROP DEFAULT, ALTER COLUMN testgroup_may_need_more_requests SET NOT NULL;
746         END;
747         '''
748         'testgroup_initial_repetition_count' represents the number of successful build request for each commit set when
749         test group is created.
750         'testgroup_may_need_more_requests' will be set when any build request in test group is set to 'failed'.
751         * public/api/build-requests.php: Added the logic to set 'testgroup_may_need_more_requests'.
752         * public/api/test-groups.php: Updated 'ready-for-notification' to 'ready-for-further-processing' so that it returns finished test
753         groups those either have 'needs_notification' or  'may_need_more_requests' set.
754         * public/include/commit-sets-helpers.php: Set 'initial_repetition_count' to repetition count.
755         * public/privileged-api/update-test-group.php: Added APIs to add build request for a test group and
756         update 'may_need_more_requests' flag.
757         * public/v3/models/test-group.js:
758         (TestGroup): Added '_mayNeedMoreRequests' and '_initialRepetitionCount' field.
759         Refactored code that interacts with '/api/update-test-group'.
760         (TestGroup.prototype.updateSingleton):
761         (TestGroup.prototype.mayNeedMoreRequests):
762         (TestGroup.prototype.initialRepetitionCount):
763         (TestGroup.prototype.async._updateBuildRequest):
764         (TestGroup.prototype.updateName):
765         (TestGroup.prototype.updateHiddenFlag):
766         (TestGroup.prototype.async.didSendNotification):
767         (TestGroup.prototype.async.addMoreBuildRequests):
768         (TestGroup.prototype.async.clearMayNeedMoreBuildRequests): Added API to clear 'may_need_more_requests' flag.
769         (TestGroup.fetchAllReadyForFurtherProcessing): Refactored 'TestGroup.fetchAllWithNotificationReady' to return test groups either
770         have 'needs_notification' or  'may_need_more_requests' set.
771         (TestGroup.fetchAllThatMayNeedMoreRequests): Fetches test groups those may need more build requests.
772         * server-tests/api-test-groups.js: Added unit tests.
773         * server-tests/privileged-api-add-build-requests-tests.js: Added unit tests for 'add-build-requests' API.
774         * server-tests/privileged-api-update-test-group-tests.js: Added unit tests.
775         * server-tests/resources/mock-data.js:
776         (MockData.addMockData):
777         * server-tests/resources/test-server.js:
778         (TestServer.prototype._determinePgsqlDirectory): Fixed a bug that 'childProcess.execFileSync' may return a buffer.
779         * tools/run-analysis.js: Added logic to add extra build request before sennding notification.
780         * tools/js/retry-failed-build-requests.js:
781         (async.createAdditionalBuildRequestsForTestGroupsWithFailedRequests): Module that add extra build requests.
782         * unit-tests/retry-failed-build-requests-tests.js: Added.
783         * unit-tests/test-groups-tests.js: Added unit tests.
784
785 2018-09-21  Dewei Zhu  <dewei_zhu@apple.com>
786
787         Apache can return a corrupt manifest file while ManifestGenerator::store is running
788         https://bugs.webkit.org/show_bug.cgi?id=189822
789
790         Reviewed by Ryosuke Niwa.
791
792         Updating a file on performance dashboard should be transactional between php and apache.
793         Otherwise, partial content may be served.
794
795         * public/api/measurement-set.php: Adapted invocation of 'generate_json_date_with_elapsed_time_if_needed'.
796         * public/api/runs.php: Adapted invocation of 'generate_json_date_with_elapsed_time_if_needed'.
797         * public/include/db.php: Make creating file transactionaly by taking advantage of
798         'move/rename' operation is atomic in OS.
799         Added logic to avoid overwriting file if all content except specified filed are identical.
800         * public/include/json-header.php: Added a helper function that added 'status' but does not
801         convert content to json.
802         * public/include/manifest-generator.php: Adapted invocation of 'generate_json_date_with_elapsed_time_if_needed'.
803         * public/shared/statistics.js: Removed unnecessary logging.
804         (Statistics.new.sampleMeanAndVarianceFromMultipleSamples):
805         * server-tests/api-manifest-tests.js: Updated one unit test.
806
807 2018-08-22  Dewei Zhu  <dewei_zhu@apple.com>
808
809         Show t-test results based on individual measurements to analysis task page.
810         https://bugs.webkit.org/show_bug.cgi?id=188425
811
812         Reviewed by Ryosuke Niwa.
813
814         Added comparison for individual iterations in analysis task page.
815         Added comparison for individual iterations for notification on A/B tests completion.
816         Refactored t-distribution inverse lookup to any degree of freedom with 5 significant figures.
817
818         * public/shared/statistics.js: Refactored t-distribution inverse lookup function and adapted this
819         change to all invocations.
820         (Statistics.new.this.supportedConfidenceIntervalProbabilities):
821         (Statistics.new.this.supportedOneSideTTestProbabilities):
822         (Statistics.new.this.confidenceIntervalDelta):
823         (Statistics.new.sampleMeanAndVarianceForMultipleSamples):
824         (Statistics.new.this.probabilityRangeForWelchsT):
825         (Statistics.new.this.probabilityRangeForWelchsTFromTwoSampleSets):
826         (Statistics.new.this._determinetwoSidedProbabilityBoundaryForWelchsT):
827         (Statistics.new.this.computeWelchsT):
828         (Statistics.new.this._computeWelchsTFromStatistics):
829         (Statistics.new.this.minimumTForOneSidedProbability): Function that does t-distribution inverse lookup.
830         * public/v3/components/analysis-results-viewer.js: Adapted TestGroup.compareTestResults change.
831         (AnalysisResultsViewer.TestGroupStackingBlock.prototype._measurementsForCommitSet):
832         (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus):
833         (AnalysisResultsViewer.TestGroupStackingBlock.prototype._valuesForCommitSet): Deleted.
834         * public/v3/components/test-group-results-viewer.js: Show both comparisions for both individual and mean.
835         (TestGroupResultsViewer.prototype._renderResultsTable):
836         (TestGroupResultsViewer.prototype._buildRowForMetric.):
837         (TestGroupResultsViewer.prototype._buildValueMap):
838         * public/v3/models/test-group.js:
839         (TestGroup.compareTestResults): Added comparison for individual iterations.
840         * tools/js/test-group-result-page.js:
841         (TestGroupResultPage.prototype._constructTableForMetric):
842         (TestGroupResultPage.prototype.get styleTemplate):
843         (TestGroupResultPage):
844         (TestGroupResultPage.prototype._URLForAnalysisTask): Renamed to '_resultsForTestGroup'
845         * unit-tests/statistics-tests.js: Updated and added unit tests.
846
847 2018-07-13  Dewei Zhu  <dewei_zhu@apple.com>
848
849         CustomConfigurationTestGroupForm should dispatch different arguments based on whether analysis task is created.
850         https://bugs.webkit.org/show_bug.cgi?id=187675
851
852         Reviewed by Ryosuke Niwa.
853
854         This change will fix the bug that no notification will be sent for any test groups except the
855         first one in any custom perf-try A/B task.
856
857         * public/v3/components/custom-configuration-test-group-form.js:
858         (CustomConfigurationTestGroupForm.prototype.startTesting): Conditionally includes taskName based on
859         whether or not analysis task is created.
860
861 2018-07-03  Dewei Zhu  <dewei_zhu@apple.com>
862
863         MeasurementSet should merge last four segments into two if values are identical.
864         https://bugs.webkit.org/show_bug.cgi?id=187311
865
866         Reviewed by Ryosuke Niwa.
867
868         If last four segments has the same value, MeasurmentSet should merge them.
869
870         * public/v3/models/measurement-set.js: Added the logic to conditionally merge last segments.
871         (MeasurementSet.prototype.fetchSegmentation):
872         * unit-tests/measurement-set-tests.js: Added a unit test for this change.
873
874 2018-06-29  Dewei Zhu  <dewei_zhu@apple.com>
875
876         Manifest.reset should clear static map for BugTracker and Bug objects.
877         https://bugs.webkit.org/show_bug.cgi?id=187186
878
879         Reviewed by Ryosuke Niwa.
880
881         If static maps of BugTracker and Bug objects are not cleared up, updating singleton
882         of Bug object will fail assertion.
883
884         * public/v3/models/manifest.js: Clear static map for BugTracker and Bug.
885         (Manifest.reset):
886         * server-tests/api-manifest-tests.js: Added a unit test for this change.
887
888 2018-06-29  Dewei Zhu  <dewei_zhu@apple.com>
889
890         Fix a bug in range bisector that start commit may be counted twice.
891         https://bugs.webkit.org/show_bug.cgi?id=187205
892
893         Reviewed by Darin Adler.
894
895         Range bisector counted start commit twice if start commit is the same as end commit.
896
897         * public/v3/commit-set-range-bisector.js:
898         (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits):
899         * unit-tests/commit-set-range-bisector-tests.js: Added a unit test for this change.
900
901 2018-06-28  Dewei Zhu  <dewei_zhu@apple.com>
902
903         Fix a bug ComponentBase that wrong content template may be used.
904         https://bugs.webkit.org/show_bug.cgi?id=187159
905
906         Reviewed by Ryosuke Niwa.
907
908         ComponentBase uses '_parsed' to mark whether content and style templates of a class
909         is parsed. However, derived class parsing will be skipped as 'Derive._parsed' is available
910         via prototype chain whenever the base class is parsed.
911
912         * browser-tests/component-base-tests.js: Added unit tests.
913         * public/v3/components/base.js: Added 'hasOwnProperty' to make sure current class is parsed.
914         (ComponentBase.prototype._ensureShadowTree):
915
916 2018-06-25  Dewei Zhu  <dewei_zhu@apple.com>
917
918         MeasurementSetAnalyzer should check triggerable availability before creating confirming A/B tests.
919         https://bugs.webkit.org/show_bug.cgi?id=187028
920
921         Reviewed by Ryosuke Niwa.
922
923         If the triggerable is not available, MeasurmentSetAnalyzer should only create analysis task without
924         confirming A/B tests.
925
926         * tools/js/measurement-set-analyzer.js: Added logic to check triggerable availability.
927         (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet):
928         (MeasurementSetAnalyzer):
929         * unit-tests/measurement-set-analyzer-tests.js: Updated unit tests and added a new unit test for this change.
930
931 2018-06-11  Dewei Zhu  <dewei_zhu@apple.com>
932
933         Extend test group rule to support 'userInitiated' field.
934         https://bugs.webkit.org/show_bug.cgi?id=186544
935
936         Reviewed by Ryosuke Niwa.
937
938         Added support for rule specifying whether or not test group is user initiated.
939
940         * tools/js/analysis-results-notifier.js: Rule now support 'userInitiated' field.
941         (AnalysisResultsNotifier.prototype.async.sendNotificationsForTestGroups):
942         (AnalysisResultsNotifier.prototype._applyRules):
943         (AnalysisResultsNotifier._matchesRule):
944         * unit-tests/analysis-results-notifier-tests.js: Added unit tests for this change.
945
946 2018-05-29  Dewei Zhu  <dewei_zhu@apple.com>
947
948         CommitSet range bisector should use commits occur in commit sets which specify the range as valid commits for commits without ordering.
949         https://bugs.webkit.org/show_bug.cgi?id=186062
950
951         Reviewed by Ryosuke Niwa.
952
953         For commits without ordering, we should use the commits occurs in the commit sets which specify the range as valid commits.
954         Commit sets in range should only contain those valid commits for corresponding repositories.
955
956         * public/v3/commit-set-range-bisector.js: Updated logic to add check on commits without ordering.
957         (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits):
958         * unit-tests/commit-set-range-bisector-tests.js: Added a unit test for this case.
959
960 2018-06-07  Dewei Zhu  <dewei_zhu@apple.com>
961
962         Related task may not have a metric or platform.
963         https://bugs.webkit.org/show_bug.cgi?id=186426
964
965         Reviewed by Ryosuke Niwa.
966
967         Related task in the related task list can be a custom analysis task which
968         may not have platform or metric.
969
970         * public/v3/pages/analysis-task-page.js: Added null checks for platform and metric.
971         (AnalysisTaskPage.prototype._renderRelatedTasks):
972
973 2018-06-07  Dewei Zhu  <dewei_zhu@apple.com>
974
975         Fix browser test failed assertions and a bug in 'common-component-base'
976         https://bugs.webkit.org/show_bug.cgi?id=186423
977
978         Reviewed by Ryosuke Niwa.
979
980         Fixed serveral assertion failures in browser tests.
981         Fixed a bug in common-component-base that null/undefined as attribute value is not allowed.
982
983         * browser-tests/chart-revision-range-tests.js: Should not import 'lazily-evaluated-function.js' twice.
984         * browser-tests/chart-status-evaluator-tests.js: Should not import 'lazily-evaluated-function.js' twice.
985         * browser-tests/component-base-tests.js: Added a unit test for element attributes being null or undefined.
986         * browser-tests/index.html: Make mocked data from makeSampleCluster also contains commit_order.
987         * public/shared/common-component-base.js: Make it allow to take null as attribute value.
988         (CommonComponentBase.createElement):
989
990 2018-05-24  Dewei Zhu  <dewei_zhu@apple.com>
991
992         Added sending notification feature when test group finishes.
993         https://bugs.webkit.org/show_bug.cgi?id=184340
994
995         Reviewed by Ryosuke Niwa.
996
997         Added 'testgroup_needs_notification' filed to 'analysis_test_group' table to indicate whether a test group
998         has a pending notification.
999         Added 'testgroup_notification_sent_at' to record the last notification sent time.
1000         SQL queries to update existing database are:
1001             'ALTER TABLE analysis_test_groups ADD COLUMN testgroup_needs_notification boolean NOT NULL DEFAULT FALSE;'
1002             'ALTER TABLE analysis_test_groups ADD COLUMN testgroup_notification_sent_at timestamp DEFAULT NULL;'
1003         Updated 'run-analysis' script to be able to send notification when test group finishes.
1004         Added 'Notify on completion' checkbox while creating/retrying/bisecting a test group.
1005
1006         * browser-tests/test-group-form-tests.js: Updated existing tests and added a new test.
1007         * browser-tests/test-group-result-page-tests.js: Added unit tests for TestGroupResultPage.
1008         * init-database.sql: Added 'testgroup_needs_notification' filed to 'analysis_test_group' table.
1009         * public/api/test-groups.php: Added '/api/test-groups/ready-for-notification' API to 'test-group' to show all
1010         test groups that need to send notification. Only the ones with 'completed', 'failed' or 'cancelled' status and its
1011         'testgroup_needs_notification' is true will be returned by this API.
1012         * public/include/build-requests-fetcher.php: Added 'fetch_requests_for_groups' to return test groups with given ids.
1013         * public/include/commit-sets-helpers.php: Updated the logic to support setting 'testgroup_needs_notification'
1014         while create an analysis_test_groups.
1015         * public/privileged-api/create-analysis-task.php: Updated the logic to support setting 'testgroup_needs_notification'.
1016         * public/privileged-api/create-test-group.php: Updated the logic to support setting 'testgroup_needs_notification'.
1017         * public/privileged-api/update-test-group.php: Updated the logic to support updating 'testgroup_needs_notification'.
1018         Extended this API to allow authentication both from CSRF token and slave.
1019         * public/v3/components/custom-configuration-test-group-form.js:
1020         (CustomConfigurationTestGroupForm.prototype.startTesting): Pass 'notifyOnCompletion' information which represents
1021         'testgroup_needs_notification' from API perspective.
1022         * public/v3/components/customizable-test-group-form.js:
1023         (CustomizableTestGroupForm.prototype.startTesting): Pass 'notifyOnCompletion' information which represents
1024         'testgroup_needs_notification' from API perspective.
1025         (CustomizableTestGroupForm.cssTemplate): Added space between 'Notify on completion' checkbox and test group iteration selection list.
1026         * public/v3/components/test-group-form.js:
1027         (TestGroupForm): Added '_notifyOnCompletion' instance variable.
1028         (TestGroupForm.prototype.didConstructShadowTree): Added 'onchange' event for notify on completion checkbox.
1029         (TestGroupForm.prototype.startTesting): Pass 'notifyOnCompletion' information which represents
1030         'testgroup_needs_notification' from API perspective.
1031         (TestGroupForm.cssTemplate): Added space between 'Notify on completion' checkbox and test group iteration selection list.
1032         * public/v3/models/analysis-results.js: Export 'AnalysisResults'.
1033         (AnalysisResults.fetch): Update API path to use absolute url.
1034         (AnalysisResults):
1035         * public/v3/models/analysis-task.js:
1036         (AnalysisTask.async.create): Extend this function to take notifyOnCompletion as argument which will be used as
1037         'needsNotification' to send to server.
1038         (AnalysisTask):
1039         * public/v3/models/test-group.js:
1040         (TestGroup): Added '_needsNotification' field.
1041         (TestGroup.prototype.updateSingleton): Added logic to update '_needsNotification' field.
1042         (TestGroup.prototype.needsNotification): Returns '_needsNotification' field.
1043         (TestGroup.prototype.author): Returns author information.
1044         (TestGroup.prototype.async.didSendNotification): API that updates 'testgroup_needs_notification' to true.
1045         (TestGroup.prototype.async.fetchTask): API to fetch the task when it has not been fetched.
1046         (TestGroup.createWithTask): Updated this function to accept 'notifyOnCompletion' which will be used as
1047         'needsNotification' to send to server.
1048         (TestGroup.createWithCustomConfiguration): Updated this function to accept 'notifyOnCompletion' which will be used as
1049         'needsNotification' to send to server.
1050         (TestGroup.createAndRefetchTestGroups): Updated this function to accept 'notifyOnCompletion' which will be used as
1051         'needsNotification' to send to server.
1052         (TestGroup.fetchAllWithNotificationReady): New function that invokes '/api/test-groups/ready-for-notification'.
1053         * public/v3/pages/analysis-task-page.js: Update logic to 'notifyOnCompletion' around
1054         (AnalysisTaskChartPane.prototype.didConstructShadowTree):
1055         (AnalysisTaskResultsPane.prototype.didConstructShadowTree):
1056         (AnalysisTaskTestGroupPane.prototype.didConstructShadowTree):
1057         (AnalysisTaskPage.prototype.didConstructShadowTree):
1058         (AnalysisTaskPage.prototype._retryCurrentTestGroup):
1059         (AnalysisTaskPage.prototype.async._bisectCurrentTestGroup):
1060         (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList.set const):
1061         (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList):
1062         (AnalysisTaskPage.prototype._createCustomTestGroup):
1063         * public/v3/pages/chart-pane.js: Added 'Notify on completion' checkbox.
1064         (ChartPane.prototype.didConstructShadowTree):
1065         (ChartPane.prototype.async._analyzeRange):
1066         * public/v3/pages/create-analysis-task-page.js: Adapted API change.
1067         (CreateAnalysisTaskPage.prototype._createAnalysisTaskWithGroup):
1068         * server-tests/api-test-groups.js: Added tests for '/api/test-groups/ready-for-notification'.
1069         * server-tests/privileged-api-create-analysis-task-tests.js: Updated tests to adapt this change.
1070         Added new tests.
1071         * server-tests/privileged-api-create-test-group-tests.js: Added new tests.
1072         * server-tests/privileged-api-update-test-group-tests.js: Added unit test for 'update-test-group' API.
1073         * server-tests/resources/mock-data.js: addMockData should set 'testgroup_needs_notification' to be true.
1074         * server-tests/tools-sync-buildbot-integration-tests.js: Updated tests to adapt this change.
1075         (async.createTestGroupWihPatch):
1076         (createTestGroupWihOwnedCommit):
1077         * tools/js/analysis-results-notifier.js: Added notifier to send notification for completed test groups.
1078         (AnalysisResultsNotifier):
1079         (AnalysisResultsNotifier.prototype.async.sendNotificationsForTestGroups):
1080         (AnalysisResultsNotifier.prototype._sendNotification): Invoke remote API to send notification.
1081         (AnalysisResultsNotifier.prototype._constructMessageByRules):
1082         (AnalysisResultsNotifier._matchesRule):
1083         (AnalysisResultsNotifier._applyUpdate):
1084         (AnalysisResultsNotifier.async._messageForTestGroup): Build html as message body for a test group.
1085         (AnalysisResultsNotifier._URLForAnalysisTask): Returns URL for an analysis task.
1086         (AnalysisResultsNotifier._instantiateNotificationTemplate):
1087         * tools/js/test-group-result-page.js: Added 'TestGroupResultPage' and 'BarGraph' to show test group result.
1088         (TestGroupResultPage):
1089         (TestGroupResultPage.prototype.async.setTestGroup):
1090         (TestGroupResultPage._urlForAnalysisTask):
1091         (TestGroupResultPage.prototype._URLForAnalysisTask):
1092         (TestGroupResultPage.prototype.constructTables):
1093         (TestGroupResultPage.prototype._constructTableForMetric):
1094         (TestGroupResultPage.):
1095         (TestGroupResultPage.prototype.get pageContent):
1096         (TestGroupResultPage.prototype.get styleTemplate):
1097         (BarGraph):
1098         (BarGraph.prototype.setWidth):
1099         (BarGraph.prototype._constructBarGraph):
1100         (BarGraph.prototype.get pageContent):
1101         (BarGraph.prototype.get styleTemplate):
1102         * tools/js/measurement-set-analyzer.js: Adapted 'AnalysisTask.create' change.
1103         (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet):
1104         (MeasurementSetAnalyzer):
1105         * tools/js/v3-models.js:
1106         * tools/run-analysis.js: Added the logic that sends notification for completed test groups.
1107         (main):
1108         (async.analysisLoop):
1109         * unit-tests/analysis-task-tests.js:
1110         * unit-tests/analysis-results-notifier-tests.js: Added a unit test for 'AnalysisResultsNotifier' and 'NotificationService'.
1111         * unit-tests/measurement-set-analyzer-tests.js: Updated unit tests per this change.
1112         * unit-tests/test-groups-tests.js: Added unit tests for 'TestGroup.needsNotification'.
1113         * unit-tests/resources/mock-remote-api.js: Only set 'privilegedAPI' when it exits.
1114
1115 2018-06-07  Ryosuke Niwa  <rniwa@webkit.org>
1116
1117         Add the basic support for writing components in node.js
1118         https://bugs.webkit.org/show_bug.cgi?id=186299
1119
1120         Reviewed by Antti Koivisto.
1121
1122         Add the basic support for writing components in node.js for generating rich email notifications.
1123
1124         To do this, this patch introduces MarkupComponentBase and MarkupPage which implement similar API
1125         to ComponentBase and Page classes of v3 UI code. This enables us to share code between frontend
1126         and the backend in the future. Because there is no support for declarative custom elements or
1127         shadow root in HTML, MarkupComponentBase uses a similar but distinct concept of "content" tree
1128         to represent the "DOM" tree for a component. When generating the HTML, MarkupComponentBase and
1129         MarkupPage collectively transforms stylesheets and flattens the tree into a single HTML. In order
1130         to keep this flatteneing logic simple, MarkupComponentBase only supports a very small subset of
1131         CSS selectors to select elements by their local names and class names.
1132
1133         Specifically, each class name and element name based selectors are replaced by a globally unique
1134         class name based selector, and each element which matches the selector is applied of the same
1135         globally unique class name. The transformation is applied when constructing the "content" tree
1136         as well as calls to renderReplace.
1137
1138         Because much of v3 frontend code relies on DOM API, this patch also implements the simplest form
1139         of a fake DOM API as MarkupNode, MarkupParentNode, MarkupElement, and MarkupText. In order to avoid
1140         reimplementing HTML & CSS parsers, this patch introduces the concept of content and style templates
1141         to ComponentBase which are JSON alternatives to HTML & CSS template strings which can be used in
1142         both frontend & backend.
1143
1144         * browser-tests/close-button-tests.js: Include CommonComponentBase.
1145         * browser-tests/commit-log-viewer-tests.js: Ditto.
1146         * browser-tests/component-base-tests.js: Ditto. Added a test cases for content & style templates.
1147         (async.importComponentBase): Added.
1148         * browser-tests/editable-text-tests.js: Include CommonComponentBase.
1149         * browser-tests/index.html:
1150         * browser-tests/markup-page-tests.js: Added.
1151         * browser-tests/page-router-tests.js: Include CommonComponentBase.
1152         * browser-tests/page-tests.js: Ditto.
1153         * browser-tests/test-group-form-tests.js: Ditto.
1154         * public/shared/common-component-base.js: Added.
1155         (CommonComponentBase): Extracted out of ComponentBase.
1156         (CommonComponentBase.prototype.renderReplace): Added.
1157         (CommonComponentBase.renderReplace): Moved from ComponentBase.
1158         (CommonComponentBase.prototype._recursivelyUpgradeUnknownElements): Moved and renamed from
1159         ComponentBase's _recursivelyReplaceUnknownElementsByComponents.
1160         (CommonComponentBase.prototype._upgradeUnknownElement): Extracted out of the same function.
1161         (CommonComponentBase._constructStylesheetFromTemplate): Added.
1162         (CommonComponentBase._constructNodeTreeFromTemplate): Added.
1163         (CommonComponentBase.prototype.createElement): Added.
1164         (CommonComponentBase.createElement): Moved from ComponentBase.
1165         (CommonComponentBase._addContentToElement): Moved from ComponentBase.
1166         (CommonComponentBase.prototype.createLink): Added.
1167         (CommonComponentBase.createLink): Moved from ComponentBase.
1168         (CommonComponentBase._context): Added. Set to document in a browser and MarkupDocument in node.js.
1169         (CommonComponentBase._isNode): Added. Set to a function which does instanceof Node/MarkupNode check.
1170         (CommonComponentBase._baseClass): Added. Set to ComponentBase or MarkupComponentBase.
1171         * public/v3/components/base.js:
1172         (ComponentBase):
1173         (ComponentBase.prototype._ensureShadowTree): Added the support for the content and style templates.
1174         Also avoid parsing the html template each time a component is instantiated by caching the result.
1175         * public/v3/index.html:
1176         * tools/js/markup-component.js: Added.
1177         (MarkupDocument): Added. A fake Document.
1178         (MarkupDocument.prototype.createContentRoot): A substitude for attachShadow.
1179         (MarkupDocument.prototype.createElement):
1180         (MarkupDocument.prototype.createTextNode):
1181         (MarkupDocument.prototype._idForClone):
1182         (MarkupDocument.prototype.reset):
1183         (MarkupDocument.prototype.markup):
1184         (MarkupDocument.prototype.escapeAttributeValue):
1185         (MarkupDocument.prototype.escapeNodeData):
1186         (MarkupNode): Added. A fake Node. Each node gets an unique ID.
1187         (MarkupNode.prototype._markup):
1188         (MarkupNode.prototype.clone): Implemented by the leave class.
1189         (MarkupNode.prototype._cloneNodeData):
1190         (MarkupNode.prototype.remove):
1191         (MarkupParentNode): Added. An equivalent of ContainerNode in WebCore.
1192         (MarkupParentNode.prototype.get childNodes):
1193         (MarkupParentNode.prototype._cloneNodeData):
1194         (MarkupParentNode.prototype.appendChild):
1195         (MarkupParentNode.prototype.removeChild):
1196         (MarkupParentNode.prototype.removeAllChildren):
1197         (MarkupParentNode.prototype.replaceChild):
1198         (MarkupContentRoot): Added. Used like a shadow tree.
1199         (MarkupContentRoot.prototype._markup): Added.
1200         (MarkupElement): Added. A fake Element. It also implements a subset of IDL attributes implemented by
1201         subclasses such as HTMLInputElement for simplicity.
1202         (MarkupElement.prototype.get id): Added.
1203         (MarkupElement.prototype.get localName): Added.
1204         (MarkupElement.prototype.clone): Added.
1205         (MarkupElement.prototype.appendChild): Added.
1206         (MarkupElement.prototype.addEventListener): Added.
1207         (MarkupElement.prototype.setAttribute): Added.
1208         (MarkupElement.prototype.getAttribute): Added.
1209         (MarkupElement.prototype.get attributes): Added.
1210         (MarkupElement.prototype.get textContent): Added.
1211         (MarkupElement.prototype.set textContent): Added.
1212         (MarkupElement.prototype._serializeStyle): Added.
1213         (MarkupElement.prototype._markup): Added. Flattens the tree with content tree like copy & paste so
1214         this can't be used to implement innerHTML.
1215         (MarkupElement.prototype.get value): Added.
1216         (MarkupElement.prototype.set value): Added.
1217         (MarkupElement.prototype.get style): Added. Returns a fake writeonly CSSStyleDeclaration.
1218         (MarkupElement.prototype.set style): Added.
1219         (MarkupElement.get selfClosingNames): Added. A small list of self-closing tags for the HTML generation.
1220         (MarkupText): Added.
1221         (MarkupText.prototype.clone): Added.
1222         (MarkupText.prototype._markup): Added.
1223         (MarkupText.prototype.get data): Added.
1224         (MarkupText.prototype.set data): Added.
1225         (MarkupComponentBase): Added.
1226         (MarkupComponentBase.prototype.element): Added. Like ComponentBase's element.
1227         (MarkupComponentBase.prototype.content): Added. Like ComponentBase's content.
1228         (MarkupComponentBase.prototype._findElementRecursivelyById): Added. A fake getElementById.
1229         (MarkupComponentBase.prototype.render): Added. Like ComponentBase's render.
1230         (MarkupComponentBase.prototype.runRenderLoop): Added. In ComponentBase, we use requestAnimationFrame.
1231         In MarkupComponentBase, we keep rendering until the queue drains empty.
1232         (MarkupComponentBase.prototype.renderReplace): Added. Like ComponentBase's renderReplace but applies
1233         the transformation of classes to workaround the lack of shadow tree support in scriptless HTML.
1234         (MarkupComponentBase.prototype._applyStyleOverrides): Added. Recursively applies the transformation.
1235         (MarkupComponentBase.prototype._ensureContentTree): Added. Like ComponentBase's _ensureShadowTree.
1236         (MarkupComponentBase.reset): Added.
1237         (MarkupComponentBase._parseTemplates): Added. Parses the content & style templates, and generates the
1238         transformed fake DOM tree and stylesheet text whereby selectors in each component is modified to be
1239         unique across all components. The function to apply the necessary changes to an element is saved in
1240         the global map of components, and later used in renderReplace via _applyStyleOverrides.
1241         (MarkupComponentBase.defineElement): Added. Like ComponentBase's defineElement.
1242         (MarkupComponentBase.prototype.createEventHandler): Added.
1243         (MarkupComponentBase.createEventHandler): Added.
1244         (MarkupPage): Added. The top-level component responsible for generating a DOCTYPE, head, and body.
1245         (MarkupPage.prototype.pageTitle): Added.
1246         (MarkupPage.prototype.content): Added. Overrides the one in MarkupComponentBase to return what would
1247         be the content of the body element as opposed to the html element for the connivance of subclasses,
1248         and to match the behavior of the frontend Page class.
1249         (MarkupPage.prototype.render): Added.
1250         (MarkupPage.prototype._updateComponentsStylesheet): Added. Concatenates the transformed stylesheet of
1251         all components used.
1252         (MarkupPage.get contentTemplate): Added.
1253         (MarkupPage.prototype.generateMarkup): Added. Enqueues the page to render, spin the render loop, and
1254         generates the HTML. We enqueue the page twice in order to invoke _updateComponentsStylesheet after
1255         all subcomponent had finished rendering.
1256         * unit-tests/markup-component-base-tests.js: Added.
1257         * unit-tests/markup-element-tests.js: Added.
1258         (.createElement): Added.
1259         * unit-tests/markup-page-tests.js: Added.
1260
1261 2018-05-23  Dewei Zhu  <dewei_zhu@apple.com>
1262
1263         OSBuildFetcher should respect maxRevision while finding OS builds to report.
1264         https://bugs.webkit.org/show_bug.cgi?id=185925
1265
1266         Reviewed by Ryosuke Niwa.
1267
1268         * server-tests/tools-os-build-fetcher-tests.js: Fix a typo in the unit tests.
1269         Added unit tests for this change. Aslo convert an existing test using async.
1270         * tools/js/os-build-fetcher.js:
1271         (prototype._fetchAvailableBuilds): It should also use 'maxRevision' to filter builds to be reported.
1272         It should use 'minRevisionOrder' when no commit has ever been submitted.
1273         (prototype._commitsForAvailableBuilds): Takes 'maxOrder' as fifth argument.
1274         'minOrder' and 'maxOrder' should be inclusive.
1275
1276 2018-05-11  Dewei Zhu  <dewei_zhu@apple.com>
1277
1278         Update ChartPane per change r231087.
1279         https://bugs.webkit.org/show_bug.cgi?id=185570
1280
1281         Reviewed by Ryosuke Niwa.
1282
1283         On r231087 we change the return type of AnalysisTask.create, ChartPane needs to adapt
1284         this change.
1285
1286         * public/v3/pages/chart-pane.js: Adapted the change that AnalysisTask.create now returns
1287         an AnalysisTask object.
1288         (ChartPane.prototype.async._analyzeRange):
1289
1290 2018-05-10  Dewei Zhu  <dewei_zhu@apple.com>
1291
1292         CommitLogViewer._preceedingCommit should not always be null
1293         https://bugs.webkit.org/show_bug.cgi?id=185540
1294
1295         Reviewed by Ryosuke Niwa.
1296
1297         Fix the bug introduced in r227746 that CommitLogViewer._preceedingCommit is always null.
1298
1299         * browser-tests/index.html: Fix expected measurement-set url.
1300         * public/v3/components/commit-log-viewer.js:
1301         (CommitLogViewer.prototype._fetchCommitLogs): CommitLogViewer._preceedingCommit should be set
1302          when fetching for preceeding revision succeeds.
1303
1304 2018-05-03  Dewei Zhu  <dewei_zhu@apple.com>
1305
1306         Range bisector should check the commits for repositories without change in specified range.
1307         https://bugs.webkit.org/show_bug.cgi?id=185269
1308
1309         Reviewed by Ryosuke Niwa.
1310
1311         For repositories without a change in the specified range, we still need to use them to filter commit
1312         sets. Before this change, code does not apply filtering by those repositories against commit set. As
1313         a result, commit sets with different commits for those repositories may be chosen as bisecting commit set.
1314
1315         * public/v3/commit-set-range-bisector.js: Updated the logic to verify range for repositories without
1316         change in range.
1317         (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits):
1318         * unit-tests/commit-set-range-bisector-tests.js: Added a unit test to guard against this change.
1319
1320 2018-05-02  Dewei Zhu  <dewei_zhu@apple.com>
1321
1322         Create analysis task should sync analysis task status after creation.
1323         https://bugs.webkit.org/show_bug.cgi?id=185222
1324
1325         Reviewed by Ryosuke Niwa.
1326
1327         * public/v3/models/analysis-task.js:
1328         (AnalysisTask.async.create): Fetch newly-created analysis task right about its creation.
1329         (AnalysisTask):
1330         * tools/js/measurement-set-analyzer.js:
1331         (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet): Adjust as 'AnalysisTask.create' now
1332         returns an anlysis task instance.
1333         (MeasurementSetAnalyzer):
1334         * unit-tests/analysis-task-tests.js: Added a unit test for this change.
1335         (async):
1336         * unit-tests/measurement-set-analyzer-tests.js: Update unit tests accordingly.
1337         Fix a typo in one previous unit test.
1338         (async):
1339
1340 2018-05-01  Dewei Zhu  <dewei_zhu@apple.com>
1341
1342         Write a script that detects chart changes by using v3 API.
1343         https://bugs.webkit.org/show_bug.cgi?id=184419
1344
1345         Reviewed by Ryosuke Niwa.
1346
1347         Added a script that detects chart changes and schedule confirming analysis task.
1348
1349         * browser-tests/async-task-tests.js: Added a unit test for 'AsyncTask'.
1350         * browser-tests/index.html: Added import for 'AsyncTask' for testing.
1351         * public/shared/statistics.js: Make 'findRangesForChangeDetectionsWithWelchsTTest' defaults to 0.99 one sided possibility.
1352         (Statistics.new.this.findRangesForChangeDetectionsWithWelchsTTest):
1353         * public/v3/async-task.js:
1354         (AsyncTask.isAvailable): Helper function to determine whether AsyncTask is available or not as 'Worker' is
1355         not available in nodejs.
1356         (AsyncTask):
1357         * public/v3/models/bug.js: Export as a module.
1358         * public/v3/models/measurement-set.js:
1359         (MeasurementSet.prototype._invokeSegmentationAlgorithm): Added a check to avoid using AsyncTask when running in NodeJs.
1360         (MeasurementSet):
1361         * server-tests/resources/common-operations.js: Added a helper function to assert certain exception is thrown.
1362         (async.assertThrows):
1363         * tools/js/measurement-set-analyzer.js: Added 'MeasurementSetAnalyzer' module for analyzing measurement set.
1364         (MeasurementSetAnalyzer):
1365         (MeasurementSetAnalyzer.prototype.async.analyzeOnce):
1366         (MeasurementSetAnalyzer.measurementSetListForAnalysis):
1367         (MeasurementSetAnalyzer.prototype.async._analyzeMeasurementSet):
1368         * tools/js/v3-models.js: Added import for 'Bug' object.
1369         * tools/run-analysis.js: Added this script to detect measurement set changes.
1370         (main):
1371         (async.analysisLoop):
1372         * unit-tests/measurement-set-analyzer-tests.js: Added unit tests for 'MeasurementSetAnalyzer'.
1373         * unit-tests/resources/mock-v3-models.js: Reset 'MeasurementSet._set' every time.
1374         Update mock platform to include lastModifiedByMetric information.
1375         (MockModels.inject):
1376
1377 2018-04-30  Ryosuke Niwa  <rniwa@webkit.org>
1378
1379         Creating a custom analysis task after fetching all analysis tasks fail
1380         https://bugs.webkit.org/show_bug.cgi?id=184641
1381
1382         Reviewed by Saam Barati.
1383
1384         The bug was caused by AnalysisTask._fetchSubset not fetching the analysis task when all analysis tasks
1385         had previously been fetched (AnlaysisTask._fetchAllPromise is set) even when noCache is set to true.
1386         Fixed it by ignornig _fetchAllPromise when noCache is set to true.
1387
1388         This patch also adds noCache argument to AnalysisTask.fetchById and reverts the inadvertent change in
1389         r226836 to always set noCache to true in this function.
1390
1391         * public/v3/models/analysis-task.js:
1392         (AnalysisTask.fetchById): Added noCache argument instead of always specifying true, and modernized the code.
1393         (AnalysisTask._fetchSubset): Fixed the bug. See above description.
1394         * public/v3/models/test-group.js:
1395         (TestGroup.createWithTask): Set noCache to true when calling AnalysisTask.fetchById here.
1396         * unit-tests/analysis-task-tests.js: Added test cases for AnalysisTask.fetchById, including a test
1397         to make sure it doesn't fetch the specified analysis task when noCache is set to false and all analysis
1398         tasks had previously been fetched for the aforementioned revert of the inadvertent change in r226836.
1399         (sampleAnalysisTasks): Renamed from sampleAnalysisTasks as the result contains multiple analysis tasks.
1400         * unit-tests/test-groups-tests.js: Added a test case for TestGroup.createWithTask
1401
1402 2018-04-30  Ryosuke Niwa  <rniwa@webkit.org>
1403
1404         REGRESSION(r230960): Browser tests under TimeSeriesChart fetchMeasurementSets all fail
1405         https://bugs.webkit.org/show_bug.cgi?id=185125
1406
1407         Reviewed by Saam Barati.
1408
1409         The bug was caused by mock-remote-api.js always loading PrivilegedAPI using require, which doesn't work in a browser.
1410         Fixed the bug by explicitly requiring the right kind of PrivilegedAPI in each unit test instead.
1411
1412         * unit-tests/analysis-task-tests.js:
1413         * unit-tests/buildbot-syncer-tests.js:
1414         * unit-tests/commit-log-tests.js:
1415         * unit-tests/commit-set-range-bisector-tests.js:
1416         * unit-tests/commit-set-tests.js:
1417         * unit-tests/measurement-set-tests.js:
1418         * unit-tests/privileged-api-tests.js:
1419         * unit-tests/resources/mock-remote-api.js:
1420         (MockRemoteAPI.inject): Take PrivilegedAPI instead of the type string. Also fixed a bug that _token wasn't unset
1421         after each unit test, and superfluous initializations of originalRemoteAPI and originalPrivilegedAPI.
1422         * unit-tests/test-groups-tests.js:
1423
1424 2018-04-30  Dewei Zhu  <dewei_zhu@apple.com>
1425
1426         MeasurementSet._constructUrl should construct absolute url.
1427         https://bugs.webkit.org/show_bug.cgi?id=185137
1428
1429         Reviewed by Ryosuke Niwa.
1430
1431         MeasurementSet._constructUrl should not construct an url with relative path.
1432
1433         * public/v3/models/measurement-set.js: Should use '/api/measurement-set...' and '/data/measurement-set-...'
1434         for uncached and cached fetching.
1435         * unit-tests/measurement-set-tests.js: Updated unit tests.
1436         (const.set MeasurementSet):
1437
1438 2018-04-26  Dewei Zhu  <dewei_zhu@apple.com>
1439
1440         Extend create-analysis-test API to be able to create with confirming test group.
1441         https://bugs.webkit.org/show_bug.cgi?id=184958
1442
1443         Reviewed by Ryosuke Niwa.
1444
1445         Extend create-analysis-test API to be able to create an analysis task with confirming test group.
1446         Update create analysis task UI in chart pane to adapt this new API.
1447         Refactored '/privileged-api/create-test-group' API to share some creating test group logic with '/privileged-api/create-analysis-task' API.
1448         Moved the shared logic to commit-sets-helpers.php.
1449
1450         * public/api/analysis-tasks.php: Use 'require_once' instead of 'require'.
1451         * public/include/commit-sets-helpers.php: Added.
1452         (create_test_group_and_build_requests): A helper function that creates test group and build requests for a analysis
1453         task. In long term, this should be a class to avoid passing long argument list around.
1454         (insert_commit_sets_and_construct_configuration_list): Based on commit sets returns build and test configurations.
1455         (insert_build_request_for_configuration): Insert build requests based on configuration.
1456         (commit_sets_from_revision_sets): Returns commit sets from given revision set list.
1457         * public/privileged-api/create-analysis-task.php: Added the ability to create analysis task with confirming test
1458         groups when repetition count is specified.
1459         * public/privileged-api/create-test-group.php: Moved shared function to commit-sets-helpers.php.
1460         * public/v3/models/analysis-task.js:
1461         (AnalysisTask.create): Instead of accepting run ids, it now accepts points and test group name and confirming iterations.
1462         It will conditionally add test group information into parameter when confirming iterations is a positive number.
1463         (AnalysisTask):
1464         * public/v3/models/commit-set.js:
1465         (CommitSet.revisionSetsFromCommitSets): Move 'TestGroup._revisionSetsFromCommitSets' since CommitSet class is more
1466         appropriate place and it will be shared by both TestGroup and AnalysisTask
1467         (CommitSet):
1468         * public/v3/models/test-group.js:
1469         (TestGroup.createWithTask): Adapt 'CommitSet.revisionSetsFromCommitSets'.
1470         (TestGroup.createWithCustomConfiguration): Adapt 'CommitSet.revisionSetsFromCommitSets'.
1471         (TestGroup.createAndRefetchTestGroups): Adapt 'CommitSet.revisionSetsFromCommitSets'.
1472         (TestGroup._revisionSetsFromCommitSets): Deleted and moved to 'CommitSet.revisionSetsFromCommitSets'.
1473         * public/v3/pages/chart-pane.js:
1474         (ChartPane.prototype.didConstructShadowTree): Added the logic to disable options when checkbox for creating confirming
1475         test group is unchecked.
1476         (ChartPane.prototype._analyzeRange): Conditionally create confirming test group from UI.
1477         (ChartPane.cssTemplate):
1478         * server-tests/privileged-api-create-analysis-task-tests.js: Added unit tests. Added a unit test for 'NodePrivilegedAPI'.
1479         * unit-tests/analysis-task-tests.js: Added unit tests.
1480         * unit-tests/commit-set-tests.js: Added unit test for 'CommitSet.revisionSetsFromCommitSets'.
1481         * unit-tests/resources/mock-remote-api.js: Reset csrf token when BrowserPrivilegedAPI is used.
1482         (MockRemoteAPI.inject):
1483
1484 2018-04-23  Dewei Zhu  <dewei_zhu@apple.com>
1485
1486         Tool scripts should not use PrivilegedAPI from 'public/v3/privileged-api.js'.
1487         https://bugs.webkit.org/show_bug.cgi?id=184766
1488
1489         Reviewed by Ryosuke Niwa.
1490
1491         For tools, we should not use PrivilegedAPI for tools as current PrivilegedAPI
1492         is used by UI and it is unnecessary to generate CSRF token for tools.
1493         Will post a followup patch that creates a PrivilegedAPI used by tools.
1494         Make a change on TestServer.inject and MockRemoteAPI.inject to allow specifying
1495         BrowserPrivilegedAPI or NodePrivilegedAPI in the test. Currently defaults to
1496         BrowserPrivilegedAPI as this is the test behavior before this change.
1497
1498         * server-tests/resources/common-operations.js: Allow passing type of privileged api
1499         information to TestServer.inject.
1500         * server-tests/resources/test-server.js: Conditionally inject PrivilegedAPI based on
1501         type of privileged api.
1502         (TestServer.prototype.inject):
1503         (TestServer):
1504         * server-tests/tools-buildbot-triggerable-tests.js: Updated 'prepareServerTest' invocation.
1505         * server-tests/tools-os-build-fetcher-tests.js: Updated 'prepareServerTest' invocation.
1506         * server-tests/tools-sync-buildbot-integration-tests.js: Temporarily injecting
1507         BrowserPrivilegedAPI for mocking UploadedFile. The actual script does not rely on
1508         BrowserPrivilegedAPI at all.
1509         (async.createTestGroupWihPatch):
1510         (beforeEach):
1511         * tools/js/privileged-api.js: Added NodePrivilegedAPI
1512         (NodePrivilegedAPI.prototype.sendRequest):
1513         (NodePrivilegedAPI.configure): Configure the slave name and password.
1514         (NodePrivilegedAPI):
1515         * tools/js/v3-models.js: Removed the import of PrivilegedAPI.
1516         * unit-tests/privileged-api-tests.js:. Added unit tests for NodePrivilegedAPI.
1517         * unit-tests/resources/mock-remote-api.js: Conditionally inject PrivilegedAPI based on
1518         the type of privileged api.
1519         (MockRemoteAPI.inject):
1520
1521 2018-04-23  Dewei Zhu  <dewei_zhu@apple.com>
1522
1523         Revision information returned by querying measurement set api with analysis task id should contain commit order.
1524         https://bugs.webkit.org/show_bug.cgi?id=184902
1525
1526         Reviewed by Ryosuke Niwa.
1527
1528         This is a bug fix for r230719 which does not cover the case while querying `measurement-set.php?analysisTask=$task_id`
1529
1530         * public/api/measurement-set.php: AnalysisResultsFetcher.fetch_commits results should contains commit order.
1531         * server-tests/api-measurement-set-tests.js: Added unit test for this change.
1532
1533 2018-04-19  Dewei Zhu  <dewei_zhu@apple.com>
1534
1535         Add a bisect button to automatically schedule bisecting A/B tasks.
1536         https://bugs.webkit.org/show_bug.cgi?id=183888
1537
1538         Reviewed by Ryosuke Niwa.
1539
1540         Extended AnalysisTask's ability to figure out bisecting A/B tasks based on existing data points and test groups.
1541         Updated analysis page UI to show bisect button which will only appear when the middle commit set of the range in
1542         test group can be found.
1543
1544         Finding middle commit set algorithm is described as follows:
1545         1. Find all commits from multiple repositories among the ranges specified by two commit sets in test group. In
1546         the meanwhile, merge all commits that have commit time into a single list. For commits only have commit order,
1547         put those commits into separate lists.
1548         2. Filter all the available commit sets in current analysis task by keeping the ones have exact repositories
1549         as the two commit sets in specified test group, and every commit of a commit set is in side the commit range.
1550         After filtering the commit sets, sort the remaining ones and only keep one commit set if multiple commit sets
1551         are equal to each other.
1552         3. Among commits processed by step 2, find the commit sets that have the commit which is closest to the middle of
1553         all commits that have commit time created from step 1.
1554         4. Among commits processed by step 3, find the commit sets that have the commit which is closest to the middle of
1555         commits that only have commit order and categorized by repository. We have to iterate through repository as commit
1556         order is not granted to be comparable between different repositories.
1557         5. If more than one commit sets are found, choose the middle commit set.
1558
1559         * public/v3/commit-set-range-bisector.js: Added.
1560         (CommitSetRangeBisector.async.commitSetClosestToMiddleOfAllCommits): Instead of naively returning the middle of
1561         existing commit set array, this function selects a bisect bisection points that is closest to actually middle of
1562         the revision range based on all revisions reported to performance dashboard.
1563         (CommitSetRangeBisector._findCommitSetsWithinRange): Helper function to find commit sets those are in specified range.
1564         (CommitSetRangeBisector._orderCommitSetsByTimeAndOrderThenDeduplicate): Helper function to sort and deduplicate commit sets.
1565         (CommitSetRangeBisector._closestCommitSetsToBisectingCommitByTime): Helper function to find the commit sets those
1566         are closest to the middle of among all the commits in the range that have commit time.
1567         (CommitSetRangeBisector._findCommitSetsClosestToMiddleOfCommitsWithOrder): Helper function which goes through all
1568         repositories the commit of which has commit order, and find the commit sets those are closest to the middle of
1569         commits for each repository.
1570         (CommitSetRangeBisector._buildCommitToCommitSetMap): Helper function to builder mapping from a commit to commit
1571         sets those contain this commit.
1572         (CommitSetRangeBisector._findCommitClosestToMiddleIndex): Helper function to find closest commit to the middle of index.
1573         (CommitSetRangeBisector):
1574         * public/v3/index.html: Imports 'public/v3/commit-set-range-bisector.js'.
1575         * public/v3/models/analysis-task.js:
1576         (AnalysisTask.prototype.async.commitSetsFromTestGroupsAndMeasurementSet): Aggregates all existing commit sets in
1577         test groups of current analysis tasks.
1578         * public/v3/models/commit-log.js:
1579         (CommitLog.prototype.hasCommitTime): A helper function determine whether a commit has a commit time. For commit
1580         that does not have time, server will return commit time as zero. As it is unrealistic for a commit has commit time
1581         0, it would be safe to assume a valid commit time is greater than 0.
1582         (CommitLog.prototype.hasCommitOrder): Returns whether a commit has a commit oder.
1583         (CommitLog.hasOrdering): Determine whether we can order two commits by commit time or commit order.
1584         (CommitLog.orderTwoCommits): Order two commits incrementally.
1585         * public/v3/models/commit-set.js:
1586         (CommitSet.prototype.hasSameRepositories): A helper function to determine whether a commit set has same repositories
1587         as current repository.
1588         (CommitSet.containsRootOrPatchOrOwnedCommit): A helper function to determine whether current commit set has root,
1589         patch or owned commit.
1590         (CommitSet.commitForRepository): This function defined twice identically, remove one of them.
1591         * public/v3/models/test-group.js: Make '_computeRequestedCommitSets' a static function as it does not use any
1592         instance variables.
1593         * public/v3/pages/analysis-task-page.js: Added bisect button.
1594         (AnalysisTaskTestGroupPane):
1595         (AnalysisTaskTestGroupPane.prototype.didConstructShadowTree):
1596         (AnalysisTaskTestGroupPane.prototype.setTestGroups): Update 'setTestGroups' to update _bisectingCommitSetByTestGroup
1597         when the test groups changes.
1598         (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup): Added code to conditionally show bisect button.
1599         Bisect button will only show when there is a middle commit set for that test group.
1600         (AnalysisTaskTestGroupPane.htmlTemplate):
1601         (AnalysisTaskTestGroupPane.cssTemplate):
1602         (AnalysisTaskPage.prototype.didConstructShadowTree):
1603         (AnalysisTaskPage.prototype._retryCurrentTestGroup):
1604         (AnalysisTaskPage.prototype.async._bisectCurrentTestGroup): A callback when bisect button is clicked.
1605         * tools/js/v3-models.js:
1606         * unit-tests/commit-log-tests.js: Added unit tests for 'CommitLog.hasCommitTime', 'CommitLog.hasCommitOrder',
1607         'CommitLog.orderTwoCommits', 'CommitLog.hasOrdering'.
1608         * unit-tests/commit-set-range-bisector-tests.js: Unit tests for 'CommitSetRangeBisector.commitSetClosestToMiddleOfAllCommits'.
1609         * unit-tests/commit-set-tests.js: Added unit tests for 'CommitSet.hasSameRepositories' and 'CommitSet.containsRootOrPatchOrOwnedCommit'.
1610
1611 2018-04-16  Dewei Zhu  <dewei_zhu@apple.com>
1612
1613         Commit order should always be returned by api.
1614         https://bugs.webkit.org/show_bug.cgi?id=184674
1615
1616         Reviewed by Ryosuke Niwa.
1617
1618         Commit order sometimes missing in CommitLog object before this change.
1619         This makes ordering commits logic become unnecessarily complicate.
1620         This change will ensure commit order is always fetched for a CommitLog object.
1621         Change measurement-set API to contain commit order information.
1622         Change commits API to contain commit order information.
1623
1624         * public/api/measurement-set.php: Includes commit order information.
1625         * public/include/commit-log-fetcher.php:
1626         * public/v3/models/commit-log.js: Added a function to return order information.
1627         (CommitLog.prototype.updateSingleton): This function should update commit order.
1628         (CommitLog.prototype.order): Returns the order of commit.
1629         * public/v3/models/commit-set.js:
1630         (MeasurementCommitSet): Update MeasurementCommitSet to contain commit order information when creating CommitLog object.
1631         * server-tests/api-measurement-set-tests.js: Updated unit tests.
1632         * unit-tests/analysis-task-tests.js: Update unit tests to contain commit order information in mock data.
1633         (measurementCluster):
1634         * unit-tests/commit-log-tests.js: Added unit tests for CommitLog.order.
1635         * unit-tests/commit-set-tests.js: Added commit order in MeasurementCommitSet.
1636         * unit-tests/measurement-adaptor-tests.js: Updated unit tests to contain commit order information in mock data.
1637         * unit-tests/measurement-set-tests.js: Updated unit tests to contain commit order information in mock data.
1638
1639 2018-04-15  Ryosuke Niwa  <rniwa@webkit.org>
1640
1641         Make it possible to hide some repository groups
1642         https://bugs.webkit.org/show_bug.cgi?id=184632
1643
1644         Reviewed by Saam Barati.
1645
1646         Added the ability to hide repository groups in the custom analysis task configurator from the admin page.
1647         Hidden repositroy groups will continue to function for existing test groups. This is purely an UI change.
1648
1649         * init-database.sql: Added repositorygroup_hidden as a new column to triggerable_repository_groups.
1650         * public/admin/triggerables.php: Added a form field to hide a repository group.
1651         * public/include/manifest-generator.php: Include hidden state in the manifest file.
1652         * public/v3/components/custom-analysis-task-configurator.js:
1653         (CustomAnalysisTaskConfigurator.prototype._renderRepositoryPanes): Filter out hidden repository groups.
1654         * public/v3/models/triggerable.js:
1655         (prototype.isHidden): Added.
1656         * server-tests/api-manifest-tests.js: Updated an existing test case to test a hidden repository group.
1657
1658 2018-04-06  Dewei Zhu  <dewei_zhu@apple.com>
1659
1660         Added 'CommitSet.diff' which will be shared between multiple independent incoming changes.
1661         https://bugs.webkit.org/show_bug.cgi?id=184368
1662
1663         Reviewed by Ryosuke Niwa.
1664
1665         'CommitSet.diff' will be used in multiple independent incoming changes.
1666         It would be easier to make this a separate change to parallelize the changes depends on this API.
1667
1668         * public/v3/models/commit-set.js:
1669         (CommitSet.prototype.createNameWithoutCollision): Moved from 'AnalysisTaskPage' and make it more generic.
1670         (CommitSet.prototype.diff): Describe differences between 2 commit sets including commit, root and patch differences.
1671         * public/v3/pages/analysis-task-page.js: Move 'AnalysisTaskPage._createRetryNameForTestGroup' to CommitSet in a more generic form.
1672         (AnalysisTaskPage.prototype._retryCurrentTestGroup): Use 'CommitSet.withoutRootPatchOrOwnedCommit' instead.
1673         (AnalysisTaskPage.prototype._createRetryNameForTestGroup): Moved to CommitSet in a more generic form.
1674         * unit-tests/commit-set-tests.js: Added unit tests for 'CommitSet.diff'.
1675
1676 2018-04-05  Dewei Zhu  <dewei_zhu@apple.com>
1677
1678         Fix a bug introduced in r230295 that A/B test result is not shown.
1679         https://bugs.webkit.org/show_bug.cgi?id=184350
1680
1681         Reviewed by Ryosuke Niwa.
1682
1683         result.label should be assigned in `TestGroup._computeRequestedCommitSets`.
1684
1685         * public/v3/models/test-group.js:
1686         (TestGroup.prototype._computeRequestedCommitSets):
1687
1688 2018-03-29  Dewei Zhu  <dewei_zhu@apple.com>
1689
1690         Added UI to show potential regressions in chart with t-testing against segmentations.
1691         https://bugs.webkit.org/show_bug.cgi?id=184131
1692
1693         Reviewed by Ryosuke Niwa.
1694
1695         Added UI in the chart-pane so that user can use new option in trendline which not only
1696         shows the segmentation, but also t-test against potential changes indicated by segmentation.
1697
1698         Fix a bug in AnalysisTaskPage that chart is not updated when change type of task changes.
1699
1700         * browser-tests/interactive-time-series-chart-tests.js: Fix a unit tests.
1701         * browser-tests/time-series-chart-tests.js: Fix a unit tests.
1702         * public/shared/statistics.js: Added a function to t-test certain range based on segmentation results.
1703         (Statistics.supportedOneSideTTestProbabilities):
1704         (Statistics.findRangesForChangeDetectionsWithWelchsTTest): The argument `segmentations`, every 2 items in the list defines 
1705         segmentation, that is why the index incremental is 2 in this funcion.
1706         * public/v3/components/chart-pane-base.js: Will select the range if user clicks on a suggested annotation.
1707         (ChartPaneBase.prototype.configure):
1708         (ChartPaneBase.prototype._didClickAnnotation):
1709         * public/v3/components/chart-styles.js:
1710         (ChartStyles.annotationFillStyleForTask): Added 'annotationFillStyleForTask' to determine the fillStyle for annotation based on change type of a analysis task.
1711         * public/v3/components/interactive-time-series-chart.js:
1712         (InteractiveTimeSeriesChart.prototype._findAnnotation): Also need to search among suggested annotaions.
1713         * 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.
1714         (TimeSeriesChart):
1715         (TimeSeriesChart.prototype.setSuggestedAnnotations):
1716         (TimeSeriesChart.prototype.allAnnotations): Returns both annotations with and without analysis task.
1717         (TimeSeriesChart.prototype._layoutAnnotationBars): Should take all annotations in the calculation.
1718         * public/v3/models/measurement-set.js:
1719         (MeasurementSet.prototype.metricId): Returns metric id.
1720         * public/v3/models/metric.js:
1721         (Metric.prototype.summarizeForValues): Added helper function to summarize a given value
1722         * public/v3/models/test-group.js:
1723         (TestGroup.prototype.compareTestResults): Adapted to use 'Metric.summarizeForValues'.
1724         * public/v3/pages/chart-pane.js: Added 'Segmentation with t-test analysis' to 'ChartTrendLineTypes'.
1725         (ChartPane.prototype._renderTrendLinePopover):
1726         (ChartPane.prototype.async._updateTrendLine): make it an async function.
1727         * unit-tests/statistics-tests.js: Added unit tests for 'findRangesForChangeDetectionsWithWelchsTTest'.
1728
1729 2018-04-02  Aakash Jain  <aakash_jain@apple.com>
1730
1731         Remove deprecated Buildbot 0.8 code from Perf syncing scripts
1732         https://bugs.webkit.org/show_bug.cgi?id=183915
1733
1734         Reviewed by Ryosuke Niwa.
1735
1736         * server-tests/resources/mock-data.js:
1737         (MockData.buildbotBuildersURLDeprecated): Deleted.
1738         (MockData.mockBuildbotBuildersDeprecated): Deleted.
1739         (MockData.pendingBuildDeprecated): Deleted.
1740         (MockData.runningBuildDeprecated): Deleted.
1741         (MockData.finishedBuildDeprecated): Deleted.
1742         * tools/js/buildbot-syncer.js:
1743         (BuildbotBuildEntryDeprecated): Deleted.
1744         (BuildbotBuildEntryDeprecated.prototype.initialize): Deleted.
1745         (BuildbotBuildEntryDeprecated.prototype.url): Deleted.
1746         (BuildbotSyncer.prototype.scheduleBuildOnBuildbotDeprecated): Deleted.
1747         (BuildbotSyncer.prototype._pullRecentBuildsDeprecated): Deleted.
1748         (BuildbotSyncer.prototype.pathForPendingBuildsJSONDeprecated): Deleted.
1749         (BuildbotSyncer.prototype.pathForBuildJSONDeprecated): Deleted.
1750         (BuildbotSyncer.prototype.pathForForceBuildDeprecated): Deleted.
1751         (BuildbotSyncer.prototype.url): Deleted.
1752         (BuildbotSyncer.prototype.urlForBuildNumberDeprecated): Deleted.
1753         * tools/js/buildbot-triggerable.js:
1754         (BuildbotTriggerable.prototype.getBuilderNameToIDMapDeprecated): Deleted.
1755         * unit-tests/buildbot-syncer-tests.js:
1756         (smallPendingBuildDeprecated): Deleted.
1757         (smallInProgressBuildDeprecated): Deleted.
1758         (smallFinishedBuildDeprecated): Deleted.
1759         (samplePendingBuildRequestDeprecated): Deleted.
1760         (sampleInProgressBuildDeprecated): Deleted.
1761         (sampleFinishedBuildDeprecated): Deleted.
1762
1763 2018-03-19  Aakash Jain  <aakash_jain@apple.com>
1764
1765         Update Perf buildbot syncing scripts for Buildbot 0.9
1766         https://bugs.webkit.org/show_bug.cgi?id=175969
1767
1768         Reviewed by Ryosuke Niwa.
1769
1770         * tools/js/buildbot-triggerable.js:
1771         (BuildbotTriggerable.prototype.initSyncers): Switch from Deprecated version to new version of getBuilderNameToIDMap.
1772         * tools/js/buildbot-syncer.js:
1773         (BuildbotSyncer.prototype.scheduleRequestInGroupIfAvailable): Switch from Deprecated version to new version of scheduleRequest.
1774         (BuildbotSyncer.prototype.pullBuildbot): Switch from Deprecated version to new version of pathForPendingBuilds, _pullRecentBuilds 
1775         and BuildbotBuildEntry. Parse the pending build-requests data in Buildbot 0.9 format.
1776         * unit-tests/buildbot-syncer-tests.js: Updated as per Buildbot 0.9 code.
1777         * server-tests/tools-sync-buildbot-integration-tests.js: Ditto.
1778         * server-tests/tools-buildbot-triggerable-tests.js: Ditto.
1779         * server-tests/resources/mock-data.js: Ditto.
1780         (MockData.pendingBuildsUrl): Method to construct pendingBuildsUrl in Buildbot 0.9 format.
1781         (MockData.recentBuildsUrl): Ditto for recent builds url.
1782         (MockData.statusUrl): Ditto for status url.
1783         (MockData.builderIDForName): Method to get builder ID from builder name.
1784
1785 2018-03-15  Aakash Jain  <aakash_jain@apple.com>
1786
1787         BuildbotBuildEntry creates an incorrect url for pending builds
1788         https://bugs.webkit.org/show_bug.cgi?id=183670
1789
1790         Reviewed by Ryosuke Niwa.
1791
1792         * tools/js/buildbot-syncer.js:
1793         (BuildbotBuildEntry.prototype.initialize): Fetch buildrequestid from Buildbot.
1794         (BuildbotBuildEntry.prototype.url): Construct url for pending build using buildrequestid from Buildbot.
1795         * unit-tests/buildbot-syncer-tests.js: Updated unit-test.
1796
1797 2018-03-14  Aakash Jain  <aakash_jain@apple.com>
1798
1799         Add support for boolean properties in BuildbotSyncer while submitting build request to Buildbot 0.9 server
1800         https://bugs.webkit.org/show_bug.cgi?id=183638
1801
1802         Reviewed by Ryosuke Niwa.
1803
1804         * tools/js/buildbot-syncer.js:
1805         (BuildbotSyncer._parseRepositoryGroupPropertyTemplate): Allow boolean properties.
1806         * server-tests/tools-sync-buildbot-integration-tests.js: Tests for boolean properties.
1807         * unit-tests/buildbot-syncer-tests.js: Ditto.
1808
1809 2018-03-04  Dewei Zhu  <dewei_zhu@apple.com>
1810
1811         Create analysis task should use build time as fallback when commit time is not available.
1812         https://bugs.webkit.org/show_bug.cgi?id=183309
1813
1814         Reviewed by Ryosuke Niwa.
1815
1816         Added the ability to schedule analysis task for the range without commit time.
1817
1818         * public/privileged-api/create-analysis-task.php: Use build time as fallback.
1819         * server-tests/privileged-api-create-analysis-task-tests.js: Added a unit test for this change.
1820
1821 2018-03-04  Aakash Jain  <aakash_jain@apple.com>
1822
1823         BuildbotBuildEntry for buildbot 0.9 uses incorrect buildrequestid
1824         https://bugs.webkit.org/show_bug.cgi?id=183194
1825
1826         Reviewed by Ryosuke Niwa.
1827
1828         * tools/js/buildbot-syncer.js:
1829         (BuildbotBuildEntry.prototype.initialize): Updated _buildRequestId to use correct build-request-id, as set in syncer._buildRequestPropertyName.
1830         (BuildbotSyncer.prototype.pathForPendingBuilds): Updated url to fetch properties for build-requests.
1831         * unit-tests/buildbot-syncer-tests.js:
1832         (sampleBuildData): Updated sampleBuildData with correct build-request-id in properties. Added
1833         properties to samplePendingBuildRequestData.
1834
1835 2018-02-28  Aakash Jain  <aakash_jain@apple.com>
1836
1837         Rename samplePendingBuild to samplePendingBuildRequest
1838         https://bugs.webkit.org/show_bug.cgi?id=183171
1839
1840         Reviewed by Ryosuke Niwa.
1841
1842         * unit-tests/buildbot-syncer-tests.js:
1843         (samplePendingBuildRequests): Renamed from samplePendingBuild.
1844         (samplePendingBuildRequestDeprecated): Renamed from samplePendingBuildDeprecated.
1845         (samplePendingBuild): Deleted.
1846         (samplePendingBuildDeprecated): Deleted.
1847
1848 2018-02-02  Aakash Jain  <aakash_jain@apple.com>
1849
1850         Add support for submitting build request to Buildbot 0.9 server in BuildbotSyncer
1851         https://bugs.webkit.org/show_bug.cgi?id=182218
1852
1853         Reviewed by Ryosuke Niwa.
1854
1855         * tools/js/buildbot-syncer.js:
1856         (BuildbotSyncer.prototype.scheduleRequest): Added assert to ensure forcescheduler property is always defined. Builds can not
1857         be scheduled on Buildbot without this property. Updated unit-tests and server-tests accordingly.
1858         (BuildbotSyncer.prototype.scheduleBuildOnBuildbotDeprecated): Method to schedule build request on Buildbot 0.8 server.
1859         (BuildbotSyncer.prototype.scheduleBuildOnBuildbot): Method to schedule build request on Buildbot 0.9 server.
1860         (BuildbotSyncer.prototype.pathForForceBuildDeprecated): Path for scheudling build on Buildbot 0.8 server.
1861         (BuildbotSyncer.prototype.pathForForceBuild): Path for scheudling build on Buildbot 0.9 server.
1862         * unit-tests/buildbot-syncer-tests.js:
1863         (smallConfiguration): Added test-case for scheduleBuildOnBuildbot. Also added forcescheduler property in sample data.
1864         * server-tests/resources/mock-data.js: Added forcescheduler property in sample data.
1865         * server-tests/tools-buildbot-triggerable-tests.js: Updated server-tests to take care of added forcescheduler property.
1866
1867 2018-02-02  Aakash Jain  <aakash_jain@apple.com>
1868
1869         Add support for fetching recent builds in Buildbot 0.9 format in BuildbotSyncer
1870         https://bugs.webkit.org/show_bug.cgi?id=179743
1871
1872         Reviewed by Ryosuke Niwa.
1873
1874         * tools/js/buildbot-syncer.js:
1875         (BuildbotSyncer.prototype._pullRecentBuildsDeprecated): Renamed from _pullRecentBuilds. This method fetch
1876         from Buildbot 0.8 server.
1877         (BuildbotSyncer.prototype._pullRecentBuilds): Method to fetch recent builds from Buildbot 0.9 server.
1878         (BuildbotSyncer.prototype.pathForRecentBuilds): URL for fetching recent builds from Buildbot 0.9 server.
1879         (BuildbotSyncer.prototype.pathForBuildJSONDeprecated): Renamed from pathForBuildJSON.
1880         * unit-tests/buildbot-syncer-tests.js:
1881         (_pullRecentBuilds.it): unit-test - should not fetch recent builds when count is zero.
1882         (_pullRecentBuilds.it): unit-test - should pull the right number of recent builds.
1883         (_pullRecentBuilds.it): unit-test - should handle unexpected error while fetching recent builds.
1884         (_pullRecentBuilds.it): unit-test - should create BuildbotBuildEntry after fetching recent builds.
1885
1886 2018-02-01  Aakash Jain  <aakash_jain@apple.com>
1887
1888         Create BuildbotBuildEntry in Buildbot syncer in Buildbot 0.9 format
1889         https://bugs.webkit.org/show_bug.cgi?id=182036
1890
1891         Reviewed by Ryosuke Niwa.
1892
1893         * tools/js/buildbot-syncer.js:
1894         (BuildbotBuildEntry): Class for Buildbot entry in Buildbot 0.9 data format.
1895         (BuildbotBuildEntryDeprecated): Renamed from BuildbotBuildEntry, sub-classed from BuildBotEntry. Handles Buildbot 0.8 data format.
1896         (BuildbotBuildEntryDeprecated.prototype.url): URL in buildbot 0.8 format.
1897         (BuildbotSyncer.prototype.builderID): Added.
1898         (BuildbotSyncer.prototype.pathForPendingBuildsJSONDeprecated): Renamed from BuildbotSyncer.prototype.pathForPendingBuildsJSON.
1899         (BuildbotSyncer.prototype.pathForPendingBuilds): Path for pending builds in Buildbot 0.9 format.
1900         (BuildbotSyncer.prototype.urlForBuildNumberDeprecated): Deprecated. Renamed from urlForBuildNumber.
1901         (BuildbotSyncer.prototype.urlForBuildNumber): Updated in Buildbot 0.9 format.
1902         (BuildbotSyncer.prototype.urlForPendingBuild): Buildbot 0.9 has individual webpage for pending buildrequests as well. URL to that page.
1903         * unit-tests/buildbot-syncer-tests.js: Renamed BuildbotBuildEntry to BuildbotBuildEntryDeprecated.
1904         (sampleBuildData): Sample build data. Common method for in-progress and finished build data.
1905         (samplePendingBuildData): Sample data for a pending build. Separate method so that we can easily create sample data with multiple builds.
1906         (sampleInProgressBuildData): Ditto for in-progress build.
1907         (sampleFinishedBuildData): Ditto for finished build.
1908         (samplePendingBuild): Sample data for single pending build.
1909         (sampleInProgressBuild): Ditto for in-progress build.
1910         (sampleFinishedBuild): Ditto for finished build.
1911         (samplePendingBuildDeprecated): Renamed from samplePendingBuild.
1912         (sampleInProgressBuildDeprecated): Renamed from sampleInProgressBuild.
1913         (sampleFinishedBuildDeprecated): Renamed from sampleFinishedBuild.
1914         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for pending build.
1915         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for in-progress build.
1916         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for finished build.
1917         (BuildbotBuildEntry.it: Added unit-test for creating BuildbotBuildEntry for mix of in-progress and finished build.
1918
1919 2018-01-31  Dewei Zhu  <dewei_zhu@apple.com>
1920
1921         Should chose the best match during 'route' if there are multiple matches.
1922         https://bugs.webkit.org/show_bug.cgi?id=182326
1923
1924         Reviewed by Ryosuke Niwa.
1925
1926         r227749 made a change that 'analysisCategoryPage' will be added before 'analysisTaskPage'.
1927         As route names for both pages starts with 'analysis', whichever added first will be chosen.
1928         For a route like 'analysis/task/1'. As a result, 'analysisCategoryPage' will be chosen and
1929         this is not expected behavior. Adding the logic on the cases when route name does not extact
1930         match the route name, always choose the longest mathcing route name.
1931
1932         Also modernized the code of 'page-router.js' to use const & let instead of var.
1933
1934         Added a browser test to guard against this bug.
1935
1936         * browser-tests/index.html: Import 'page-router-tests.js'.
1937         * browser-tests/page-router-tests.js: Added unit test to guard against this bug.
1938         * public/v3/pages/page-router.js:
1939         (PageRouter.prototype.route): Added logic to find best matching in the case of inexact match.
1940         (PageRouter.prototype.pageDidOpen):
1941         (PageRouter.prototype._updateURLState):
1942         (PageRouter.prototype._serializeToHash):
1943         (PageRouter.prototype._deserializeFromHash):
1944         (PageRouter.prototype._serializeHashQueryValue):
1945         (PageRouter.prototype._deserializeHashQueryValue):
1946         (PageRouter.prototype._countOccurrences):
1947         (PageRouter):
1948
1949 2018-01-29  Dewei Zhu  <dewei_zhu@apple.com>
1950
1951         Should fetch owner commits in build-requests-fetcher.
1952         https://bugs.webkit.org/show_bug.cgi?id=182266
1953
1954         Reviewed by Ryosuke Niwa.
1955
1956         In a build request, owner commit of a commit is not always one of a commit in the commit set.
1957         Build request api should contain owner commits in the 'commits' field of the return value.
1958
1959         * public/include/build-requests-fetcher.php: Added logic to fetch owner commits and added them into 'commits'.
1960         * server-tests/api-build-requests-tests.js: Added a unit test.
1961         * server-tests/resources/mock-data.js:
1962         (MockData.set addTestGroupWithOwnerCommitNotInCommitSet): Added a test group with a build request, the commit set of which does
1963         not contain owner commit of one commit.
1964
1965 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
1966
1967         Add the support for reporting Speedometer 2.0 results to perf dashboard
1968         https://bugs.webkit.org/show_bug.cgi?id=182089
1969         <rdar://problem/36172346>
1970
1971         Rubber-stamped by Chris Dumez.
1972
1973         Apparently, this has always worked since the very first version of the perf dashboard added in r163688.
1974         The relevant code is at the line 313 of report-processor.php now.
1975
1976         Added regression tests for this feature since we didn't have any tests four years ago.
1977
1978         * server-tests/api-report-tests.js:
1979
1980 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
1981
1982         REGRESSION(r225898): The perf dashboard fails to open when there are no summary pages
1983         https://bugs.webkit.org/show_bug.cgi?id=182210
1984
1985         Rubber-stamped by Chris Dumez.
1986
1987         The bug was caused by TestFreshnessPage unconditionally assuming that summaryPageConfiguration is set.
1988         Fixed it by not creating TestFreshnessPage when there are no summary pages specified.
1989
1990         Also modernized the code to use const & let instead of var.
1991
1992         * public/v3/main.js:
1993         (main):
1994
1995 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
1996
1997         Perf dashboard's page title can be set to a previously visited page
1998         https://bugs.webkit.org/show_bug.cgi?id=182209
1999
2000         Rubber-stamped by Chris Dumez.
2001
2002         Before this patch, opening a page and navigating away from it could result in the page title
2003         getting set to that of the previously visited page after the new page had been opened.
2004
2005         This bug was caused by Page.render keep setting document.title even though the page is no longer
2006         the currently open page of the router. Fixed it by exiting early in Page.enqueueToRender when
2007         this page is not the currently open page of the router.
2008
2009         Also added basic tests for Page.
2010
2011         * browser-tests/index.html:
2012         * browser-tests/page-tests.js: Added.
2013         * public/v3/pages/page.js:
2014         (Page): Removed the unused second constructor argument.
2015         (Page.prototype.enqueueToRender): Fixed the bug.
2016         (Page.prototype.render): Use const instead of var.
2017
2018 2018-01-29  Ryosuke Niwa  <rniwa@webkit.org>
2019
2020         CommitLogViewer should not fetch commits in serial
2021         https://bugs.webkit.org/show_bug.cgi?id=182207
2022
2023         Rubber-stamped by Chris Dumez.
2024
2025         Fetch both the commits in the range as well as the preceding commit at once instead of
2026         fetching the preceding commit only after the commits in the range had been fetched.
2027
2028         * browser-tests/commit-log-viewer-tests.js: Fixed the tcoest case after r224227.
2029         * public/v3/components/commit-log-viewer.js:
2030         (CommitLogViewer.prototype._fetchCommitLogs): Fetch commits in parallel.
2031
2032 2018-01-24  Dewei Zhu  <dewei_zhu@apple.com>
2033
2034         Check existence of 'node_modules_dir' before creating it.
2035         https://bugs.webkit.org/show_bug.cgi?id=182040
2036
2037         Reviewed by Aakash Jain.
2038
2039         Fix the bug introduced in r227395.
2040
2041         * tools/run-tests.py: Added directory existence check.
2042
2043 2018-01-22  Dewei Zhu  <dewei_zhu@apple.com>
2044
2045         Fix the bug that 'TestGroupResultsViewer' creates unnecessary rows.
2046         https://bugs.webkit.org/show_bug.cgi?id=181967
2047
2048         Reviewed by Ryosuke Niwa.
2049
2050         Fixed a bug caused by a typo in CommitSet.equals, which makes it returns incorrect results for most
2051         comparison between a CommitSet and a MeasurementCommitSet.
2052
2053         MeasurementCommitSet does not have full information for the commits, thus, it cannot build mappings
2054         between root/patch/owner commit/requires build to repository. When querying whether a given repository
2055         needs to be built, MeasurementCommitSet will return undefined. Due to 'undefined != false', this
2056         equality check will fail. Making 'CommitSet.requiresBuildForRepository' defaults to 'false' would fix
2057         this bug.
2058
2059         * public/v3/models/commit-set.js:
2060         (CommitSet.prototype.requiresBuildForRepository): Make it return false when key does not exist
2061         instead of 'undefined'.
2062         (CommitSet.prototype.equals): Fixed the typo that causes the bug.
2063         Use wrapped functions instead of querying the mapping directly.
2064         * unit-tests/commit-set-tests.js: Added unit tests.
2065
2066 2018-01-18  Dewei Zhu  <dewei_zhu@apple.com>
2067
2068         'run-test.py' script should make sure 'node_modules' directory exists before installing node packages.
2069         https://bugs.webkit.org/show_bug.cgi?id=181808
2070
2071         Reviewed by Ryosuke Niwa.
2072
2073         'run-test.py' will fail if 'node_modules' does not exist before running this script.
2074         Instead of calling 'os.chdir' to change directory, use 'cwd' in subprocess instead.
2075
2076         * tools/run-tests.py: Added the logic to ensure 'node_modules' exists.
2077         Also use 'cwd' in subprocess.call instead of calling 'os.chdir' ahead.
2078
2079 2018-01-20  Dewei Zhu  <dewei_zhu@apple.com>
2080
2081         Extend 'ifBuilt' config key to set property based on whether certain repositories are built or not.
2082         https://bugs.webkit.org/show_bug.cgi?id=181906
2083
2084         Reviewed by Ryosuke Niwa.
2085
2086         Before this change, 'ifBuilt' will always set specified property for test properties as long as there
2087         is a build type build in the same build request group. However, this is no longer valid as we don't
2088         want to set specified property for testing when only owned commit is built in previous build.
2089         'ifBuilt' needs to conditionally set property based on whether certain required repositories are built.
2090         Empty required repository list means no requirement on repository to set property.
2091
2092         * tools/js/buildbot-syncer.js:
2093         (BuildbotSyncer.prototype._propertiesForBuildRequest):In the case of 'built', only set property when
2094         repository requirment is meet and there is a 'build' root request in the same build request group.
2095         (BuildbotSyncer._parseRepositoryGroup): Extend 'ifBuild' to pass information based on contition.
2096         * unit-tests/buildbot-syncer-tests.js: Added unit tests.
2097
2098 2018-01-19  Dewei Zhu  <dewei_zhu@apple.com>
2099
2100         Should reject updating a build request which has an associated build.
2101         https://bugs.webkit.org/show_bug.cgi?id=181893
2102
2103         Reviewed by Ryosuke Niwa.
2104
2105         Current code does not prevent submitting to same build request multiple times.
2106         This could lead to a build losing its associated build request.
2107         As a result, this build will be visible in charts which is not right.
2108         Added a check when a build request is reported.
2109         Addressed a 'FIXME' for the race condition inside ReportProcessor->resolve_build_id by surrounding
2110         it with a database transaction.
2111
2112         * public/include/report-processor.php:
2113         Wrap adding platform and resolve_build_id with a database transaction.
2114         Add a check to make sure only a build request has no associated build can be updated.
2115         * server-tests/api-report-tests.js: Added unit tests accordingly.
2116
2117 2018-01-18  Dewei Zhu  <dewei_zhu@apple.com>
2118
2119         Should allow updating a build-request to 'canceled'.
2120         https://bugs.webkit.org/show_bug.cgi?id=181819
2121
2122         Reviewed by Ryosuke Niwa.
2123
2124         It's possible syncing script update a build-request to 'canceled' state.
2125
2126         * public/api/build-requests.php: Added 'canceled' as an acceptable update state.
2127         * server-tests/api-build-requests-tests.js: Added a unit test to update a build-request to 'canceled'.
2128
2129 2018-01-18  Aakash Jain  <aakash_jain@apple.com>
2130
2131         Add support for builderNameToIDMap in BuildbotSyncer
2132         https://bugs.webkit.org/show_bug.cgi?id=176526
2133
2134         Reviewed by Ryosuke Niwa.
2135
2136         * tools/js/buildbot-syncer.js:
2137         (BuildbotSyncer._loadConfig): Added builderNameToIDMap parameter. It would be used later on.
2138         (BuildbotSyncer._resolveBuildersWithPlatforms): Ditto.
2139         (BuildbotSyncer._validateAndMergeConfig): Added builderID as a valid config parameter.
2140         * tools/js/buildbot-triggerable.js:
2141         (BuildbotTriggerable.prototype.getBuilderNameToIDMap): Method to fetch BuilderNameToIDMap from Buildbot 0.9.
2142         (BuildbotTriggerable.prototype.getBuilderNameToIDMapDeprecated): Method to fetch BuilderNameToIDMap from Buildbot 0.8.
2143         (BuildbotTriggerable.prototype.initSyncers): Updated to use getBuilderNameToIDMap.
2144         * unit-tests/buildbot-syncer-tests.js: Updated unit-tests.
2145         * server-tests/resources/mock-data.js:
2146         (MockData.buildbotBuildersURLDeprecated): URL for fetching Builders list.
2147         (MockData.buildbotBuildersURL): Ditto for Buildbot 0.9
2148         (MockData.mockBuildbotBuildersDeprecated): Sample builders data for Buildbot 0.8
2149         (MockData.mockBuildbotBuilders): Ditto for Buildbot 0.9
2150         * server-tests/tools-buildbot-triggerable-tests.js: Added test for getBuilderNameToIDMap. Updated tests to handle
2151         newly added promise for fetching builders list from Buildbot.
2152         * server-tests/tools-sync-buildbot-integration-tests.js: Ditto.
2153
2154 2018-01-18  Ryosuke Niwa  <rniwa@webkit.org>
2155
2156         Charts can be empty when values are all identical
2157         https://bugs.webkit.org/show_bug.cgi?id=181828
2158
2159         Reviewed by Alexey Proskuryakov.
2160
2161         Fixed the bug that when SampleVarianceUpperTriangularMatrix can store -Infinity as the initial cost
2162         of some entries when the sample standard deviation between two points turns out to be 0,
2163         and cause splitIntoSegmentsUntilGoodEnough to return undefiend because no segmentation has a finite cost.
2164
2165         Also fixed the bug that the time series chart fails to show any data points when all data points have
2166         identical values as the entire y-coordinate gets collapsed to an empty value range by adjusting the max value
2167         when min & max values are identical.
2168
2169         * public/v3/components/time-series-chart.js:
2170         (TimeSeriesChart.prototype._ensureValueRangeCache): Raise the max slightly when min & max are identical
2171         to avoid the chart becoming empty. Otherwise valueDiff in _computeVerticalRenderingMetrics becomes 0
2172         and value-to-y-coordinate conversion always results in NaN.
2173         * public/shared/statistics.js:
2174         (Statistics..SampleVarianceUpperTriangularMatrix):
2175         * unit-tests/statistics-tests.js: Added a test case.
2176
2177 2018-01-18  Ryosuke Niwa  <rniwa@webkit.org>
2178
2179         Don't fetch more than two builds to check duplicity of builds in ReportProcessor
2180         https://bugs.webkit.org/show_bug.cgi?id=181786
2181
2182         Reviewed by Wenson Hsieh.
2183
2184         Limit the number of builds to check to avoid using a lot of memory with a long delay.
2185
2186         * public/include/report-processor.php:
2187         (ReportProcessor::resolve_build_id): 
2188
2189 2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>
2190
2191         Rename config.json to config.json.sample
2192         https://bugs.webkit.org/show_bug.cgi?id=181785
2193
2194         Reviewed by Wenson Hsieh.
2195
2196         * .gitignore: Added config.json.
2197         * ReadMe.md: Updated the instruction.
2198         * config.json.sample: Renamed from config.json.
2199
2200 2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>
2201
2202         Unreviewed build fixes in TestGroupResultsViewer.
2203
2204         * public/v3/components/test-group-results-viewer.js:
2205         (TestGroupResultsViewer.prototype.render): _renderCurrentMetricsLazily was never called.
2206         (TestGroupResultsViewer.prototype._buildRowForMetric): Don't try to render null or NaN.
2207
2208 2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>
2209
2210         Fix perf dashboard tests for node v8
2211         https://bugs.webkit.org/show_bug.cgi?id=181782
2212
2213         Reviewed by Wenson Hsieh.
2214
2215         Fixed the various tests for node.js v8, which is the latest LTS version.
2216
2217         * server-tests/api-manifest-tests.js: Replaced the missing Triggerable.acceptsTest by Triggerable.acceptedTests
2218         after r226836.
2219         * server-tests/api-measurement-set-tests.js: Added "Z" to the end timestamps to force UTF timezone now that Date
2220         in node.js parses using the local timezone by default.
2221         * server-tests/resources/test-server.js:
2222         (TestServer.prototype._restoreDataDirectory): Fixed the bug that this function was erroneously using the async
2223         function to rename a directory per new warnings. This code was racy, and it used to cause a test error occasionally.
2224         * server-tests/tools-os-build-fetcher-tests.js: Fixed the assertions to make it work in the latest node.js.
2225         * unit-tests/measurement-set-tests.js:
2226         (waitForMeasurementSet): Wait for setTimeout to cycle through all microtasks instead of just two microtask cycles.
2227
2228 2018-01-11  Ryosuke Niwa  <rniwa@webkit.org>
2229
2230         Cannot trigger Dromaeo tests on internal perf try bots
2231         https://bugs.webkit.org/show_bug.cgi?id=179712
2232
2233         Reviewed by Chris Dumez.
2234
2235         The bug was caused by CustomAnalysisTaskConfigurator only showing the top-level tests that are triggerable
2236         instead of the list of highest level tests that are triggerable.
2237
2238         * public/v3/components/custom-analysis-task-configurator.js:
2239         (CustomAnalysisTaskConfigurator.prototype.selectTests): Update the test group name when a new test is picked.
2240         (CustomAnalysisTaskConfigurator.prototype.selectPlatform):
2241         (CustomAnalysisTaskConfigurator.prototype._didUpdateSelectedPlatforms): Extracted from selectPlatform.
2242         (CustomAnalysisTaskConfigurator.prototype._renderTriggerableTests): Include the list of all highest-level tests
2243         which are triggerable.
2244         (CustomAnalysisTaskConfigurator.prototype._renderRadioButtonList): Added labelForObject which returns the label
2245         to be used in the list items. For tests, we want to use the full name, not just its label.
2246         * public/v3/models/analysis-task.js:
2247         (AnalysisTask.fetchById):
2248         * public/v3/models/triggerable.js:
2249         (Triggerable.prototype.acceptedTests): Added.
2250         (Triggerable.prototype.acceptsTest): Deleted.
2251
2252 == Rolled over to ChangeLog-2018-01-01 ==