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