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