| 2017-12-26 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Test freshness page should use build time instead of commit time to determine the freshness of the data point. |
| https://bugs.webkit.org/show_bug.cgi?id=181156 |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Build time is a better data point freshness indicator. Test freshness page is designed to highlight test failures. |
| Using commit time will result in including the compiling and test running time which does not quite match the |
| definition of data point fresshness. |
| |
| * public/v3/pages/test-freshness-page.js: |
| (TestFreshnessPage.prototype._fetchTestResults): Use build time instead of commit time. |
| |
| 2017-12-21 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Add UI for A/B testing on owned commits. |
| https://bugs.webkit.org/show_bug.cgi?id=177993 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Customizable test group form should support specifying and A/B testing owned commits. |
| Introduce 'IntermediateCommitSet' to achieve the goal of specifying owned commits for A/B test. |
| In order to support configure A/B testing that may need to add/remove owned commits, CommitSet may be the |
| closest thing we can get. However, it is a subclass of DataModelObject, which means CommitSet is a representation |
| of 'commit_sets' table and can only be updated from server data. Thus, we want something like CustomCommitSet that |
| is not a representation of database table, but unlike CustomCommitSet, it should store information about commits |
| rather than a revision. As a result, IntermediateCommitSet is introduced. For a longer term, we may replace |
| CustomCommitSet with IntermediateCommitSet as it carries more information and could potentially simplify some |
| CustomCommitSet related APIs by using commit id instead of commit revision. |
| Extend ButtonBase class so that we can enable/disable a button. |
| |
| * public/v3/components/button-base.js: |
| (ButtonBase): |
| (ButtonBase.prototype.setDisabled): Enable/disable a button. |
| (ButtonBase.prototype.render): |
| (ButtonBase.cssTemplate): Added css rule for disabled button. |
| * public/v3/components/combo-box.js: Added. |
| (ComboBox): |
| (ComboBox.prototype.didConstructShadowTree): Setup text field. |
| (ComboBox.prototype.render): |
| (ComboBox.prototype._candidateNameForCurrentIndex): Returns candidate name based on current index. |
| (ComboBox.prototype._candidateElementForCurrentIndex): Returns a list element based on current index. |
| (ComboBox.prototype._autoCompleteIfOnlyOneMatchingItem): Supports auto completion. |
| (ComboBox.prototype._moveCandidate): Supports arrow up/down. |
| (ComboBox.prototype._updateCandidateList): Hide/unhide candidate list and high-light selected candidate. |
| (ComboBox.prototype._renderCandidateList): Render candidate list base on value on text field. |
| (ComboBox.htmlTemplate): |
| (ComboBox.cssTemplate): |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm): |
| (CustomizableTestGroupForm.prototype.didConstructShadowTree): Only fetch the full commits when we about to create a customized A/B tests. |
| (CustomizableTestGroupForm.prototype._computeCommitSetMap): Compute the CustomCommitSet based on IntermediateCommitSet and |
| other revision related information in some map. |
| (CustomizableTestGroupForm.prototype.render): |
| (CustomizableTestGroupForm.prototype._renderCustomRevisionTable): |
| (CustomizableTestGroupForm.prototype._constructTableBodyList): This function builds table body for each highest level repository. |
| It will also include the owned repository rows in the same table body if the commits for highest level repository owns other commits. |
| (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithoutOwner): Build a table row for a highest level repository. |
| (CustomizableTestGroupForm.prototype._constructTableRowForCommitsWithOwner): Build a table row for repository with owner. |
| (CustomizableTestGroupForm.prototype._constructTableRowForIncompleteOwnedCommits): Build a table row for an unspecified repository. |
| (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons): Update the logic to support build radio buttons for the owned repository rows. |
| (CustomizableTestGroupForm.cssTemplate): |
| * public/v3/components/minus-button.js: Added. |
| (MinusButton): |
| (MinusButton.buttonContent): |
| * public/v3/components/owned-commit-viewer.js: |
| (OwnedCommitViewer.prototype._renderOwnedCommitTable): |
| * public/v3/components/plus-button.js: Added. |
| (PlusButton): |
| (PlusButton.buttonContent): |
| * public/v3/index.html: Added new components. |
| * public/v3/models/commit-log.js: Added owner and owned commit information. |
| (CommitLog): |
| (CommitLog.prototype.ownedCommits): Returns a list of commits owned by current commit. |
| (CommitLog.prototype.ownerCommit): Return owner commit of current commit. |
| (CommitLog.prototype.setOwnerCommits): Set owner commit of current commit. |
| (CommitLog.prototype.label): Remove unnecessary 'else'. |
| (CommitLog.prototype.diff): Remove unused 'fromRevisionForURL' and tiny code cleanup. |
| (CommitLog.prototype.ownedCommitForOwnedRepository): |
| (CommitLog.prototype.fetchOwnedCommits): Sets the owner for those owned commits. The owner of a commit with multiple owner |
| commits will be overwritten by each time this function is called. |
| (CommitLog.ownedCommitDifferenceForOwnerCommits): A more generic version of diffOwnedCommits. diffOwnedCommits only accepts 2 commits, |
| but ownedCommitDifferenceForOwnerCommits supports multiple commits. |
| (CommitLog.diffOwnedCommits): Deleted and should use 'CommitLog.ownedCommitDifferenceForOwnerCommits' instead. |
| * public/v3/models/commit-set.js: |
| (CommitSet.prototype.topLevelRepositories): |
| (CommitSet.prototype.commitForRepository): |
| (IntermediateCommitSet): Take CommitSet as argument, note the commit from CommitSet doesn't contains full information of the commit. |
| Always call 'fetchFullCommits' once before any further usages. |
| (IntermediateCommitSet.prototype.fetchCommitLogs): Fetch all commits information in current commit set. |
| (IntermediateCommitSet.prototype._fetchCommitLogAndOwnedCommits): Fetch commit log and owned commits if necessary. |
| (IntermediateCommitSet.prototype.updateRevisionForOwnerRepository): Updates a commit for a repository by given a revision of the repository. |
| (IntermediateCommitSet.prototype.setCommitForRepository): Sets a commit for a repository in commit set. |
| (IntermediateCommitSet.prototype.removeCommitForRepository): Removes a commit for a repository in commit set. |
| (IntermediateCommitSet.prototype.ownsCommitsForRepository): Returns whether the commit for repository owns commits. |
| (IntermediateCommitSet.prototype.repositories): Returns all repositories in the commit set. |
| (IntermediateCommitSet.prototype.highestLevelRepositories): Returns all repositories those don't have an owner. |
| (IntermediateCommitSet.prototype.commitForRepository): Returns a commit for a given repository. |
| (IntermediateCommitSet.prototype.ownedRepositoriesForOwnerRepository): Returns all repositories owned by a given repository in current commit set. |
| (IntermediateCommitSet.prototype.ownerCommitForRepository): Returns owner commit for a given owned repository. |
| * tools/js/v3-models.js: Added import for 'IntermediateCommitSet'. |
| * unit-tests/commit-log-tests.js: Updated unittest which tests 'ownerCommit' function. |
| * unit-tests/commit-set-tests.js: Added unit tests for IntermediateCommitSet. |
| |
| 2017-12-13 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Add a test freshness page. |
| https://bugs.webkit.org/show_bug.cgi?id=180126 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Added a page to show freshness of a test. |
| The test freshness page reports on the same set of tests as the one shown in the summary page. |
| Use a logistic function to evaluate the freshness of the data points. |
| This function has the desired property which increase dramatically when it close to the center of the graph. |
| 'acceptableLastDataPointDurationInHour' configs the center of the graph. |
| |
| * public/include/manifest-generator.php: |
| * public/v3/components/freshness-indicator.js: Added. |
| (FreshnessIndicator): A cell of the test freshness table, color will transit from green to red. |
| (FreshnessIndicator.prototype.update): Update the the data point information and triggers |
| the cell to re-render if anything changes. |
| (FreshnessIndicator.prototype._renderIndicator): Re-render the indicator. |
| (FreshnessIndicator.prototype.render): Render the box color base on a logistic function. |
| (FreshnessIndicator.prototype._createIndicator): |
| (FreshnessIndicator.htmlTemplate): |
| (FreshnessIndicator.cssTemplate): |
| * public/v3/index.html: |
| * public/v3/main.js: Added test freshness page. |
| (main): |
| * public/v3/models/build-request.js: Refactored waitingTime function to make it reusable. |
| (BuildRequest.formatTimeInterval): Format time interval in million seconds to more user friendly text. |
| (BuildRequest.prototype.waitingTime): |
| * public/v3/pages/test-freshness-page.js: Added. |
| (TestFreshnessPage): |
| (TestFreshnessPage.prototype.name): |
| (TestFreshnessPage.prototype._loadConfig): Load config from summary page configurations. |
| (TestFreshnessPage.prototype.open): |
| (TestFreshnessPage.prototype._fetchTestResults): |
| (TestFreshnessPage.prototype.render): |
| (TestFreshnessPage.prototype._renderTable): |
| (TestFreshnessPage.prototype._isValidPlatformMetricCombination): Return whether a platform |
| and metric combination is valid. |
| (TestFreshnessPage.prototype._constructTableCell): |
| (TestFreshnessPage.cssTemplate): |
| (TestFreshnessPage.prototype.routeName): |
| * server-tests/api-manifest-tests.js: Added 'warningHourBaseline' so that we can config the |
| parameter of logistic funciton. |
| * unit-tests/build-request-tests.js: Added unit tests for formatTimeInterval. |
| |
| 2017-11-02 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Add platform argument for syncing script. |
| https://bugs.webkit.org/show_bug.cgi?id=179162 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Syncing script should pass platform name to buildbot if platform argument is specified in configuration. |
| |
| * server-tests/tools-sync-buildbot-integration-tests.js: |
| (return.createTriggerable.configWithPlatformName.then): Added unit test for platform argument. |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer): Add '_platformPropertyName' property. |
| (BuildbotSyncer.prototype.scheduleRequest): Add '_platformPropertyName' to build property if specified. |
| (BuildbotSyncer._loadConfig): Read '_plaformPropertyName' from config. |
| |
| 2017-10-30 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Limit the number of results to be submitted in one submission. |
| https://bugs.webkit.org/show_bug.cgi?id=179045 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Submitting results for a large number of builds with owned commit information may exceed the size limit of php. |
| Added a way to split the results into groups of certain sizes, and submit them one by one. |
| |
| * server-tests/tools-os-build-fetcher-tests.js: Updated the unit tests. |
| * tools/js/os-build-fetcher.js: Added '_maxNumberOfResultsPerSubmit' which can be specified by a configuration but also use 20 as default value. |
| (prototype.fetchAndReportNewBuilds): Instead of submitting all results once, split them into groups and submit them one by one. |
| (prototype._fetchAvailableBuilds): 'label' is already quoted, should remove unnecessary quotes. |
| (prototype._addOwnedCommitsForBuild): Added logging to log the size of owned commits. |
| |
| 2017-10-31 Dewei Zhu <dewei_zhu@apple.com> |
| |
| OwnedCommitViewer should include the preceding commit. |
| https://bugs.webkit.org/show_bug.cgi?id=179047 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| OwnedCommitViewer shows the difference between owned commits. |
| To show changes made by first owned commit, we need to have the preceding commit information. |
| |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer): |
| (CommitLogViewer.prototype._fetchCommitLogs): Fetch preceding commit if the commits fetched is not a single commit. |
| (CommitLogViewer.prototype.render): |
| (CommitLogViewer.prototype._renderCommitList): Conditionally rendering preceding commit in commit list. |
| |
| 2017-10-24 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Fix a bug in syncing script that test/build syncer is never set. |
| https://bugs.webkit.org/show_bug.cgi?id=178772 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Neither 'buildSyncer' nor 'testSyncer' is ever set. |
| Added a unit test to cover this case. |
| |
| * server-tests/tools-sync-buildbot-integration-tests.js: |
| (createTriggerable): Refactor it to allow customized name. |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers): Update syncer info accordingly. |
| (BuildbotTriggerable._testGroupMapForBuildRequests): Initialize build and test syncer to null. |
| |
| 2017-10-24 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Owner commit does not necessarily exist in the same commit set for an owned commit. |
| https://bugs.webkit.org/show_bug.cgi?id=178763 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Remove the check based on previous incorrect assumption. |
| Added unit tests to cover this change. |
| |
| * public/privileged-api/create-test-group.php: |
| * server-tests/privileged-api-create-test-group-tests.js: |
| (return.addTriggerableAndCreateTask.string_appeared_here.then.id.taskId.id.then): |
| |
| 2017-10-20 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Update perf dashboard upload logic to support uploading binaries from owned commits. |
| https://bugs.webkit.org/show_bug.cgi?id=178610 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Update build requests to 'completed' only when all commit set items are satisfied. |
| Extend 'repositoryList' parameter to be able to specified own commit information. |
| Items in 'repositoryList' can either be a string for top level repository, |
| or a dictionary with two keys: 'ownerRepository' and 'ownedRepository'. |
| |
| * public/api/upload-root.php: Extend upload logic for support uploading binaries from owned commits. |
| * server-tests/api-upload-root-tests.js: Added unit tests. |
| * server-tests/tools-sync-buildbot-integration-tests.js: Added unit tests. |
| |
| 2017-10-05 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Add try-bot button on perf analysis status page. |
| https://bugs.webkit.org/show_bug.cgi?id=177995 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Add 'Create' button on analysis status top-left corner to create trybot analysis task. |
| |
| * public/v3/pages/analysis-category-toolbar.js: |
| (AnalysisCategoryToolbar.cssTemplate): |
| |
| 2017-09-28 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Update syncing script to be able to build binary for commit set with owned commits. |
| https://bugs.webkit.org/show_bug.cgi?id=177225 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Added support for syncing script to be able to schedule builds to build binary for owned commits. |
| Introduces 'ifRepositorySet' and 'ownedRevisions' in 'buildProperties'. |
| 'ifRepositorySet' will conditionaly set a build property if at least one of the repositories it specified requires build. |
| 'ownedRevisions' specifies owned commits revision informations. |
| |
| * public/v3/models/commit-set.js: |
| (CommitSet): Added '_ownerRepositoryToOwnedRepositoriesMap'. |
| (CommitSet.prototype.updateSingleton): Reset '_ownerRepositoryToOwnedRepositoriesMap'. |
| (CommitSet.prototype._updateFromObject): Only update '_repositoryToCommitOwnerMap' and '_ownerRepositoryToOwnedRepositoriesMap' when 'commitOwner' exists. |
| (CommitSet.prototype.ownerCommitForRepository): Returns a sorted list of top level repositories. |
| (CommitSet.prototype.ownedRepositoriesForOwnerRepository): Returns owned repositories given a owner repository. |
| (CustomCommitSet.prototype.ownerCommitForRepository): Returns a sorted list of top level repositories. |
| * public/v3/models/triggerable.js: |
| (prototype.accepts): It should only check against top-level repositories. Removed a deprecated 'FIXME'. |
| * server-tests/tools-sync-buildbot-integration-tests.js: Added unit test for building owned commits binary. |
| (createTriggerable): Added conditional 'ifRepositorySet' and 'ownedRevisions' in the repository groups. |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): |
| Added logic to conditionaly create build property for 'ifRepositorySet'. |
| Added logic to create 'ownedRevisions' based on the owner repositories it specified. |
| (BuildbotSyncer._parseRepositoryGroup): Build property template should be able to handle 'ifRepositorySet' and 'ownedRevisions'. |
| * unit-tests/buildbot-syncer-tests.js: Added unit tests for 'ifRepositorySet' and 'ownedRevisions'. |
| * unit-tests/commit-set-tests.js: Added unit tests for 'topLevelRepositoriesSortedByNamePreferringOnesWithURL'. |
| * unit-tests/resources/mock-v3-models.js: Added a repository group contains 'ios', 'webkit' and 'ownerRepository'. |
| |
| 2017-09-19 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Use 'owned commit' instead of 'sub commit' whenever refers to a commit owned by another commit. |
| https://bugs.webkit.org/show_bug.cgi?id=177178 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| We use both 'owned commit' and 'sub commit' to refer to a commit owned by an another commit. We should use one term instead of two. |
| Renaming 'subCommit' to 'ownedCommit', 'ownsSubCommit' to 'ownsCommit' and 'sub-commit' to 'owned-commit'. |
| |
| * browser-tests/commit-log-viewer-tests.js: |
| * public/api/commits.php: |
| * public/api/report-commits.php: |
| * public/include/commit-log-fetcher.php: |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer.prototype._renderCommitList): |
| * public/v3/components/owned-commit-viewer.js: Renamed from Websites/perf.webkit.org/public/v3/components/sub-commit-viewer.js. |
| (OwnedCommitViewer): |
| (OwnedCommitViewer.prototype.didConstructShadowTree): |
| (OwnedCommitViewer.prototype._toggleVisibility): |
| (OwnedCommitViewer.prototype.render): |
| (OwnedCommitViewer.prototype._renderOwnedCommitTable): |
| (OwnedCommitViewer.htmlTemplate): |
| (OwnedCommitViewer.cssTemplate): |
| * public/v3/index.html: |
| * public/v3/models/commit-log.js: |
| (CommitLog): |
| (CommitLog.prototype.updateSingleton): |
| (CommitLog.prototype.ownsCommits): |
| (CommitLog.prototype.fetchOwnedCommits): |
| (CommitLog.prototype._buildOwnedCommitMap): |
| (CommitLog.diffOwnedCommits): |
| (CommitLog.prototype.ownsSubCommits): Deleted. |
| (CommitLog.prototype.fetchSubCommits): Deleted. |
| (CommitLog.prototype._buildSubCommitMap): Deleted. |
| (CommitLog.diffSubCommits): Deleted. |
| * server-tests/api-commits-tests.js: |
| * server-tests/api-report-commits-tests.js: |
| * server-tests/tools-os-build-fetcher-tests.js: |
| (return.waitForInvocationPromise.then): |
| (string_appeared_here.return.waitForInvocationPromise.then): |
| * tools/js/os-build-fetcher.js: |
| (prototype._fetchAvailableBuilds): |
| (prototype._addOwnedCommitsForBuild): |
| (prototype._addSubCommitsForBuild): Deleted. |
| * unit-tests/commit-log-tests.js: |
| (return.commit.fetchOwnedCommits.then): |
| (return.fetchingPromise.then): |
| (return.commit.fetchSubCommits.then): Deleted. |
| |
| 2017-09-12 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Performance Dashboard backend should support A/B testing for owned components. |
| https://bugs.webkit.org/show_bug.cgi?id=175978 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Add backend change for Performance Dashboard to support A/B testing for owned components. |
| Added 'commitset_commit_owner' and 'commitset_requires_build' columns to 'commit_set_items' table. |
| 'commitset_commit_owner' referrs to determine a commit with owner. |
| 'commitset_requires_build' indicates whether a root build is required. |
| This will be set true whenever commit_set_item specifies a patch file, |
| or commit_set_item is commit with owner commit, |
| or any other commit from same repository and in same build-request group requires build. |
| SQL for updating existing database: |
| 'BEGIN; |
| ALTER TABLE commit_set_items ADD COLUMN commitset_commit_owner integer REFERENCES commits DEFAULT NULL, ADD COLUMN commitset_requires_build boolean DEFAULT FALSE; |
| UPDATE commit_set_items SET commitset_requires_build = TRUE WHERE commitset_patch_file IS NOT NULL; |
| UPDATE commit_set_items SET commitset_requires_build = TRUE WHERE commitset_set IN (SELECT requests1.request_commit_set FROM build_requests as requests1 JOIN build_requests as requests2 ON requests1.request_group = requests2.request_group JOIN commit_set_items as item ON item.commitset_set = requests2.request_commit_set WHERE item.commitset_patch_file IS NOT NULL); |
| ALTER TABLE commit_set_items ADD CONSTRAINT commitset_item_with_patch_must_requires_build CHECK (commitset_patch_file IS NULL OR commitset_requires_build = TRUE), |
| ADD CONSTRAINT commitset_item_with_owned_commit_must_requires_build CHECK (commitset_commit_owner IS NULL OR commitset_requires_build = TRUE); |
| END;' |
| |
| * init-database.sql: Updated 'commit_set_items' table. |
| * public/admin/triggerables.php: Only top level repository should show on triggerables page. |
| * public/include/build-requests-fetcher.php: Added 'commitOwner' and 'requireBuild' to 'revision_items'. Added 'commitOwner' field to a commit. |
| * public/include/db.php: Should be able to insert boolean value to database without explicted convert to 't' or 'f'. |
| * public/privileged-api/create-test-group.php: |
| Added logic to process 'commitOwner' and 'requireBuild' in 'commit_set_items'. |
| Removed a 'FIXME' that has been addressed before this commit. |
| * public/v3/models/build-request.js: |
| (BuildRequest.constructBuildRequestsFromData): Set 'commitOwner' field for a commit set item. |
| * public/v3/models/commit-set.js: |
| (CommitSet): Added maps for repository to commit owner and whether a repository requires builds. |
| (CommitSet.prototype.updateSingleton): |
| (CommitSet.prototype._updateFromObject): |
| (CommitSet.prototype.ownerRevisionForRepository): Returns owner revision for a given repository in current commit set. |
| (CommitSet.prototype.requiresBuildForRepository): Returns whether a repository need to build. |
| (CommitSet.prototype.equals): Equality check should include 2 new maps. |
| (CustomCommitSet): CustomCommitSet should be able to store commit with an owner commit. |
| (CustomCommitSet.prototype.setRevisionForRepository): Added each revision list entry should have 'ownerRevision'(null by default). |
| (CustomCommitSet.prototype.equals): Equality check should also check the equality of 'ownerRevision'. |
| (CustomCommitSet.prototype.ownerRevisionForRepository): Returns a owner revision for a given repository. |
| * public/v3/models/repository.js: |
| (Repository.prototype.findOwnedRepositoryByName): Return an repository owned by current repository with a given name. |
| * public/v3/models/test-group.js: Added 'ownerRevision' field in each entry of revisionSet. |
| * server-tests/api-build-requests-tests.js: Added tests. |
| * server-tests/privileged-api-create-test-group-tests.js: Added tests. |
| * server-tests/privileged-api-upload-file-tests.js: Fix unit tests by setting'requires_build' field to be true when updating commit_set_item which has a patch.. |
| * server-tests/resources/mock-data.js: Added mock build requests with commit sets contain owned commits. |
| (MockData.jscRepositoryId): Returns id for JavaScriptsCore repository. |
| (MockData.addMockConfiguration): Added mock JavaScriptCore and owned JavaScriptCore repositories and commits associated with them. |
| (MockData.ownedJSCRepositoryId): Added a JavaScriptCore repository with WebKit as owner. |
| (MockData.addMockConfiguration): Added mock data for test cases those require a commit with a owner commit. |
| (MockData.addTestGroupWithOwnedCommits): Added mock data for analysis tasks, the build requires of which contains owned commits. |
| (MockData.set addAnotherTriggerable): Added another triggerable which has mac, webkit and javascript core repositories as triggerable repository group. |
| (MockData.set addAnotherMockTestGroup): Added another mock test group. |
| * tools/js/v3-models.js: Import CustomCommitSet. |
| * unit-tests/resources/mock-v3-models.js: Added an owned webkit repository. |
| * unit-tests/commit-set-tests.js: Added unit tests CustomCommitSet. |
| |
| 2017-09-15 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Should not mark a platform as missing in summary page if all expecting metrics are exlucded. |
| https://bugs.webkit.org/show_bug.cgi?id=176970 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| In summary page, if all metrics for a test are excluded in excludedConfigurations for a platform, this platform should not be marked as missing. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPageConfigurationGroup): |
| |
| 2017-09-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task page shows an empty results for an irrelevant top-level test |
| https://bugs.webkit.org/show_bug.cgi?id=175252 |
| |
| Reviewed by Antti Koivisto. |
| |
| The bug was caused by TestGroupResultsViewer always listing every top-level test which has a result for the |
| entire analysis task. Since a custom analysis task (perf try bots) allows multiple tests to be tested in each |
| group, we have to only list the tests which contains results in a particular test group. |
| |
| * public/v3/components/test-group-results-viewer.js: |
| (TestGroupResultsViewer.prototype.render): Find the tests that have results for the current test group instead |
| of for any test group in this analysis task. |
| any test |
| * public/v3/models/analysis-results.js: |
| (AnalysisResults): |
| (AnalysisResults.prototype.topLevelTestsForTestGroup): Renamed from highestTests. Now takes a test group |
| as an argument. |
| (AnalysisResults.prototype._computedTopLevelTests): Renamed from _computeHighestTests. Filters the results |
| with the specified test group. |
| |
| 2017-09-06 Aakash Jain <aakash_jain@apple.com> |
| |
| Add initSyncers method in BuildbotTriggerable |
| https://bugs.webkit.org/show_bug.cgi?id=176125 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| * tools/sync-buildbot.js: |
| (syncLoop): Use initSyncers() which returns a promise. Modified to handle the promise. |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable): Invokes initSyncers() appropriately. |
| (BuildbotTriggerable.prototype.initSyncers): Returns a promise which initialize all the syncers. |
| * server-tests/tools-buildbot-triggerable-tests.js: Updated tests to handle initSyncers(). |
| * server-tests/tools-sync-buildbot-integration-tests.js: Ditto. |
| |
| 2017-09-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a button to show two weeks of data to perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=176438 |
| |
| Reviewed by Saam Barati. |
| |
| Add "2W" button to show 14 days of data on dashboard pages. |
| |
| * public/v3/pages/dashboard-toolbar.js: |
| (DashboardToolbar): |
| |
| 2017-08-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. OS X "revision" can have a space. |
| |
| * public/include/commit-log-fetcher.php: |
| |
| 2017-08-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make it possible to specify A/B testing revision with a partial hash |
| https://bugs.webkit.org/show_bug.cgi?id=176047 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Added the support for specifying a partial hash in A/B testing instead of the full hash. |
| |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::find_commit_id_by_revision): Extracted from associate-commit.php. |
| * public/privileged-api/associate-commit.php: |
| (main): |
| * public/privileged-api/create-test-group.php: |
| (main): Use find_commit_id_by_revision here to support scheduling an A/B testing with a partial hash. |
| * server-tests/privileged-api-create-test-group-tests.js: |
| (createAnalysisTask): Make it possible to customize revision string in some test cases. |
| * server-tests/resources/test-server.js: |
| (TestServer.prototype._stopApache): Fixed the bug that cleanup step always fails whenever the test file |
| runs more than 8s. |
| |
| 2017-08-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Creating trying a test group no longer updates the page. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.createWithCustomConfiguration): Added the missing ignoreCache=true. |
| |
| 2017-08-21 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Performance Dashboard should be compatible with PHP 7. |
| https://bugs.webkit.org/show_bug.cgi?id=175813 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Use `file_get_contents('php://input')` instead of '$HTTP_RAW_POST_DATA'. |
| Update test harness script to load right php module in httpd. |
| |
| * ReadMe.md: JSON example format fix. |
| * public/api/report-commits.php: Stop using '$HTTP_RAW_POST_DATA'. |
| * public/api/report.php: Stop using '$HTTP_RAW_POST_DATA'. |
| * public/api/update-triggerable.php: Stop using '$HTTP_RAW_POST_DATA'. |
| * public/include/json-header.php: Stop using '$HTTP_RAW_POST_DATA'. |
| * public/include/report-processor.php: Stop using '$HTTP_RAW_POST_DATA'. |
| * server-tests/resources/test-server.conf: Load php5 or php7 module conditionally. |
| * server-tests/resources/test-server.js: Pass PHP version info while launching httpd. |
| (TestServer.prototype._startApache): |
| * tools/remote-cache-server.py: Pass PHP version info while launching httpd. |
| (start_httpd): |
| * tools/remote-server-relay.conf: Load php5 or php7 module conditionally. |
| * tools/sync-buildbot.js: |
| (syncLoop.const.makeTriggerable): |
| (syncLoop): |
| |
| 2017-08-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Number each section in ReadMe.md and add more clarifications |
| https://bugs.webkit.org/show_bug.cgi?id=175687 |
| |
| Rubber-stamped by Joseph Pecoraro. |
| |
| Numbered each section and added more clarifications per issues Aakash encountered. |
| |
| * ReadMe.md: |
| |
| 2017-08-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Make the test work with the latest versions of node modules. |
| |
| * server-tests/privileged-api-upload-file-tests.js: |
| |
| 2017-07-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Fixed a typo. task.id() isn't a thing in this function. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.createWithCustomConfiguration): |
| |
| 2017-07-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype._updateCommitLogViewer): |
| |
| 2017-07-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. It looks like the code here is racy. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.configure): |
| (ChartPaneBase.prototype.setOpenRepository): |
| |
| 2017-07-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Show the roots built by perf try bots on results page |
| https://bugs.webkit.org/show_bug.cgi?id=174305 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Show build products created by a perf try bots so that we can download them for local testing. |
| |
| * public/v3/components/test-group-revision-table.js: |
| (TestGroupRevisionTable.prototype._renderTable): Find the set of repositories for which a patch is applied. |
| Show build products for all commit sets for such a repository since when WebKit is built with a patch in |
| one configuration, the other configuration also needs to be built for consistency. |
| (TestGroupRevisionTable.prototype._buildCommitCell): Added the hyperlink for build products. |
| (TestGroupRevisionTable.prototype._buildFileInfo): Takes a string to override the file's label. Since all |
| build products made by bots tend to have the same filename, we show the label of "Build product" instead. |
| (TestGroupRevisionTable.prototype._mergeCellsWithSameCommitsAcrossRows): Fixed a bug that any entry with |
| a patch wasn't getting merged since it was comparing against the result commit set, which does not contain |
| the patch (only requested commit set contains a patch). |
| |
| 2017-07-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Address Antti's review comment. |
| |
| * public/v3/models/analysis-results.js: |
| (AnalysisResults.prototype.containsTest): |
| |
| 2017-07-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A/B testing results page show results for the top-level tests instead of the one being analyzed |
| https://bugs.webkit.org/show_bug.cgi?id=174304 |
| |
| Reviewed by Antti Koivisto. |
| |
| When a specific subtest is analyzed (e.g. Images subtest of MotionMark), then TestGroupResultsViewer |
| should expand and highlight that specific subtest instead of simply showing the top-level test's score. |
| This is especially misleading since AnalysisResultsViewer (stacking bars for each test group) uses |
| the score of the specific subtest being analyzed. |
| |
| Fixed the bug by passing in the metric associated with the analysis task from AnalysisTaskPage to |
| TestGroupResultsViewer via AnalysisTaskTestGroupPane. Also made TestGroupResultsViewer.setAnalysisResults |
| auto-expand the tests that are ancestors of the specified metric. Without that, the test won't be shown |
| to the user until the ancestor tests are expanded by the user. |
| |
| Also fixed the bug that we were always listing sub-tests regardless of whether they have results or not. |
| Since tests tend to change over time, we shouldn't show a test if it doesn't have any results associated. |
| |
| * public/v3/components/test-group-results-viewer.js: |
| (TestGroupResultsViewer.prototype.setAnalysisResults): Expand the ancestor tests of the metric. |
| (TestGroupResultsViewer.prototype._buildRowsForTest): Exit early if this test doesn't have any results. |
| * public/v3/models/analysis-results.js: |
| (AnalysisResults.prototype.containsTest): Added. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskTestGroupPane.prototype.setAnalysisResults): Takes a metric to pass it to the results viewer. |
| (AnalysisTaskPage.prototype._assignTestResultsIfPossible): |
| |
| 2017-07-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Safari 10.1 fails to upload a patch on perf try bots page |
| https://bugs.webkit.org/show_bug.cgi?id=174214 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the workaround to make the analysis task page work on Safari 10.1 |
| |
| * public/v3/components/instant-file-uploader.js: |
| (InstantFileUploader.prototype._uploadFiles): Convert files to an array since for-of doesn't work otherwise on Safari 10.1. |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile._computeSHA256Hash): Fallback to crypto.webkitSubtle since crypto.subtle isn't available on Safari 10.1 or 11. |
| |
| 2017-07-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo pointed out by Andreas Kling. |
| |
| * public/v3/components/instant-file-uploader.js: |
| (InstantFileUploader.prototype._uploadFiles): |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile.fetchUploadedFileWithIdenticalHash): Renamed from fetchUnloadedFileWithIdenticalHash. |
| |
| 2017-07-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add an admin page to manage uploaded files |
| https://bugs.webkit.org/show_bug.cgi?id=174089 |
| |
| Reviewed by Andreas Kling. |
| |
| Add an admin page to see the disk usage per user as well as the total, and to prune any zombie files (ones marked |
| as deleted but aren't actually deleted in the filesystem). |
| |
| * public/admin/files.php: Added. |
| (format_size): Added. |
| * public/include/admin-header.php: |
| |
| 2017-07-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Roots uploaded by bots don't get author specified properly |
| https://bugs.webkit.org/show_bug.cgi?id=174087 |
| |
| Reviewed by Andreas Kling. |
| |
| When a root file is uploaded from the bot, we manually specify the remote user to upload_file_in_transaction. |
| However, this was getting ignored by create_uploaded_file_from_form_data since it was always calling |
| remote_user_name to get the user name off of $_SERVER. |
| |
| Fixed the bug by passing in the user name from upload_file_in_transaction to create_uploaded_file_from_form_data. |
| |
| * public/include/uploaded-file-helpers.php: |
| (create_uploaded_file_from_form_data): Take the remote user as an argument instead of calling remote_user_name. |
| (upload_file_in_transaction): |
| * server-tests/api-upload-root-tests.js: Updated an existing test cases to make sure root files' author is set. |
| (createTestGroupWihPatch): Manually override the author of a test group for testing. |
| |
| 2017-07-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Prune unused uploaded files when the file quota is reached |
| https://bugs.webkit.org/show_bug.cgi?id=174086 |
| |
| Reviewed by Andreas Kling. |
| |
| Made /privileged-api/uploaded-file and /api/upload-root automatically delete old uploaded files when |
| uploading a new file results in the file quota to be exceeded. Also added the notion of the total quota |
| to avoid running out of a disk when there are hundreds of users each uploading near their quota. |
| |
| * config.json: Added a sample total disk quota of 100GB. |
| * public/include/uploaded-file-helpers.php: |
| (query_file_usage_for_user): Renamed from query_total_file_size. |
| (query_total_file_usage): Added. |
| (upload_file_in_transaction): |
| (delete_file): Added. |
| (prune_old_files): Added. |
| * server-tests/privileged-api-upload-file-tests.js: Added tests for deleting old uploaded files as well as |
| tests for the total quota. |
| * server-tests/resources/test-server.js: |
| (TestServer.prototype.testConfig): Added uploadTotalQuotaInMB to the test configuration. |
| |
| 2017-06-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| UploadedFile should include the file extension in its url |
| https://bugs.webkit.org/show_bug.cgi?id=174009 |
| |
| Reviewed by Chris Dumez. |
| |
| Some command line tools such as darwinup use the file extension to determine the file type. |
| Include the file extension in the URL of an uploaded file to make it work with these tools. |
| |
| * public/include/uploaded-file-helpers.php: |
| (format_uploaded_file): Include the file extension. |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile): |
| (UploadedFile.prototype.url): Return the URL with hthe file extension specified. /api/uploaded-file |
| already supports having the file extension specified. |
| * server-tests/tools-sync-buildbot-integration-tests.js: Updated test cases. |
| * unit-tests/buildbot-syncer-tests.js: Ditto. |
| |
| 2017-05-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Don't shouldn't create a request to build a patch if there is no patch to build |
| https://bugs.webkit.org/show_bug.cgi?id=172791 |
| |
| Reviewed by Chris Dumez. |
| |
| When a commit set doesn't have a patch specified, don't create a request to build. For example, when we're comparing |
| WebKit in the system to WebKit with a patch, there is nothing to build for the first commit set. |
| |
| However, when conducting an A/B testing, it's advisible to compare WebKit built with and without a patch on a single |
| machine with the same version of Xcode, etc... For this reason, we still create a request to build for a commit set |
| if there is another commit set with a patch which uses the same repository group. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Fixed the bug. Only create a build request to build if there is a matching repository group with a patch. |
| * server-tests/privileged-api-create-test-group-tests.js: Added a test case. |
| |
| 2017-05-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Allow sync-buildbot.js to set a buildbot property only when patches are built |
| https://bugs.webkit.org/show_bug.cgi?id=172743 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Added the ability to specify a buildbot property only when there are build requests to build a patch. |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer.prototype.scheduleRequest): Pass in the list of build requests that belong to the same test group. |
| (BuildbotSyncer.prototype.scheduleRequestInGroupIfAvailable): Ditto. |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): Added the support for specifying a conditional property. |
| For the condition type of "built", we check if there was any other |
| (BuildbotSyncer._parseRepositoryGroup): Added the support for "ifBuilt" conditional. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype._scheduleRequestIfSlaveIsAvailable): Pass in the list of build requests that |
| belong to the same test group. |
| (BuildbotTriggerable.prototype._scheduleRequestWithLog): Ditto. |
| |
| * unit-tests/buildbot-syncer-tests.js: Added test case for newly added "ifBuilt" as well as specifying a patch. |
| Updated the various test cases per the addition of new argument to scheduleRequest, _propertiesForBuildRequest, |
| and scheduleRequestInGroupIfAvailable. |
| (createSampleBuildRequestWithPatch): Added. |
| |
| * unit-tests/resources/mock-v3-models.js: |
| (MockModels.inject): Made "ios-svn-webkit" accept a WebKit patch and roots to allow new testing. |
| |
| 2017-05-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| sync-builedbot.js fails to schedule the second request to test with a patch |
| https://bugs.webkit.org/show_bug.cgi?id=172701 |
| |
| Reviewed by Antti Koivisto. |
| |
| The bug was caused by an assertion failure in BuildbotTriggerable's _pullBuildbotOnAllSyncers failing to |
| take into account that for a test group with a patch could be associated with two syncers, one to build |
| a patch and another to run tests. Fixed the bug by differentiating the two types of syncers by buildSyncer |
| and testSyncer per test group. |
| |
| * server-tests/tools-sync-buildbot-integration-tests.js: Extended a test case so that it would hit the |
| assertion without the fix. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.syncOnce): Use the right kind of the syncer to schedule a build or a test. |
| (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers): Associate a given syncer based on the kind of |
| the build request it processed, and assert accordingly. |
| |
| 2017-05-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix UI glitches with a custom analysis test group with a patch |
| https://bugs.webkit.org/show_bug.cgi?id=172694 |
| |
| Reviewed by Sam Weinig. |
| |
| Fix the following UI glitches with perf try bots: |
| - Retrying an A/B testing with a patch fails. |
| - A patch specified in an test group does not get specified in the configurator. |
| - Drag & dropping a patch doesn't work. |
| - Results for custom analysis tasks don't get shown. |
| |
| * public/api/test-groups.php: |
| (main): Fix a bug that test group's platform does not match that of the request'ed platform. Since each test |
| group is associated with platform, just use that instead of querying test_configurations. This resulted in |
| the configurator not being able to find a triggerable in some cases. |
| |
| * public/v3/components/custom-analysis-task-configurator.js: |
| (CustomAnalysisTaskConfigurator): |
| (CustomAnalysisTaskConfigurator.prototype.setCommitSets): Add patches in the commit set. |
| (CustomAnalysisTaskConfigurator.prototype._setUploadedFilesToUploader): Now clears the exiting uploaded files |
| Also renamed from _setUploadedFilesIfEmpty. |
| (CustomAnalysisTaskConfigurator.prototype._setPatchFiles): Added. |
| (CustomAnalysisTaskConfigurator.prototype.didConstructShadowTree): We no longer update the list of roots |
| for the comparsion when a new root is added to the baseline. |
| (CustomAnalysisTaskConfigurator.prototype._configureComparison): Copy over the list of patches and roots when |
| starting to configure the comparsion. |
| |
| * public/v3/components/instant-file-uploader.js: |
| (InstantFileUploader.prototype.clear): Added. |
| (InstantFileUploader.prototype.didConstructShadowTree): Added event handlers for dragover & drop events to |
| allow specifying a patch and root using drag & drop. Unfortunately, this still doesn't work in WebKit due to |
| a bug in our shadow DOM implementation. |
| (InstantFileUploader.prototype._didFileInputChange): |
| (InstantFileUploader.prototype._uploadFiles): Extracted from _didFileInputChange. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskTestGroupPane.prototype.setAnalysisResults): No longer takes metric. |
| (AnalysisTaskTestGroupPane.cssTemplate): Removed unused rules. Also disallow flexing on the list of test groups |
| to avoid the name of a test froup from overflowing on top of the results pane. |
| (AnalysisTaskPage.prototype._assignTestResultsIfPossible): Set setAnalysisResults even when metric is not set |
| as is the case for a custom analysis task. |
| (AnalysisTaskPage.prototype._retryCurrentTestGroup): Use createWithCustomConfiguration to allow retrying of |
| an A/B testing with a patch in a custom analysis task. |
| (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList): |
| |
| 2017-05-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Show patches applied in each A/B testing build requests |
| https://bugs.webkit.org/show_bug.cgi?id=172636 |
| |
| Reviewed by Antti Koivisto. |
| |
| List patches applied along side revisions inn the list of revisions for an A/B tesing build requests if there |
| are any patches applied. |
| |
| * public/v3/components/test-group-revision-table.js: |
| (TestGroupRevisionTable.prototype._renderTable): Indicate which request is to build a patch and which one is |
| to run tests. |
| (TestGroupRevisionTable.prototype._buildCommitCell): Include the patch file's information when there is one. |
| We need to use the requested commit set instead of the one reported by testers or builders since they don't |
| include patch or root information. |
| (TestGroupRevisionTable.prototype._buildCustomRootsCell): |
| (TestGroupRevisionTable.prototype._buildFileInfo): Extracted from _buildCustomRootsCell. |
| |
| 2017-05-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The queue page is broke when there is a custom analysis task |
| https://bugs.webkit.org/show_bug.cgi?id=172631 |
| |
| Reviewed by Antti Koivisto. |
| |
| Fix the bug that we were always assuming each build request to have a test associated. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.createAndRefetchTestGroups): Fixed the bug that we were referring to a non-existent variable task. |
| * public/v3/pages/build-request-queue-page.js: |
| (BuildRequestQueuePage.prototype._constructBuildRequestTable): Fixed the bug. Collect every request in the group |
| and then find the first test request's test name. Make it clear that we're waiting for a build as needed. |
| |
| 2017-05-25 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Syncing script shouldn't schedule a build request when there is a build from another test group in progress |
| https://bugs.webkit.org/show_bug.cgi?id=172577 |
| <rdar://problem/32395049> |
| |
| Reviewed by Chris Dumez. |
| |
| When a buildbot master gets restarted while there is an in-progress build and a pending build, the master will |
| re-schedule the currently running build, and this can result in multiple build requests from different test |
| groups being scheduled simultaneously. |
| |
| sync-buildbot.js was supposed to recover from this state by only processing build requests from one test group |
| at a time and eventually come back to a state where only a single test group is running per buildbot slave. |
| |
| We had a test for this particular case but it wasn't testing what it claimed to test. Rewriten the test case |
| and fixed the bug by explicitly checking this condition and treating it as if there is a pending build already |
| scheduled in the builder in this case. |
| |
| * public/api/test-groups.php: |
| (main): Fixed a regression from r217397. Return the platform ID of the first request when none of the requets |
| have been processed yet or all of them had failed. |
| * server-tests/tools-buildbot-triggerable-tests.js: Rewritten a test case intended to cover this bug. |
| (.assertRequestAndResolve): Added. |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer.prototype.scheduleRequestInGroupIfAvailable): Fixed the bug. Avoid scheduling a new request on |
| this syncer if there is a build in progress for a test group different from that of the new request. Reuse the |
| code we had to deal with a pending build for this purpose. |
| |
| 2017-05-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Opening an analysis task from the queue page is broken |
| https://bugs.webkit.org/show_bug.cgi?id=172559 |
| <rdar://problem/32389708> |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Fix the bug that opening the analysis task page from the queue page results in multiple assertion failures |
| as well as the list of test groups in the analysis task page not getting updated. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.updateSingleton): Because /api/build-requests/ do not include test groups, it's |
| possible for testGroup to be dynamically updated upon loading an analysis task page. Update _testGroup in |
| such instances instead of asserting that it doesn't happen. |
| |
| * public/v3/models/data-model.js: |
| (DataModelObject.cachedFetch): Because various code to create model objects from the result of a JSON API |
| modify the fetched content in irreversible manner, e.g. `object.platform = Platform.findById(object.platform)` |
| we must return a fresh new content each time even if the result had been cached. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.platform): Return this._platform as that's not available. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): |
| (AnalysisTaskPage.prototype._resetVariables): Extracted from the constructor. |
| (AnalysisTaskPage.prototype.updateFromSerializedState): Reset all instance variables when opening a new |
| analysis task page. This would avoid showing the stale result even when fetching new test groups had failed. |
| |
| * unit-tests/test-groups-tests.js: Added a test case for fetching the same test group twice. This used to hit |
| a problem in BuildRequest.constructBuildRequestsFromData which overrode platform property of each raw content |
| with a Platform model object because in the case of a cached fetch, we end up trying to look up the platform |
| again using the result of stringifying the Platform object instead of the platform ID included in the original |
| fetched content. |
| (sampleTestGroup): Added "platform" as included in the JSON API's response now. |
| |
| 2017-05-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The commit log viewer can overlap the analysis results viewer |
| https://bugs.webkit.org/show_bug.cgi?id=172534 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Allocate the padding on the right for the commit log viewer, and add a horizontal scrollbar |
| to the analysis results viewer instead of letting it expand beneath the commit log viewer. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskResultsPane.htmlTemplate): |
| (AnalysisTaskResultsPane.cssTemplate): |
| |
| 2017-05-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Sycning script build fix after r217378. |
| |
| * tools/sync-buildbot.js: |
| (syncLoop): |
| |
| 2017-05-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the support for perf try bots to sync-buildbot.js |
| https://bugs.webkit.org/show_bug.cgi?id=172529 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Make sync-buildbot.js schedule an A/B testing job with a patch or roots to buildbot. |
| |
| Change the buildbot property format in the syncing script's configuration again to use a dictionary |
| with a single key of "revision", "patch", or "roots" to specify a revision, a patch, or a set of roots, |
| and simplified the structure of the configuration by always having "types" and "builders", and |
| make each entry in "configurations" refer to a list of types, platforms, and builders. |
| |
| Since now there are build requests to build patches and run tests, "configurations" has been renamed to |
| "testConfigurations" and "buildConfigurations" have been added. Each entry in "buildConfigurations" |
| specifies a list of platforms and builders. Similarly in repository group configurations, the buildbot |
| properties for testing is now specified as "testProperties" and ones for building a patch is specified |
| in newly introduced "buildProperties". |
| |
| * public/api/build-requests.php: |
| (update_builds): When a build request to build a patch fails, mark all subsequent requests as failed |
| since there is no way to run tests without a successful build. |
| |
| * public/api/update-triggerable.php: |
| (main): Re-generate manifest.json after updating the triggerable. The lack of this re-generation was |
| the reason we had to manually GET /api/manifest in api-update-triggerable-tests.js. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.hasCompleted): Added. |
| |
| * public/v3/models/manifest.js: |
| (Manifest.reset): Added. Extracted from MockData.resetV3Models in unit-tests/mock-data.js and |
| syncLoop in tools/sync-buildbot.js |
| (Manifest.fetch): Reset V3 models before fetching the manifest. This eliminates the need to manually |
| reset V3 models in syncLoop. |
| |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile.prototype.url): Use RemoteAPI.url to get the full URL instead of just a path. |
| |
| * public/v3/remote.js: |
| (BrowserRemoteAPI.prototype.url): Added. Constructs the full URL. |
| |
| * server-tests/api-update-triggerable-tests.js: |
| (.refetchManifest): Deleted. Now that /api/manifest re-generates manifest.json, we can simply call |
| Manifest.fetch instead. |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.resetV3Models): Calls Manifest.reset(). |
| (MockData.addMockConfiguration): Extracted from addMockData. |
| (MockData.addMockData): Updated per the format change. |
| (MockData.mockTestSyncConfigWithSingleBuilder): Ditto. |
| (MockData.mockTestSyncConfigWithTwoBuilders): Ditto. |
| (MockData.runningBuild): Make buildNumber specifiable. |
| (MockData.finishedBuild): Ditto. |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: Updated configurations per the format change. |
| Now that now acceptsCustomRoots() for "system-and-webkit" must be true since we can't have a |
| repository group that which accepts a patch and not take roots. |
| |
| * server-tests/tools-sync-buildbot-integration-tests.js: Added. |
| (createTriggerable): Added. |
| (createTestGroupWihPatch): Added. |
| (uploadRoot): Added. |
| (.assertAndResolveRequest): Added. |
| (.assertTestBuildHasFailed): Added. |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer): Added. _type as an instance variable to identify whether this buildbot builder |
| is a "builder" which builds a patch, builder, or a "tester" which runs a test. Also renamed |
| _testConfigurations to _configurations. |
| (BuildbotSyncer.prototype.addTestConfiguration): Assert that either the type of this syncer hasn't |
| been set or it's a tester. |
| (BuildbotSyncer.prototype.testConfigurations): Return [] when it's a builder. |
| (BuildbotSyncer.prototype.addBuildConfiguration): Added. Adds a platform to a builder. |
| (BuildbotSyncer.prototype.buildConfigurations): Added. Returns the list of configurations if this |
| syncer is a builder. Otherwise returns []. |
| (BuildbotSyncer.prototype.isTester): Added. |
| (BuildbotSyncer.prototype.matchesConfiguration): |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): Updated to support the new format. |
| (BuildbotSyncer._loadConfig): Ditto. Optionally parse buildConfigurations. |
| (BuildbotSyncer._resolveBuildersWithPlatforms): Added. For each test or build configuration entry, |
| creates the list of configurations per builder and platform. |
| (BuildbotSyncer._parseRepositoryGroup): Added the support for parsing the new format with revision, |
| roots, and patch option types with a lot of validations as we're seeing a bit of combinatorial |
| explosion in the number of things that can go wrong. Also parse buildProperties optionally. |
| (BuildbotSyncer._parseRepositoryGroupPropertyTemplate): Added. A helper function to parse a set of |
| buildbot properties, validates its content, and invokes a callback if it's an dynamically resolved |
| type such as "revision" and "patch". |
| (BuildbotSyncer._validateAndMergeConfig): Updated per the format change. No longer allows "types", |
| "type", "platforms", and "platform" as they're explicity resolved in _resolveBuildersWithPlatforms. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.syncOnce): |
| (BuildbotTriggerable.prototype._validateRequests): Handle the case when a build request is not |
| associated with any test. |
| (BuildbotTriggerable.prototype._nextRequestInGroup): Return null when there is a build request to |
| build a patch which has not been completed (pending, scheduled, running, or failed). Since all |
| requests to build a patch has a negative order, those requests should all show up at the beginning. |
| (BuildbotTriggerable.prototype._scheduleRequestIfSlaveIsAvailable): Pick a new buildbot syncer when |
| scheduling the first request to build a patch or the first request to run a test. The first request |
| to run a test will always have order of 0, so it's a sufficient condition to find such a request. |
| On the other hand, the first request to build a patch can have a negative order number so we must |
| explicitly check if it's the first item in the ordered list of requests in the test group. |
| |
| * tools/remote-server-relay.log: Added. |
| |
| * tools/sync-buildbot.js: |
| (syncLoop): Fixed a bug we were not re-fetching the triggerable after updating the triggerable so |
| that Triggerable and related objects we have in the memory may not reflect what we just synced to |
| the perf dashboard. Also, we don't reset V3 models manually any more since Manifest.fetch does that. |
| |
| * unit-tests/buildbot-syncer-tests.js: Added more test cases and updated existing test cases to test |
| exception messages explicitly since allowing any exception was resulting in some tests passing a |
| result of unrelated parsing error being thrown, etc... |
| (sampleiOSConfig): Updated per the format change. |
| (sampleiOSConfigWithExpansions): Ditto. |
| (smallConfiguration): Ditto. |
| |
| 2017-05-22 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Fix the bug that sometimes analysis task results pane is missing. |
| https://bugs.webkit.org/show_bug.cgi?id=172404 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| AnalysisTaskPage._didFetchTask and AnalaysisTaskPage._fetchRelatedInfoForTaskId should be called in order. |
| The race between those two functions causes the analysis task results pane sometimes missing. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype.render): Fix the bug in r217173 that commitSet can be undefined. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype.updateFromSerializedState): Use arrow function to get rid of self variable. |
| Use `const` instead of var for constant variable. And call _didFetchTask before calling _fetchRelatedInfoForTaskId. |
| (AnalysisTaskPage.prototype._renderTaskNameAndStatus): |
| (AnalysisTaskPage.cssTemplate): |
| |
| 2017-05-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a commit log viewer next to the analysis results viewer |
| https://bugs.webkit.org/show_bug.cgi?id=172399 |
| |
| Reviewed by Chris Dumez. |
| |
| Add a commit log viewer next to the analysis results viewer, which visualizes the A/B testing results. |
| |
| Also linkify the revisions in the table that shows the status of each A/B testing job, |
| and allow the prefix of "r" when associating a Subversion revision. |
| |
| Finally, Fixed a bug that the list of commits associated with the analysis task were not re-rendered |
| when the list was updated by the user. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer): Added _selectorRadioButtonList as an instance variable. It's a list of radio |
| buttons to select a configuration (A/B) with a commit set. It's added to update the checked status of |
| radio buttons upon changing the currently selected test group. |
| (AnalysisResultsViewer.prototype.setTestGroups): Update the selected range to that of the currently |
| selected group. |
| (AnalysisResultsViewer.prototype.render): Fill _selectorRadioButtonList with radio buttons. |
| |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer): Added _showRepositoryName as an instance variable. |
| (CommitLogViewer.prototype.setShowRepositoryName): Added. |
| (CommitLogViewer.prototype.render): Hide the repository name when _showRepositoryName is false. This |
| is used in the newly added commit log viewer for the analysis results since we're showing a select |
| element with all the names of repositories above this component. |
| |
| * public/v3/components/test-group-revision-table.js: |
| (TestGroupRevisionTable.prototype._buildCommitCell): Linkify the revisions if possible. |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.prototype.associateCommit): Strip "r" at the beginning for a Subversion like r12345 |
| since that's the format we use to show to the user. This makes copy & paste easier. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskResultsPane): Added a bunch of new instance variables to show and update the commit log |
| viewer next to the analysis results viewer. |
| (AnalysisTaskResultsPane.prototype.setPoints): Create the list of repositories to show details. |
| (AnalysisTaskResultsPane.prototype.didConstructShadowTree): Re-render when the current selected test |
| group changes since that may have updated the selected range for A/B testing. Also re-render when |
| a new repository is selected to show details. |
| (AnalysisTaskResultsPane.prototype.render): Update the list of repositories and the commit log viewer. |
| (AnalysisTaskResultsPane.prototype._renderRepositoryList): Renders the list of repositories. |
| (AnalysisTaskResultsPane.prototype._updateCommitViewer): Updates the commit log viewer given the range |
| selected in the analysis results viewer. |
| (AnalysisTaskResultsPane.htmlTemplate): Updated the template. |
| (AnalysisTaskResultsPane.cssTemplate): Ditto. |
| (AnalysisTaskTestGroupPane.cssTemplate): Add a little space between the list of results and the table |
| of A/B testing jobs with revisions. |
| (AnalysisTaskPage.prototype.render): Fixed the bug that the list of commits associated with the task |
| is not updated when the list changes the task or the start point never changed when the list of commits |
| associated with the task changed. Make the lazily evaluated function compare the actual list of commits |
| so that it will invoke _renderCauseAndFixes when the list changes. |
| (AnalysisTaskPage.prototype._renderCauseAndFixes): Now renders a specific list. |
| |
| 2017-05-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix. Added a missing null check. |
| |
| * public/v3/components/custom-analysis-task-configurator.js: |
| (CustomAnalysisTaskConfigurator.prototype._setUploadedFilesIfEmpty): |
| |
| 2017-05-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Added a missing null check. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskConfiguratorPane.prototype.setTestGroups): |
| |
| 2017-05-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove the code for old syncing script configuration in BuildbotSyncer |
| https://bugs.webkit.org/show_bug.cgi?id=171963 |
| |
| Reviewed by Chris Dumez. |
| |
| Removed the code for specifying {"root": ~}, {"rootOptions": [~]}, and {"rootsExcluding": [~]} in buildbot |
| properties in the syncing script's configurations since they are no longer used after r215061. |
| |
| Also removed the support for using "arguments" as an alias to "properties", and updated the tests accordingly. |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer._parseRepositoryGroup): Removed the unused code. |
| (BuildbotSyncer._validateAndMergeConfig): Just allow string values in properties. |
| (BuildbotSyncer._validateAndMergeProperties): Deleted. |
| |
| * unit-tests/buildbot-syncer-tests.js: |
| (sampleiOSConfig): Use "properties" instead of "arguments" to specify the buildbot properties. |
| (sampleiOSConfigWithExpansions): Ditto. |
| |
| 2017-05-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix after r215633 to make the bar graphs render even when the confidence intervals aren't available. |
| |
| * public/v3/components/bar-graph-group.js: |
| (BarGraphGroup.prototype._computeRange): |
| |
| 2017-05-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r215633. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype._computeRequestedCommitSets): |
| (TestGroup.prototype.requestsForCommitSet): |
| |
| 2017-05-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add API to upload a patched build for a custom A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=171956 |
| |
| Reviewed by Chris Dumez. |
| |
| Added /api/upload-root to upload a root file, the build product of a patch associated with a commit set. |
| |
| Extracted more functions out of privileged-api/upload-file.php to uploaded-file-helpers.php to share code |
| with /api/upload-root.php. |
| |
| * public/api/upload-root.php: Added. |
| (main): |
| (compute_commit_set_items_to_update): Find the list of commit set items to associate this root with. |
| A root can be associated with multiple repositories and there fore commit set items; e.g. if a software |
| is built from multiple repositories and there is a patch associated with one of them, the built product |
| must be associated with all those repositories. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::fetch_commits_for_set_if_needed): Include the root file is there is one. |
| |
| * public/include/json-header.php: |
| (validate_arguments): Added the support for validating json string. |
| (verify_slave): Return the slave ID found. |
| |
| * public/include/uploaded-file-helpers.php: |
| (validate_uploaded_file): Extracted from /privileged-api/upload-file to be shared with /api/upload-root. |
| (query_total_file_size): Ditto. |
| (create_uploaded_file_from_form_data): Ditto. |
| (upload_file_in_transaction): Ditto. Takes a lambda to do the extra work inside the transaction. |
| |
| * public/privileged-api/upload-file.php: |
| (main): |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.constructBuildRequestsFromData): Resolve the rootFIle of each commit set item. |
| |
| * public/v3/models/commit-set.js: |
| (CommitSet): Added _repositoryToRootMap and _allRootFiles as instance variables. |
| (CommitSet.prototype.updateSingleton): Added. Previously, each commit set's states never changed after |
| its creation. After this patch, each item can be newly associated with a root so we must update its |
| _repositoryToRootMap and _allRootFiles. For simplicity, we update all states. |
| (CommitSet.prototype._updateFromObject): Extracted from the constructor. |
| (CommitSet.prototype.allRootFiles): Added. Includes custom roots and roots created for patches. |
| (CommitSet.prototype.rootForRepository): Added. |
| (CommitSet.prototype.equals): Fixed the bug that we were comparing _repositoryToPatchMap to |
| _repositoryToCommitMap, and added a check for _repositoryToRootMap. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.task): Added. |
| (TestGroup.createWithTask): |
| (TestGroup.createWithCustomConfiguration): |
| (TestGroup.createAndRefetchTestGroups): |
| (TestGroup._fetchTestGroupsForTask): Deleted. Now fetchForTask takes a boolean argument: ignoreCache. |
| (TestGroup.findAllByTask): Added. |
| (TestGroup.fetchForTask): Renamed from fetchByTask. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._fetchRelatedInfoForTaskId): |
| |
| * server-tests/api-build-requests-tests.js: |
| |
| * server-tests/api-upload-root-tests.js: Added. Added tests for /api/upload-root. |
| (makeReport): Added. |
| (addSlaveAndCreateRootFile): Added. |
| (createTestGroupWihPatch): Added. |
| |
| * server-tests/privileged-api-create-test-group-tests.js: |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.sharedRepositoryId): Added. |
| (MockData.addMockData): Added "Shared" repository along with commits. |
| |
| 2017-05-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Rename server-tests/api-update-triggerable.js to server-tests/api-update-triggerable-tests.js |
| https://bugs.webkit.org/show_bug.cgi?id=171905 |
| |
| Reviewed by Chris Dumez. |
| |
| * server-tests/api-update-triggerable-tests.js: Renamed from server-tests/api-update-triggerable.js. |
| |
| 2017-04-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the support for scheduling a A/B testing with a patch. |
| https://bugs.webkit.org/show_bug.cgi?id=171209 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the support for creating a custom test group with a patch applied. |
| |
| First, each repository in a repository group has a boolean indicating whether a given repository can have |
| a patch applied or not. When any configuration in a test group contains a patch, we create build requests |
| without a test specified in order to "build" those patches. These build requests have negative order numbers |
| to differentiate them from regular build requests. We can't simply build ones with patches since there could |
| be differences in SDK, build options, etc... when patches are applied. |
| |
| The JSON format for commit sets returned by /api/build-requests have been changed from using an array of |
| commit IDs to an array of dictionaries indicate commit and acceptsPatch boolean. /api/update-triggerable now |
| uses a dictionary with two keys: repository and acceptsPatch to specify a set of repositories associated with |
| a repository group, and /privileged-api-create-test-group uses a dictionary with two keys: revision and patch |
| instead of a revision string to specify commit sets. |
| |
| Furthermore, the syncing script's configuration have been updated to use a dictionary of repository names to |
| an options dictionary instead of an array of repositories names. For now, the only supported option is |
| acceptsPatch but will be extended when we add the support for rolling back system components. |
| e.g. {"WebKit": {acceptsPatch: true}, "macOS": {}} instead of ["WebKit", "macOS"] |
| |
| On the UI side, InstantFileUploader has been changed to accept only one file by default, and added a new method |
| allowMultipleFiles() to allow multiple files to be selected for custom roots. Also replaced the input element |
| with type=file by a button with a custom label to show labels such as "Apply a patch" or "Add a new root" |
| instead of the generic label like "choose a file". |
| |
| |
| * init-database.sql: Added trigrepo_accepts_patch to triggerable_repositories to indicate whether a given |
| repository can have a patch applied or not. Made request_test optional in build_requests for when a build |
| request is created to build patches. Such a build request have a negative request_order. Updated the related |
| constraints accordingly. |
| |
| * public/admin/triggerables.php: Added the support for updating whether a given repository can have a patch |
| applied in each repository group. Only show the repositories in the repository group for this purpose since |
| there is no way to accept a patch on a repository without it being a part of the group. |
| (generate_repository_form): Now takes the markup for checkboxes instead of generating one itself. |
| (generate_repository_checkboxes): Now takes an array of repositories to generate checkboxes. The checkbox is |
| shown when the repository ID exists as a key in this array, and is checked when its value is true. The new |
| capability to skip repositories not in the array is used to hide repositories not associated with the group |
| in the list of checkboxes to indicate a repository accepts a patch. |
| |
| * public/api/update-triggerable.php: |
| (main): Now updates the description and acceptsRoots states of each repository group, and sets acceptsPatch |
| boolean for each repository in the group if set in the update. |
| (validate_repository_groups): Use a reference to $repository_groups in order to set repository_id_list, which |
| contains an array of repository IDs to find the existing repository group that matches the set via |
| RepositoryGroupFinder's find_by_repositories. Also added a various validations for acceptsRoots, a dictionary |
| specifying repository and acceptsPatch. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::fetch_commits_for_set_if_needed): Instead of returning an array of commit IDs as |
| "commits", it now returns an array of dictionaries with "commit" and "patch" keys specifying the commit ID |
| and the patch file's ID respectively as "revisionItems". |
| (BuildRequestsFetcher::add_uploaded_file): Added. Extracted from fetch_commits_for_set_if_needed. Used to |
| add either a patch file or a custom root file in the list of uploaded files in the result. |
| |
| * public/include/manifest-generator.php: |
| (fetch_triggerables): Each element in repository group's "repositories" field is now an array of dictionaries |
| with "repository" and "acceptsPatch" as keys. |
| |
| * public/include/repository-group-finder.php: |
| (RepositoryGroupFinder::__construct): Added a map for boolean indicating whether a given repository group |
| allows a patch on a repository. Used in /privileged-api/create-test-group. |
| (RepositoryGroupFinder::accepts_patch): Added. |
| (RepositoryGroupFinder::populate_map): Build up the map for acceptsPatch boolean per repository per group. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Fixed a bug that we were not explicitly checking for a duplicate test group name (with a test). Create |
| build requests to "build" patches if there is any patch file specified. |
| (commit_sets_from_revision_sets): Updated to take a dictionary with "revision" and "patch" as keys to specify |
| a revision and a patch if any instead of just a revision string for each repository. Also validate that each |
| repository is allowed to have a patch once the repository group has been found for the set of repositories. |
| (ensure_commit_sets): |
| |
| * public/v3/components/custom-analysis-task-configurator.js: |
| (CustomAnalysisTaskConfigurator): Added _patchUploaders as an instance variable, which is a dictionary of |
| configuration names to a map of InstantFileUploader's used to upload a patch. Also renamed _fileUploaders to |
| _customRootUploaders for clarity. |
| (CustomAnalysisTaskConfigurator.prototype.setCommitSets): |
| (CustomAnalysisTaskConfigurator.prototype.didConstructShadowTree.createRootUploader): Added. |
| (CustomAnalysisTaskConfigurator.prototype.didConstructShadowTree): |
| (CustomAnalysisTaskConfigurator.prototype._ensurePatchUploader): Added. Creates an instant file uploader for |
| patches. We only allow a single patch per repository. |
| (CustomAnalysisTaskConfigurator.prototype._computeCommitSet): Include a patch in the commit set as needed. |
| (CustomAnalysisTaskConfigurator.prototype._buildRevisionTable): Show the patch file uploader for repositories |
| which can have patches in the current repository group. |
| (CustomAnalysisTaskConfigurator.cssTemplate): Show borders between every rows instead of just between tbody's |
| now that each row can have a patch file uploader. |
| |
| * public/v3/components/instant-file-uploader.js: |
| (InstantFileUploader): Added _fileInput and _allowMultipleFiles as instance variables. We now show a button |
| in the UI instead of an input with type=file. _fileInput is a hidden input with type=file used inside a click |
| event of the button to let the user pick a file. |
| (InstantFileUploader.prototype.allowMultipleFiles): Added. Allows this instance to accept multiple files. |
| (InstantFileUploader.prototype.didConstructShadowTree): Synthetically click on the hidden input element when |
| the newly added button element is clicked to open the browser's file picker. |
| (InstantFileUploader.prototype.render): Hide the button to add a file if this instance can only select one file |
| and there is already some file being uploaded in this instance. |
| (InstantFileUploader.htmlTemplate): Replaced the input element with type=file with a button. Its label comes |
| from the default slot content. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest): Made the test optional. |
| (BuildRequest.prototype.isBuild): Returns true if this is a build request for building a patch. |
| (BuildRequest.prototype.isTest): Returns true if this is a build request for running tests. |
| (BuildRequest.constructBuildRequestsFromData): Create each commit log here instead of relying on CommitSet's |
| constructor to construct its commit logs. Also updated per the replacement of an array of commit IDs by |
| an array of dictionaries with commit and patch properties. |
| |
| * public/v3/models/commit-set.js: |
| (CommitSet): Made _repositoryToCommitMap a real Map object. Also added _repositoryToPatchMap. Also got rid of |
| the code to instantiate commit logs since that's now done in BuildRequest.constructBuildRequestsFromData. |
| (CommitSet.prototype.commitForRepository): |
| (CommitSet.prototype.revisionForRepository): |
| (CommitSet.prototype.patchForRepository): Added. |
| (CommitSet.prototype.latestCommitTime): Modernized the code. |
| (CommitSet.prototype.equals): Modernized the code. Also added the check for patches. |
| (MeasurementCommitSet): Updated per the change to make _repositoryToCommitMap a real Map. |
| (CustomCommitSet.prototype.setRevisionForRepository): |
| (CustomCommitSet.prototype.equals): Added the check for patches. |
| (CustomCommitSet.prototype.revisionForRepository): |
| (CustomCommitSet.prototype.patchForRepository): Added. |
| |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest): Updated per the replacement of an array of commit IDs by an array of dictionaries |
| with commit and patch properties. |
| |
| * public/v3/models/repository.js: |
| (Repository.prototype.ownerId): Renamed from owner for clarity. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup): Modernized the code by using LazilyEvaluatedFunction. Removed _requestsAreInOrder since it's not |
| necessary anymore with LazilyEvaluatedFunction. |
| (TestGroup.prototype.addBuildRequest): |
| (TestGroup.prototype.test): Use the last build request's test since the first few requests could be requests to |
| build patches. |
| (TestGroup.prototype.platform): Ditto. |
| (TestGroup.prototype._lastRequest): Added. |
| (TestGroup.prototype._orderedBuildRequests): Added. |
| (TestGroup.prototype.repetitionCount): Only count the build requests for testing (skipping any requests to |
| build patches). |
| (TestGroup.prototype.requestedCommitSets): Simply call _computeRequestedCommitSetsLazily. |
| (TestGroup.prototype._computeRequestedCommitSets): Extracted from requestedCommitSets. |
| (TestGroup.prototype.requestsForCommitSet): |
| (TestGroup.prototype.labelForCommitSet): Rewritten. Just compute the label here instead of relying on |
| _commitSetToLabel since requestedSets is always of the length two at the moment. |
| (TestGroup._revisionSetsFromCommitSets): Specify both the revision and the patch in the revision set. |
| |
| * public/v3/models/triggerable.js: |
| (TriggerableRepositoryGroup): Added _patchAcceptingSet as an instance variable. Use |
| sortByNamePreferringOnesWithURL to sort repositories instead of simple sortByName. |
| (TriggerableRepositoryGroup.prototype.accepts): Added checks for the custom roots and patches. |
| (TriggerableRepositoryGroup.prototype.acceptsPatchForRepository): Added. |
| |
| * server-tests/api-build-requests-tests.js: Updated the test cases per the replacement of an array of commit |
| IDs by an array of dictionaries with commit and patch properties. |
| |
| * server-tests/api-manifest-tests.js: Updated the test case per the name of Repository's owner to ownerId. |
| |
| * server-tests/api-update-triggerable.js: Updated the test case per the name of Repository's owner to ownerId, |
| and added a test case for updating whether a given repository group allows custom roots as well as patches |
| on repositories via /api/update-triggerable. |
| (.updateWithOSXRepositoryGroup): Updated the sample syncing script configuration per the format change. |
| (.refetchManifest): Added. |
| |
| * server-tests/privileged-api-create-test-group-tests.js: Updated per the syncing script configuration format |
| change. Also added a test for creating a test group with a duplicate name, which is expected to fail with |
| DuplicateTestGroupName, and creating a test group with a patch both when it's allowed and when it's not allowed |
| in the matching repository group. |
| (.addTriggerableAndCreateTask): Updated per the format change. |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.addEmptyTriggerable): Added a metric and its configuration to make it appear in the manifest file. |
| The new test case in api-update-triggerable.js requires this. |
| (MockData.mockTestSyncConfigWithSingleBuilder): Updated per the syncing script configuration format change. |
| (MockData.mockTestSyncConfigWithTwoBuilders): Ditto. |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: Removed the useless assertions about test configurations, |
| and added assertions about custom roots and patches in the test case for updateTriggerables. |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer._parseRepositoryGroup): Made each assertion explicitly refer to the specific repository group |
| to make it more user friendly. Now each repository group uses a dictionary of repository names to its options |
| in the syncing script configurations. When parsed, we insert it as an array of dictionaries with repository ID |
| and acceptsPatch boolean specified separately since this is the format /api/update-triggerable expects. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.updateTriggerable): |
| |
| * unit-tests/build-request-tests.js: |
| (sampleBuildRequestData): Updated per the commit sets format change in /api/build-requests. |
| |
| * unit-tests/buildbot-syncer-tests.js: Updated the existing tests per various format changes and added a couple |
| of new test cases for the syncing script's configuration validation. |
| (sampleiOSConfig): |
| (smallConfiguration): |
| (createSampleBuildRequest): |
| |
| * unit-tests/resources/mock-v3-models.js: |
| (MockModels.inject): Updated per the repository group format change. |
| |
| * unit-tests/test-groups-tests.js: |
| (sampleTestGroup): Updated per the commit sets format change in /api/build-requests. |
| |
| 2017-04-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Rename commit_set_relationships to commit_set_items |
| https://bugs.webkit.org/show_bug.cgi?id=171143 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Renamed commit_set_relationships to commit_set_items. Also added commitset_patch_file in the preparation to add |
| the support for applying patches in custom test groups. To migrate an existing database, run: |
| |
| ```sql |
| BEGIN; |
| ALTER TABLE commit_set_relationships RENAME TO commit_set_items; |
| ALTER TABLE commit_set_items ADD COLUMN commitset_patch_file integer REFERENCES uploaded_files; |
| ALTER TABLE commit_set_items ADD CONSTRAINT commitset_with_patch_must_have_commit |
| CHECK (commitset_patch_file IS NULL OR commitset_commit IS NOT NULL); |
| END; |
| ``` |
| |
| * init-database.sql: |
| * public/include/build-requests-fetcher.php: |
| * public/privileged-api/create-test-group.php: |
| * server-tests/resources/mock-data.js: |
| (MockData.addMockData): |
| (MockData.addMockTestGroupWithGitWebKit): |
| * tools/js/database.js: |
| |
| 2017-04-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the support for creating a custom test group in the analysis task page |
| |
| Make it possible to create more custom test groups in the analysis task page |
| https://bugs.webkit.org/show_bug.cgi?id=171138 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Extracted CustomConfigurationTestGroupForm out of CreateAnalysisTaskPage and added it to AnalysisTaskPage inside |
| AnalysisTaskConfiguratorPane. This allows configuration of a new test group within a custom analysis task. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Fixed the bug that the triggerable wasn't resolved when creating a test group in a custom analysis task. |
| |
| * public/v3/components/custom-analysis-task-configurator.js: |
| (CustomAnalysisTaskConfigurator.prototype.selectTests): Added. Used by CustomConfigurationTestGroupForm's |
| setConfigurations. |
| (CustomAnalysisTaskConfigurator.prototype.selectPlatform): Ditto. |
| (CustomAnalysisTaskConfigurator.prototype.setCommitSets): Ditto. |
| (CustomAnalysisTaskConfigurator.prototype._setUploadedFilesIfEmpty): Added. |
| (CustomAnalysisTaskConfigurator.prototype._revisionMapFromCommitSet): Added. |
| (CustomAnalysisTaskConfigurator.prototype.render): Update the currently selected platforms and tests now that |
| they can be set externally via selectTests and selectPlatform. |
| (CustomAnalysisTaskConfigurator.prototype._renderTriggerableTests): Return the result of _renderRadioButtonList |
| so that the caller can update the currently selected tests without having to reconstruct the list. |
| (CustomAnalysisTaskConfigurator.prototype._renderTriggerablePlatforms): Ditto. |
| (CustomAnalysisTaskConfigurator.prototype._renderRadioButtonList): Renamed from _buildCheckboxList. Now returns |
| a function which updates the currently selected items. We still pretend that multiple items can be selected to |
| make it future-proof. |
| |
| * public/v3/components/custom-configuration-test-group-form.js: Added. |
| (CustomConfigurationTestGroupForm): Added. Inherits from TestGroupForm. Extracted from CreateAnalysisTaskPage. |
| (CustomConfigurationTestGroupForm.prototype.setHasTask): Added. |
| (CustomConfigurationTestGroupForm.prototype.hasCommitSets): Added. |
| (CustomConfigurationTestGroupForm.prototype.setConfigurations): Added. Used by AnalysisTaskConfiguratorPane to |
| set the default configuration to what the latest test group used. |
| (CustomConfigurationTestGroupForm.prototype.startTesting): Added. Dispatches "startTesting" action with |
| platform, test, taskName in addition to what CustomizedTestGroupForm emits. |
| (CustomConfigurationTestGroupForm.prototype.didConstructShadowTree): Added. |
| (CustomConfigurationTestGroupForm.prototype.render): Added. |
| (CustomConfigurationTestGroupForm.prototype._updateTestGroupName): Added. |
| (CustomConfigurationTestGroupForm.cssTemplate): Added. |
| (CustomConfigurationTestGroupForm.htmlTemplate): Added. |
| |
| * public/v3/components/test-group-form.js: |
| (TestGroupForm.cssTemplate): Make the form display: block. |
| |
| * public/v3/index.html: |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.test): Added. |
| (TestGroup.prototype.platform): Added. |
| (TestGroup.createWithCustomConfiguration): Added. Creates a custom test group with an existing analysis task. |
| |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile): Fixed a bug that _deletedAt was set to a Date object even when object.deletedAt is null. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskConfiguratorPane): Added. |
| (AnalysisTaskConfiguratorPane.prototype.didConstructShadowTree): Added. Dispatch createCustomTestGroup action |
| in turn when receiving startTesting from CustomConfigurationTestGroupForm. |
| (AnalysisTaskConfiguratorPane.prototype.setTestGroups): Added. |
| (AnalysisTaskConfiguratorPane.prototype.render): Added. |
| (AnalysisTaskConfiguratorPane.htmlTemplate): Added. We override this instead of formContent to display the |
| "Start" button at the end instead of at the beginnning. |
| (AnalysisTaskConfiguratorPane.cssTemplate): Added. |
| (AnalysisTaskPage.prototype.didConstructShadowTree): Listen to createCustomTestGroup. |
| (AnalysisTaskPage.prototype.render): Hide AnalysisTaskConfiguratorPane when the analysis task is not custom. |
| (AnalysisTaskPage.prototype._showTestGroup): Let AnalysisTaskConfiguratorPane know of the current test group |
| so that it can update the default configuration if the user hasn't modified yet. |
| (AnalysisTaskPage.prototype._createCustomTestGroup): Added. |
| |
| * public/v3/pages/create-analysis-task-page.js: |
| (CreateAnalysisTaskPage.prototype.didConstructShadowTree): |
| (CreateAnalysisTaskPage.prototype._createAnalysisTaskWithGroup): |
| (CreateAnalysisTaskPage.prototype.render): |
| (CreateAnalysisTaskPage.prototype._renderMessage): |
| (CreateAnalysisTaskPage.htmlTemplate): |
| (CreateAnalysisTaskPage.cssTemplate): |
| |
| * server-tests/privileged-api-create-test-group-tests.js: Added a test case for creating a custom test group for |
| an existing analysis task. |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.otherPlatformId): Added. |
| (MockData.addMockData): Added a test configuration for otherPlatformId. |
| |
| 2017-04-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make it possible to view results for sub tests and metrics in A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=170975 |
| |
| Reviewed by Chris Dumez. |
| |
| Replaced TestGroupResultsTable, which was a single table that presented the test results with a set of revisions |
| each build request used, with TestGroupResultsViewer and TestGroupRevisionTable. TestGroupResultsViewer provides |
| an UI to look the results of sub-tests and sub-metrics and TestGroupRevisionTable provides an UI to display |
| the set of revisions each build request used. TestGroupRevisionTable can also show the list of custom roots now |
| that we've added UI to schedule an analysis task with a custom test group. |
| |
| This patch extends BarGraphGroup to show multiple bars per SingleBarGraph using a canvas with bars indicating |
| their mean and confidence interval. |
| |
| * browser-tests/index.html: |
| (ChartTest.importChartScripts): Include lazily-evaluated-function.js now that Test model object uses |
| LazilyEvaluatedFunction. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._valuesForCommitSet): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus): |
| |
| * public/v3/components/bar-graph-group.js: |
| (BarGraphGroup): No longer takes formatter. Added _computeRangeLazily and _showLabels as instance variables. |
| (BarGraphGroup.prototype.addBar): Now takes a list of values, their labels, mean, confidence interval, and |
| the colors of bar graphs shown for each value and the mean indicator. |
| (BarGraphGroup.prototype.showLabels): Added. |
| (BarGraphGroup.prototype.setShowLabels): Added. |
| (BarGraphGroup.prototype.range): Added. |
| (BarGraphGroup.prototype._computeRange): Renamed from updateGroupRendering. Now returns the range instead off |
| setting it to each bar, and each SingleBarGraph's render function uses the value via BarGraphGroup's range. |
| (BarGraph): Renamed from SingleBarGraph. Added various arguments introduced in addBar, and now stores various |
| lazily evaluated functions used for rendering. |
| (BarGraph.prototype.render): Rewritten to use canvas to draw bar graphs and show a label when group's |
| showLabels() returns true. |
| (BarGraph.prototype._resizeCanvas): Added. |
| (BarGraph.prototype._renderCanvas): Added. |
| (BarGraph.prototype._renderLabels): Added. We align the top of each label to the middle of each bar and shift it |
| back up by half the height of the label (0.4rem) using margin-top in css. |
| (BarGraph.htmlTemplate): Uses a canvas now. |
| (BarGraph.cssTemplate): |
| |
| * public/v3/components/results-table.js: |
| (ResultsTable.prototype.renderTable): Updated per code changes to BarGraphGroup. |
| (ResultsTableRow.prototype.resultContent): Ditto. |
| |
| * public/v3/components/test-group-results-table.js: Removed. |
| * public/v3/components/test-group-results-viewer.js: Added. |
| (TestGroupResultsViewer): Added. Shows a list of test results with bar graphs with mean and confidence interval |
| indicators. The results of sub tests and metrics can be expanded via "(Breakdown)" link shown below each test. |
| (TestGroupResultsViewer.prototype.setTestGroup): Added. |
| (TestGroupResultsViewer.prototype.setAnalysisResults): Added. |
| (TestGroupResultsViewer.prototype.render): Added. |
| (TestGroupResultsViewer.prototype._renderResultsTable): Compute the depth of the test tree we show, and construct |
| the header rows. Each sub test is "indented" by a new column. |
| (TestGroupResultsViewer.prototype._buildRowForTest): Added. Build rows for metrics of the given test. Expand the |
| list of its child tests if it's in expandedTests. Otherwise add a link to "Breakdown" if it has any child tests. |
| (TestGroupResultsViewer.prototype._buildRowForMetric): Added. Builds rows of table cells to show the results for |
| the given metric for each configuration. |
| (TestGroupResultsViewer.prototype._buildRowForMetric.createConfigurationRow): Added. A helper to build cells for |
| a given configuration represented by a requested commit set. |
| (TestGroupResultsViewer.prototype._buildValueMap): Added. Creates a mappting between a requested commit set, and |
| the list of values, mean, etc... associated with the results for the commit set. |
| (TestGroupResultsViewer.prototype._buildEmptyCells): Added. A helper to create empty cells to indent sub tests. |
| (TestGroupResultsViewer.prototype._expandCurrentMetrics): Added. Highlights the current metrics and renders the |
| label for each bar in the results. |
| (TestGroupResultsViewer.htmlTemplate): Added. |
| (TestGroupResultsViewer.cssTemplate): Added. |
| |
| * public/v3/components/test-group-revision-table.js: Added. |
| (TestGroupRevisionTable): Added. Renders the list of revisions requested for each test configuration as well as |
| ones used in actual testing, and additional repositories being reported (e.g. repositories for helper scripts). |
| (TestGroupRevisionTable.prototype.setTestGroup): Added. |
| (TestGroupRevisionTable.prototype.setAnalysisResults): Added. |
| (TestGroupRevisionTable.prototype.render): Added. |
| (TestGroupRevisionTable.prototype._renderTable): Added. The basic algorithm here is to first create a row entry |
| object for each build request, merge cells that use the same revision of the same repository, and then render |
| the entire table. |
| (TestGroupRevisionTable.prototype._buildCommitCell): Added. |
| (TestGroupRevisionTable.prototype._buildCustomRootsCell): Added. |
| (TestGroupRevisionTable.prototype._mergeCellsWithSameCommitsAcrossRows): Added. Compute rowspan for each cell |
| by traversing the rows that use the same revision per repository, and store it in rowCountByRepository while |
| adding the repository to each succeeding row's repositoriesToSkip. |
| (TestGroupRevisionTable.htmlTemplate): Added. |
| (TestGroupRevisionTable.cssTemplate): Added. |
| |
| * public/v3/index.html: |
| * public/v3/models/analysis-results.js: |
| (AnalysisResults): Added _metricIds and _lazilyComputedHighestTests as instance variables. |
| (AnalysisResults.prototype.findResult): Renamed from find. |
| (AnalysisResults.prototype.highestTests): Added. |
| (AnalysisResults.prototype._computeHighestTests): Added. Finds the root tests for this analysis result. |
| (AnalysisResults.prototype.add): Update _metricIds. |
| (AnalysisResults.prototype.commitSetForRequest): Added. Returns the reported commit set for the build request. |
| This commit set contains the set of revisions reported to /api/report by A/B testers. |
| (AnalysisResultsView.prototype.resultForRequest): Renamed from resultForBuildId. |
| |
| * public/v3/models/metric.js: |
| (Metric.prototype.relativeName): Added. Computes the relative name given the test/metric path. This function is |
| used to determine the label for each test/metric in TestGroupResultsViewer. |
| (Metric.prototype.aggregatorLabel): Extracted from label. |
| (Metric.prototype.label): |
| (Metric.makeFormatter): Added the default value of false to alwaysShowSign. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.compareTestResults): Now takes a metric instead of retrieving it from the analysis task |
| since a custom analysis task may not have a metric associated with it. |
| |
| * public/v3/models/test.js: |
| (Test): Added _computePathLazily as an instance variable. |
| (Test.prototype.path): Lazily computes the path now that this function can be called on the same test for many |
| times in TestGroupResultsViewer while computing relative names of tests and metrics. |
| (Test.prototype._computePath): Extracted path. |
| (Test.prototype.fullName): Modernized the code. |
| (Test.prototype.relativeName): Added. |
| |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile): |
| (UploadedFile.prototype.deletedAt): Added. |
| (UploadedFile.prototype.label): Added. |
| (UploadedFile.prototype.url): Added. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskTestGroupPane.prototype.setTestGroups): |
| (AnalysisTaskTestGroupPane.prototype.setAnalysisResults): Replaced setAnalysisResultsView. Now takes an |
| analysisResults instead of its view. |
| (AnalysisTaskTestGroupPane.prototype.render): No longer enqueues the results table and the retry form to render |
| since the results table no longer exists, and the retry form re-renders itself as needed. |
| (AnalysisTaskTestGroupPane.htmlTemplate): Now uses test-group-results-viewer and test-group-revision-table |
| instead of test-group-results-table, which has been removed. |
| (AnalysisTaskTestGroupPane.cssTemplate): |
| (AnalysisTaskPage.prototype._assignTestResultsIfPossible): |
| |
| * public/v3/pages/create-analysis-task-page.js: |
| (CreateAnalysisTaskPage.prototype._createAnalysisTaskWithGroup): Removed superflous console.log's. |
| |
| * tools/js/v3-models.js: Import LazilyEvaluatedFunction now that it's used in the Test model. |
| |
| * unit-tests/test-model-tests.js: Added. |
| |
| 2017-04-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix after r215061. Clear TriggerableRepositoryGroup's static map in each iteration. |
| |
| * tools/sync-buildbot.js: |
| (syncLoop): |
| |
| 2017-04-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r215061. |
| |
| There was a mismatch between the format updateTriggerable and /api/update-triggerable were using. |
| Namely, each repository group was assumed to contain a name field in /api/update-triggerable |
| but updateTriggerable was not including that at all. |
| |
| We didn't catch this because the test for updateTriggerable also used the wrong format :( |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.updateTriggerable): |
| |
| 2017-04-14 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Add sub-commit UI in commit log viewer. |
| https://bugs.webkit.org/show_bug.cgi?id=170379 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Add an API to return sub-commits for a given commit. |
| Add sub-commit difference viewer into commit log viewer to show changed sub-commits between two commits. |
| Add 'ownsSubCommits' info in 'api/commits' return values. |
| Extend 'api/manifest' to include whether a repositories owns other repositories. |
| Only show this sub-commit difference viewer when a repository owns other repositories and both commits owns sub-commits. |
| Add unit tests for those new features. |
| |
| * browser-tests/commit-log-viewer-tests.js: Updated test cases. |
| * public/api/commits.php: Added 'sub-commits' to provide sub-commit for a given commit. |
| * public/include/commit-log-fetcher.php: Added function to query sub-commit from database. Added 'repository' and 'ownsSubCommits' fields in returning commits. |
| * public/v3/components/expand-collapse-button.js: Added. |
| (ExpandCollapseButton): |
| (ExpandCollapseButton.prototype.didConstructShadowTree): Changes state on click and dispatches 'toggle' event. |
| (ExpandCollapseButton.sizeFactor): |
| (ExpandCollapseButton.buttonContent): |
| (ExpandCollapseButton.cssTemplate): |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer.prototype._renderCommitList): Added sub-commit viewer if two adjacent commits both have sub-commits. |
| (CommitLogViewer.cssTemplate): |
| * public/v3/components/sub-commit-viewer.js: Added. |
| (SubCommitViewer): Added 'SubCommitViewer' class to represent the sub-commit differences between two given commits.` |
| (SubCommitViewer.prototype.didConstructShadowTree): Makes 'expand-collapse' button listen to 'toggle' event. |
| (SubCommitViewer.prototype._toggleVisibility): Updates UI once 'expand-collapse' button is clicked. |
| (SubCommitViewer.prototype.render): Render sub-commit view based on the state. |
| (SubCommitViewer.prototype._renderSubcommitTable): Generates sub-commits difference table entries. |
| (SubCommitViewer.htmlTemplate): |
| (SubCommitViewer.cssTemplate): |
| * public/v3/index.html: Added 'sub-commit-viewer.js' and 'expand-collapse-button.js'. |
| * public/v3/models/commit-log.js: |
| (CommitLog): Added '_subCommits'. |
| (CommitLog.prototype.updateSingleton): Updates 'rawData.ownsSubCommits' as well. |
| (CommitLog.prototype.ownsSubCommits): |
| (CommitLog.prototype.subCommits): Added. Returns sub-commits. |
| (CommitLog.prototype.fetchSubCommits): Added. Fetches sub-commits if haven't fetched them before. |
| (CommitLog.prototype._buildSubCommitMap): Added. Creates a map which maps repositories to commits. |
| (CommitLog.diffSubCommits): Added. Finds difference between two given commits. |
| (CommitLog.fetchBetweenRevisions): Updated due to '_constructFromRawData' change. |
| (CommitLog.fetchForSingleRevision): Updated due to '_constructFromRawData' change. |
| (CommitLog._constructFromRawData): Removed first argument 'repository' as it can be determined by calling 'Repository.findById'. |
| * public/v3/models/repository.js: |
| (Repository): |
| (Repository.prototype.owner): Returns the owner id. |
| (Repository.prototype.ownedRepositories): Returns a list of repositories owned by this repository. |
| * server-tests/api-commits-tests.js: Added tests for 'sub-commits' filter. |
| * server-tests/api-manifest-tests.js: Added a test. |
| * unit-tests/commit-log-tests.js: Added tests for 'fetchSubCommits' and 'diffSubCommits'. |
| * unit-tests/resources/mock-v3-models.js: Added 'ownerRepository' and 'ownedRepository'. |
| |
| 2017-04-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Retrying an A/B testing does not set the repetition count in some cases |
| https://bugs.webkit.org/show_bug.cgi?id=170695 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| When selecting an existing A/B test group, the analysis task page automatically sets the repetition count |
| of its retry to be that of the original test group. However, this information wasn't being passed correctly |
| to the code that actually created a test group. As a result, the retried test group's repetition count does |
| not match that of the original group or the number shown to the user on UI. |
| |
| Fixed the bug by updating this._repetitionCount in setRepetitionCount. |
| |
| * browser-tests/index.html: |
| * browser-tests/test-group-form-tests.js: Added. Added tests. |
| (.createTestGroupFormWithContext): Added. |
| * public/v3/components/test-group-form.js: |
| (TestGroupForm.prototype.setRepetitionCount): |
| (TestGroupForm.formContent): |
| (TestGroupForm): |
| |
| 2017-04-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the UI for scheduling a A/B testing with a custom root |
| https://bugs.webkit.org/show_bug.cgi?id=170622 |
| |
| Reviewed by Anders Carlsson. |
| |
| This patch adds the support for creating a new analysis task with a custom darwinup roots. A follow up patch |
| would update the syncing script to schedule such an A/B testing job to a buildbot instance. |
| |
| |
| * ReadMe.md: Updated instructions for backing up and restoring the database so that it's easier to replace |
| the file path for the backup. |
| |
| * init-database.sql: Make task_platform and task_metric optional in each analysis task. Also added a column |
| to store the root file in commit_set_relationships. |
| |
| * public/api/build-requests.php: |
| (main): Include the uploaded files. |
| |
| * public/api/commits.php: |
| (main): Added the support for querying the latest commits for a given platform. This is used in a new page |
| to create a custom analysis task to autofill the latest revisions for a given platform. |
| |
| * public/api/test-groups.php: |
| (main): Include the uploaded files. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::__construct): Added a list of uploaded_files and a map from its id. |
| (BuildRequestsFetcher::uploaded_files): Added. |
| (BuildRequestsFetcher::fetch_commits_for_set_if_needed): Added the support for including custom roots' id in |
| each commit set, and inserting its meta data in the list of uplaoded files. |
| |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::fetch_latest_for_platform): Added. Finds the latest commit for a given platform. Ideally, |
| we should be finding the latest commit for a given platform, but this is very slow so instead find the commit |
| of the latest build for a given platform. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Added the support for creating an analysis task along with a group. |
| (commit_sets_from_revision_sets): Added the support for custom roots. Verify the specified uploaded file exists |
| and include it in commit_set_relationships. Because commits and upload files are stored in a different column |
| in commit_set_relationships, this function now stores the information for each row of commit_set_relationships |
| except the commit set ID, which is unknown until the set is created, instead of a commit ID. |
| (ensure_commit_sets): Made the each entry in a commit set a row instead of a commit ID as done. As this format |
| is only by v2 UI and detect-changes.js, we don't add the support for specifying custom roots here. |
| |
| * public/privileged-api/upload-file.php: |
| (main): Fixed a typo. Also added one more error check. |
| |
| * public/v3/components/custom-analysis-task-configurator.js: Added. The UI for selecting a test, a platform, |
| and a set of revisions, as well as custom roots for a custom A/B testing job. The first set of revision with |
| custom roots is referred as "baseline", and the second configuration is referred as "comparison" in this class. |
| (CustomAnalysisTaskConfigurator): |
| (CustomAnalysisTaskConfigurator.prototype.tests): Added. |
| (CustomAnalysisTaskConfigurator.prototype.platform): Added. |
| (CustomAnalysisTaskConfigurator.prototype.commitSets): Added. Returns a pair of baseline and comparsion if both |
| have been configured by the user. |
| (CustomAnalysisTaskConfigurator.prototype.didConstructShadowTree): Added. |
| (CustomAnalysisTaskConfigurator.prototype._configureComparison): Added. Called when the user is to configu the |
| "comparison" configuration. |
| (CustomAnalysisTaskConfigurator.prototype.render): Added. |
| (CustomAnalysisTaskConfigurator.prototype._renderTriggerableTests): Added. Renders the list of top-level tests |
| that can be scheduled by a triggerable. |
| (CustomAnalysisTaskConfigurator.prototype._renderTriggerablePlatforms): Added. Renders the list of platforms |
| that can be schedule with the currently selected list of tests by a triggerable. Note that the current UI only |
| lets the user select a single test but the intent is to allow multiple tests to be selected in the near future. |
| (CustomAnalysisTaskConfigurator.prototype._buildCheckboxList): Added. Creates a list of radio boxes to select |
| an item with a callback for each. It automatically sets "selected" class on the selected item. It's used to |
| render both the list of tests and platforms. |
| (CustomAnalysisTaskConfigurator.prototype._updateTriggerable): Added. Finds the triggerable for a given list of |
| tests and platforms. Returns an error when some tests belong to another triggearalbe. |
| (CustomAnalysisTaskConfigurator.prototype._updateRepositoryGroups): Added. Finds a repository group to use when |
| the current triggerable has changed. We try to use the repository group of the same name if there is any, and |
| defaults to the first repository group if there is none. This allows the set of repositories to be specified to |
| more or less persist across different triggerables. For example, if iOS platforms and Mac platforms use two |
| distinct triggerables , and both triggerables have two repository groups: one that only specify the OS and the |
| other that specifies both teh OS and WebKit revision, then this code allows the choice the user had made to |
| specify either just the OS or the OS and WebKit will be preserved when the user switches from an iOS platform |
| to a Mac platform. |
| (CustomAnalysisTaskConfigurator.prototype._updateCommitSetMap): Added. Create a commit set map, the format that |
| TestGroup.createWithTask accepts given "baseline" and "comparison" commit sets. Pretend "comparison" is not set |
| if two sets are identical since it makes no sense to schedule an A/B testing job when A and B are identical. |
| (CustomAnalysisTaskConfigurator.prototype._computeCommitSet): Added. Creates a commit set using the revisions |
| and the csutom roots the user had specified. |
| (CustomAnalysisTaskConfigurator.prototype._renderRepositoryPanes): Added. Renders the pane to specify revisions |
| and custom roots for "baseline" and "comparison". |
| (CustomAnalysisTaskConfigurator.prototype._renderBaselineRevisionTable): Added. |
| (CustomAnalysisTaskConfigurator.prototype._renderComparisonRevisionTable): Added. |
| (CustomAnalysisTaskConfigurator.prototype._optionalRepositoryList): Added. |
| (CustomAnalysisTaskConfigurator.prototype._buildRevisionTable): Added. Creates a table for specifying revisions |
| and custom roots along with a list of repository groups to pick. The set of repositories and custom roots are |
| shown at the all if all repository groups require them. Otherwise, they are grouped at the bottom as optional. |
| (CustomAnalysisTaskConfigurator.prototype._buildRepositoryGroupList): Added. |
| (CustomAnalysisTaskConfigurator.prototype._selectRepositoryGroup): Added. |
| (CustomAnalysisTaskConfigurator.prototype._buildRevisionInput): Added. Creates an input element to specify |
| a revision for a given repository. Autofills it with the latest commit for the currently selected platform if |
| the user had not modified the field by the time the revisions are fetched. |
| (CustomAnalysisTaskConfigurator.htmlTemplate): Added. |
| (CustomAnalysisTaskConfigurator.cssTemplate): Added. |
| |
| * public/v3/components/instant-file-uploader.js: Added. A form to upload a custom darwinup root in "baseline" |
| or "comparison" configurations of CustomAnalysisTaskConfigurator. It's "instant" because it auto-detects when a |
| file to be uploaded had already been uploaded elsewhere by checking its SHA-256 hash. |
| (InstantFileUploader): |
| (InstantFileUploader.prototype.hasFileToUpload): Added. |
| (InstantFileUploader.prototype.uploadedFiles): Added. |
| (InstantFileUploader.prototype.addUploadedFile): Added. It's called on the uploader for "comparison" |
| configuration when the uploader for "baseline" configuration dipsatches "uploadedFile" action to automatically |
| mirror the newly uploaded custom root to "comparision" configuration. |
| (InstantFileUploader.prototype.didConstructShadowTree): Added. |
| (InstantFileUploader.prototype.render): Added. |
| (InstantFileUploader.prototype._renderUploadedFiles): Added. Renders the list of the uploaded files. |
| (InstantFileUploader.prototype._renderPreuploadFiles): Added. Renders the list of the files to be uploaded with |
| a progress bar. |
| (InstantFileUploader.prototype._updateUploadStatus): Added. Updates the progress bar for uploading the file. |
| (InstantFileUploader.prototype._formatUploadError): Added. |
| (InstantFileUploader.prototype._didFileInputChange): Added. Called when the user picks a file to uploaded on |
| the input element. Fetch the meta data for the uploaded file with the same SHA-256 hash if there is any, and |
| start uploading the file if there isn't one. |
| (InstantFileUploader.prototype._removeUploadedFile): Added. |
| (InstantFileUploader.prototype._didUploadFile): Added. Move a file from the list of files to be uploaded to |
| the list of uploaded files. |
| (InstantFileUploader.htmlTemplate): Added. |
| (InstantFileUploader.cssTemplate): Added. |
| |
| * public/v3/index.html: |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask): Made platform and metric optional as it is now. |
| (AnalysisTask.findByPlatformAndMetric): Skip analysis tasks without a platform or a metric. |
| (AnalysisTask.prototype.isCustom): Added. Returns true for a custom analysis task. |
| (AnalysisTask.fetchRelatedTasks): Skip custom analysis tasks. |
| (AnalysisTask._constructAnalysisTasksFromRawData): Construct analysis tasks even if they were missing a metric |
| or a platform instead of silently skipping them. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.constructBuildRequestsFromData): Construct uploaded file objects returned by /api/build-requests. |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog.fetchLatestCommitForPlatform): Added. |
| |
| * public/v3/models/commit-set.js: |
| (CommitSet): Added this._customRoots. |
| (CommitSet.prototype.customRoots): Returns this._customRoots. |
| (CommitSet.prototype.equals): Returns false when the set of custom roots are not equal. |
| (CommitSet.areCustomRootsEqual): Added. |
| (CustomCommitSet): |
| (CustomCommitSet.prototype.equals): Added. |
| (CustomCommitSet.prototype.customRoots): Added. |
| (CustomCommitSet.prototype.addCustomRoot): Added. |
| |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest): Store fileUploadSizeLimit in the manifest as UploadedFile.fileUploadSizeLimit. |
| This allows a file size check in the client size instead of uploading it to the server and receiving an error. |
| |
| * public/v3/models/metric.js: |
| (Metric.formatTime): Moved from ChartPaneStatusView to be also used by InstantFileUploader._renderUploadedFiles. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.createWithTask): Added. |
| (TestGroup.prototype.createAndRefetchTestGroups): |
| (TestGroup.prototype._revisionSetsFromCommitSets): Added. Extracted from createAndRefetchTestGroups. |
| (TestGroup.prototype._fetchTestGroupsForTask): Added. Extracted from createAndRefetchTestGroups. |
| |
| * public/v3/models/triggerable.js: |
| (Triggerable.triggerablePlatformsForTests): Added. |
| (Triggerable.sortByNamePreferringSmallerRepositories): Added. |
| |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile.prototype.createdAt): Added. |
| (UploadedFile.prototype.filename): Added. |
| (UploadedFile.prototype.author): Added. |
| (UploadedFile.prototype.size): Added. |
| (UploadedFile.uploadFile): Added a client-side check for the file size using UploadedFile.fileUploadSizeLimit. |
| (UploadedFile.fetchUnloadedFileWithIdenticalHash): Ditto. Also fixed a bug that 404 was resulting in a rejected |
| promise instead of a resolved promise with null. |
| |
| * public/v3/pages/analysis-category-page.js: |
| (AnalysisCategoryPage.prototype._reconstructTaskList): Modernized the code. Added the support for platform and |
| metric being null for some analysis tasks. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._didFetchTask): Don't fetch the measurement set or create a chart for custom tasks. |
| (AnalysisTaskPage.prototype.render): Don't display the charts or the stacking table for custom tasks. |
| (AnalysisTaskPage.prototype._renderTaskNameAndStatus): Don't try to show the full test name for custom tasks |
| since it's not associated with exactly one pair. |
| |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView.prototype._renderBuildRevisionTable): |
| (ChartPaneStatusView.prototype._formatTime): Moved to Metric.formatTime. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype._analyzeRange): Set inProgress to true to hide CustomAnalysisTaskConfigurator in |
| CreateAnalysisTaskPage when creating a non-custom analysis task for a specific range. |
| |
| * public/v3/pages/create-analysis-task-page.js: |
| (CreateAnalysisTaskPage): This page now shows CustomAnalysisTaskConfigurator by default, and lets a user create |
| a custom analysis task by picking a test, a platform, and a set of revisions and custom darwinup roots. |
| (CreateAnalysisTaskPage.prototype.updateFromSerializedState): Show a message when inProgress is set. This is |
| the old behavior of this page. |
| (CreateAnalysisTaskPage.prototype.didConstructShadowTree): Added. |
| (CreateAnalysisTaskPage.prototype._createAnalysisTaskWithGroup): Added. |
| (CreateAnalysisTaskPage.prototype.render): |
| (CreateAnalysisTaskPage.prototype._renderMessage): Added. Hides CustomAnalysisTaskConfigurator and the select |
| element to specify the numebr of iterations when a message is set. |
| (CreateAnalysisTaskPage.htmlTemplate): |
| (CreateAnalysisTaskPage.cssTemplate): |
| |
| * public/v3/pages/page-router.js: |
| (PageRouter.prototype.route): Always enqueue the page to re-render when the route has changed. |
| |
| * server-tests/api-build-requests-tests.js: Updated test cases now that the response contains a list of |
| uploaded files associated with build requests. |
| |
| * server-tests/privileged-api-create-test-group-tests.js: Added test cases for creating a custom analysis task |
| and a test group with custom roots. |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.addMockData): Updated the mock data to satisfy new constraint on analysis-tasks table. |
| |
| * tools/js/remote.js: Include global.FormData from form-data.js. |
| |
| * unit-tests/build-request-tests.js: |
| (sampleBuildRequestData): Updated the mock response. |
| * unit-tests/buildbot-syncer-tests.js: |
| (createSampleBuildRequest): Ditto. |
| * unit-tests/test-groups-tests.js: |
| (sampleTestGroup): Ditto. |
| |
| 2017-04-10 Commit Queue <commit-queue@webkit.org> |
| |
| Unreviewed, rolling out r215202. |
| https://bugs.webkit.org/show_bug.cgi?id=170694 |
| |
| Committed incorrectly (Requested by rniwa on #webkit). |
| |
| Reverted changeset: |
| |
| "Add the UI for scheduling a A/B testing with a custom root" |
| https://bugs.webkit.org/show_bug.cgi?id=170622 |
| http://trac.webkit.org/changeset/215202 |
| |
| 2017-04-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the UI for scheduling a A/B testing with a custom root |
| https://bugs.webkit.org/show_bug.cgi?id=170622 |
| |
| Reviewed by Anders Carlsson. |
| |
| This patch adds the support for creating a new analysis task with a custom darwinup roots. A follow up patch |
| would update the syncing script to schedule such an A/B testing job to a buildbot instance. |
| |
| |
| * ReadMe.md: Updated instructions for backing up and restoring the database so that it's easier to replace |
| the file path for the backup. |
| |
| * init-database.sql: Make task_platform and task_metric optional in each analysis task. Also added a column |
| to store the root file in commit_set_relationships. |
| |
| * public/api/build-requests.php: |
| (main): Include the uploaded files. |
| |
| * public/api/commits.php: |
| (main): Added the support for querying the latest commits for a given platform. This is used in a new page |
| to create a custom analysis task to autofill the latest revisions for a given platform. |
| |
| * public/api/test-groups.php: |
| (main): Include the uploaded files. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::__construct): Added a list of uploaded_files and a map from its id. |
| (BuildRequestsFetcher::uploaded_files): Added. |
| (BuildRequestsFetcher::fetch_commits_for_set_if_needed): Added the support for including custom roots' id in |
| each commit set, and inserting its meta data in the list of uplaoded files. |
| |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::fetch_latest_for_platform): Added. Finds the latest commit for a given platform. Ideally, |
| we should be finding the latest commit for a given platform, but this is very slow so instead find the commit |
| of the latest build for a given platform. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Added the support for creating an analysis task along with a group. |
| (commit_sets_from_revision_sets): Added the support for custom roots. Verify the specified uploaded file exists |
| and include it in commit_set_relationships. Because commits and upload files are stored in a different column |
| in commit_set_relationships, this function now stores the information for each row of commit_set_relationships |
| except the commit set ID, which is unknown until the set is created, instead of a commit ID. |
| (ensure_commit_sets): Made the each entry in a commit set a row instead of a commit ID as done. As this format |
| is only by v2 UI and detect-changes.js, we don't add the support for specifying custom roots here. |
| |
| * public/privileged-api/upload-file.php: |
| (main): Fixed a typo. Also added one more error check. |
| |
| * public/v3/components/custom-analysis-task-configurator.js: Added. The UI for selecting a test, a platform, |
| and a set of revisions, as well as custom roots for a custom A/B testing job. The first set of revision with |
| custom roots is referred as "baseline", and the second configuration is referred as "comparison" in this class. |
| (CustomAnalysisTaskConfigurator): |
| (CustomAnalysisTaskConfigurator.prototype.tests): Added. |
| (CustomAnalysisTaskConfigurator.prototype.platform): Added. |
| (CustomAnalysisTaskConfigurator.prototype.commitSets): Added. Returns a pair of baseline and comparsion if both |
| have been configured by the user. |
| (CustomAnalysisTaskConfigurator.prototype.didConstructShadowTree): Added. |
| (CustomAnalysisTaskConfigurator.prototype._configureComparison): Added. Called when the user is to configu the |
| "comparison" configuration. |
| (CustomAnalysisTaskConfigurator.prototype.render): Added. |
| (CustomAnalysisTaskConfigurator.prototype._renderTriggerableTests): Added. Renders the list of top-level tests |
| that can be scheduled by a triggerable. |
| (CustomAnalysisTaskConfigurator.prototype._renderTriggerablePlatforms): Added. Renders the list of platforms |
| that can be schedule with the currently selected list of tests by a triggerable. Note that the current UI only |
| lets the user select a single test but the intent is to allow multiple tests to be selected in the near future. |
| (CustomAnalysisTaskConfigurator.prototype._buildCheckboxList): Added. Creates a list of radio boxes to select |
| an item with a callback for each. It automatically sets "selected" class on the selected item. It's used to |
| render both the list of tests and platforms. |
| (CustomAnalysisTaskConfigurator.prototype._updateTriggerable): Added. Finds the triggerable for a given list of |
| tests and platforms. Returns an error when some tests belong to another triggearalbe. |
| (CustomAnalysisTaskConfigurator.prototype._updateRepositoryGroups): Added. Finds a repository group to use when |
| the current triggerable has changed. We try to use the repository group of the same name if there is any, and |
| defaults to the first repository group if there is none. This allows the set of repositories to be specified to |
| more or less persist across different triggerables. For example, if iOS platforms and Mac platforms use two |
| distinct triggerables , and both triggerables have two repository groups: one that only specify the OS and the |
| other that specifies both teh OS and WebKit revision, then this code allows the choice the user had made to |
| specify either just the OS or the OS and WebKit will be preserved when the user switches from an iOS platform |
| to a Mac platform. |
| (CustomAnalysisTaskConfigurator.prototype._updateCommitSetMap): Added. Create a commit set map, the format that |
| TestGroup.createWithTask accepts given "baseline" and "comparison" commit sets. Pretend "comparison" is not set |
| if two sets are identical since it makes no sense to schedule an A/B testing job when A and B are identical. |
| (CustomAnalysisTaskConfigurator.prototype._computeCommitSet): Added. Creates a commit set using the revisions |
| and the csutom roots the user had specified. |
| (CustomAnalysisTaskConfigurator.prototype._renderRepositoryPanes): Added. Renders the pane to specify revisions |
| and custom roots for "baseline" and "comparison". |
| (CustomAnalysisTaskConfigurator.prototype._renderBaselineRevisionTable): Added. |
| (CustomAnalysisTaskConfigurator.prototype._renderComparisonRevisionTable): Added. |
| (CustomAnalysisTaskConfigurator.prototype._optionalRepositoryList): Added. |
| (CustomAnalysisTaskConfigurator.prototype._buildRevisionTable): Added. Creates a table for specifying revisions |
| and custom roots along with a list of repository groups to pick. The set of repositories and custom roots are |
| shown at the all if all repository groups require them. Otherwise, they are grouped at the bottom as optional. |
| (CustomAnalysisTaskConfigurator.prototype._buildRepositoryGroupList): Added. |
| (CustomAnalysisTaskConfigurator.prototype._selectRepositoryGroup): Added. |
| (CustomAnalysisTaskConfigurator.prototype._buildRevisionInput): Added. Creates an input element to specify |
| a revision for a given repository. Autofills it with the latest commit for the currently selected platform if |
| the user had not modified the field by the time the revisions are fetched. |
| (CustomAnalysisTaskConfigurator.htmlTemplate): Added. |
| (CustomAnalysisTaskConfigurator.cssTemplate): Added. |
| |
| * public/v3/components/instant-file-uploader.js: Added. A form to upload a custom darwinup root in "baseline" |
| or "comparison" configurations of CustomAnalysisTaskConfigurator. It's "instant" because it auto-detects when a |
| file to be uploaded had already been uploaded elsewhere by checking its SHA-256 hash. |
| (InstantFileUploader): |
| (InstantFileUploader.prototype.hasFileToUpload): Added. |
| (InstantFileUploader.prototype.uploadedFiles): Added. |
| (InstantFileUploader.prototype.addUploadedFile): Added. It's called on the uploader for "comparison" |
| configuration when the uploader for "baseline" configuration dipsatches "uploadedFile" action to automatically |
| mirror the newly uploaded custom root to "comparision" configuration. |
| (InstantFileUploader.prototype.didConstructShadowTree): Added. |
| (InstantFileUploader.prototype.render): Added. |
| (InstantFileUploader.prototype._renderUploadedFiles): Added. Renders the list of the uploaded files. |
| (InstantFileUploader.prototype._renderPreuploadFiles): Added. Renders the list of the files to be uploaded with |
| a progress bar. |
| (InstantFileUploader.prototype._updateUploadStatus): Added. Updates the progress bar for uploading the file. |
| (InstantFileUploader.prototype._formatUploadError): Added. |
| (InstantFileUploader.prototype._didFileInputChange): Added. Called when the user picks a file to uploaded on |
| the input element. Fetch the meta data for the uploaded file with the same SHA-256 hash if there is any, and |
| start uploading the file if there isn't one. |
| (InstantFileUploader.prototype._removeUploadedFile): Added. |
| (InstantFileUploader.prototype._didUploadFile): Added. Move a file from the list of files to be uploaded to |
| the list of uploaded files. |
| (InstantFileUploader.htmlTemplate): Added. |
| (InstantFileUploader.cssTemplate): Added. |
| |
| * public/v3/index.html: |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask): Made platform and metric optional as it is now. |
| (AnalysisTask.findByPlatformAndMetric): Skip analysis tasks without a platform or a metric. |
| (AnalysisTask.prototype.isCustom): Added. Returns true for a custom analysis task. |
| (AnalysisTask.fetchRelatedTasks): Skip custom analysis tasks. |
| (AnalysisTask._constructAnalysisTasksFromRawData): Construct analysis tasks even if they were missing a metric |
| or a platform instead of silently skipping them. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.constructBuildRequestsFromData): Construct uploaded file objects returned by /api/build-requests. |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog.fetchLatestCommitForPlatform): Added. |
| |
| * public/v3/models/commit-set.js: |
| (CommitSet): Added this._customRoots. |
| (CommitSet.prototype.customRoots): Returns this._customRoots. |
| (CommitSet.prototype.equals): Returns false when the set of custom roots are not equal. |
| (CommitSet.areCustomRootsEqual): Added. |
| (CustomCommitSet): |
| (CustomCommitSet.prototype.equals): Added. |
| (CustomCommitSet.prototype.customRoots): Added. |
| (CustomCommitSet.prototype.addCustomRoot): Added. |
| |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest): Store fileUploadSizeLimit in the manifest as UploadedFile.fileUploadSizeLimit. |
| This allows a file size check in the client size instead of uploading it to the server and receiving an error. |
| |
| * public/v3/models/metric.js: |
| (Metric.formatTime): Moved from ChartPaneStatusView to be also used by InstantFileUploader._renderUploadedFiles. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.createWithTask): Added. |
| (TestGroup.prototype.createAndRefetchTestGroups): |
| (TestGroup.prototype._revisionSetsFromCommitSets): Added. Extracted from createAndRefetchTestGroups. |
| (TestGroup.prototype._fetchTestGroupsForTask): Added. Extracted from createAndRefetchTestGroups. |
| |
| * public/v3/models/triggerable.js: |
| (Triggerable.triggerablePlatformsForTests): Added. |
| (Triggerable.sortByNamePreferringSmallerRepositories): Added. |
| |
| * public/v3/models/uploaded-file.js: |
| (UploadedFile.prototype.createdAt): Added. |
| (UploadedFile.prototype.filename): Added. |
| (UploadedFile.prototype.author): Added. |
| (UploadedFile.prototype.size): Added. |
| (UploadedFile.uploadFile): Added a client-side check for the file size using UploadedFile.fileUploadSizeLimit. |
| (UploadedFile.fetchUnloadedFileWithIdenticalHash): Ditto. Also fixed a bug that 404 was resulting in a rejected |
| promise instead of a resolved promise with null. |
| |
| * public/v3/pages/analysis-category-page.js: |
| (AnalysisCategoryPage.prototype._reconstructTaskList): Modernized the code. Added the support for platform and |
| metric being null for some analysis tasks. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._didFetchTask): Don't fetch the measurement set or create a chart for custom tasks. |
| (AnalysisTaskPage.prototype.render): Don't display the charts or the stacking table for custom tasks. |
| (AnalysisTaskPage.prototype._renderTaskNameAndStatus): Don't try to show the full test name for custom tasks |
| since it's not associated with exactly one pair. |
| |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView.prototype._renderBuildRevisionTable): |
| (ChartPaneStatusView.prototype._formatTime): Moved to Metric.formatTime. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype._analyzeRange): Set inProgress to true to hide CustomAnalysisTaskConfigurator in |
| CreateAnalysisTaskPage when creating a non-custom analysis task for a specific range. |
| |
| * public/v3/pages/create-analysis-task-page.js: |
| (CreateAnalysisTaskPage): This page now shows CustomAnalysisTaskConfigurator by default, and lets a user create |
| a custom analysis task by picking a test, a platform, and a set of revisions and custom darwinup roots. |
| (CreateAnalysisTaskPage.prototype.updateFromSerializedState): Show a message when inProgress is set. This is |
| the old behavior of this page. |
| (CreateAnalysisTaskPage.prototype.didConstructShadowTree): Added. |
| (CreateAnalysisTaskPage.prototype._createAnalysisTaskWithGroup): Added. |
| (CreateAnalysisTaskPage.prototype.render): |
| (CreateAnalysisTaskPage.prototype._renderMessage): Added. Hides CustomAnalysisTaskConfigurator and the select |
| element to specify the numebr of iterations when a message is set. |
| (CreateAnalysisTaskPage.htmlTemplate): |
| (CreateAnalysisTaskPage.cssTemplate): |
| |
| * public/v3/pages/page-router.js: |
| (PageRouter.prototype.route): Always enqueue the page to re-render when the route has changed. |
| |
| * server-tests/api-build-requests-tests.js: Updated test cases now that the response contains a list of |
| uploaded files associated with build requests. |
| *server-tests/api-commits-tests.js: Added a test case for /api/commits/<repository-name>/latest?platform=X. |
| * server-tests/privileged-api-create-test-group-tests.js: Added test cases for creating a custom analysis task |
| and a test group with custom roots. |
| * server-tests/resources/mock-data.js: |
| (MockData.addMockData): Updated the mock data to satisfy new constraint on analysis-tasks table. Also inserted |
| more commits, builds, and build_commits rows for testing /api/commits/<repository-name>/latest?platform=X. |
| |
| * tools/js/remote.js: Include global.FormData from form-data.js. |
| |
| * unit-tests/analysis-task-tests.js: Added a test for calling findByPlatformAndMetric when there is a custom |
| analysis task. |
| (sampleAnalysisTask): Removed the category since /api/analysis-tasks/ no longer generate this property. |
| (sampleCustomAnalysisTask): Added. |
| * unit-tests/build-request-tests.js: |
| (sampleBuildRequestData): Updated the mock response. Added a test case for fetcing custom roots. |
| * unit-tests/buildbot-syncer-tests.js: |
| (createSampleBuildRequest): Ditto. |
| * unit-tests/test-groups-tests.js: |
| (sampleTestGroup): Ditto. |
| |
| 2017-04-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make cycler page scroll down when a dashboard is too tall for the current viewport size |
| https://bugs.webkit.org/show_bug.cgi?id=170588 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Updated the cycler page to scroll down smoothly over 500ms and scroll up again before moving to the next page |
| when a dashboard page is too tall to be shown at once. For now, we assume that each dashboard's height is no |
| more than 2x the height of the viewport. |
| |
| * public/cycler.html: |
| |
| 2017-04-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Each build request should be associated with a repository group |
| https://bugs.webkit.org/show_bug.cgi?id=170528 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Make the buildbot syncing script use the concept of repository groups so that each repository group can post |
| a different set of properties to buildbot. In order to do this, we associate each build request with |
| a repository group to use. Each triggerable's repository groups is now updated by the syncing scripts via |
| /api/update-triggerable just the same way the set of the supported platform, test pairs are updated. |
| |
| Each repository group specifies the list of repositories, a dictionary that maps the buildbot property name |
| to either a string value or a repository name enclosed in < and >: |
| |
| ```js |
| "repositoryGroups": { |
| "webkit-svn": { |
| "repositories": ["WebKit", "macOS"], |
| "properties": {"os": "<macOS>", "wk": "<WebKit>"} |
| } |
| } |
| ``` |
| |
| With this, removed the support for specifying a repository to use in generic dictionary of properties via |
| a dictionary with a single key of "root", "rootOptions", and "rootsExcluding". We now validate that the list of |
| repositories in each repository group matches exactly the ones used in buildbot properties as well as ones in |
| build requests. |
| |
| After this patch, sync-with-buildbot.js will no longer schedule a build request without a repository group. |
| Run the appropriate database queries to set the repository group on each build request. Because of this change, |
| this patch also makes BuildbotTriggerable.prototype.syncOnce more robust against invalid build requests. |
| Instead of throwing an exception and exiting early, it simply skips all build requests that belong to the same |
| test group if the next build request to be scheduled does not specify a repository group. |
| |
| * init-database.sql: Add request_repository_group column to build_requests table, and a unique constraint for |
| repository and group pair in triggerable_repositories table. |
| |
| * public/api/update-triggerable.php: |
| (main): Validate and insert repository groups. |
| (validate_configurations): Extracted from main. |
| (validate_repository_groups): Added. |
| |
| * public/v3/models/repository.js: |
| (Repository.findTopLevelByName): Added. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::results_internal): Include the repository group of each request in the JSON response. |
| |
| * public/include/repository-group-finder.php: Added. A helper class to find the repository group for a given |
| triggerable for a list of repositories. |
| (RepositoryGroupFinder): Added. |
| (RepositoryGroupFinder::__construct): Added. |
| (RepositoryGroupFinder::find_by_repositories): Added. |
| (RepositoryGroupFinder::populate_map): Added. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Each element in an array returned by ensure_commit_sets and commit_sets_from_revision_sets now contains |
| "set", the list of commit IDs, and "repository_group", the repository group identified for each commit set. |
| Use that to set the repository group in each new build request. |
| (commit_sets_from_revision_sets): Use RepositoryGroupFinder to find the right repository group. |
| (ensure_commit_sets): Ditto. There is no need to find a repository group for each commit set here since its |
| argument is keyed by the repository name. e.g. {"WebKit": [123, 456], "macOS": ["16A323", "16A323"]} |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest): |
| (BuildRequest.prototype.triggerable): Added. |
| (BuildRequest.prototype.repositoryGroup): Added. |
| (BuildRequest.constructBuildRequestsFromData): Resolve the triggerable and the repository group. |
| |
| * public/v3/models/triggerable.js: |
| (Triggerable.prototype.name): Added. |
| (Triggerable.prototype.acceptedRepositories): Deleted. |
| (TriggerableRepositoryGroup): |
| (TriggerableRepositoryGroup.prototype.accepts): Added. Retruns true if the repository group |
| |
| * server-tests/api-build-requests-tests.js: Added a test for getting the repository group of a build request. |
| * server-tests/api-manifest-tests.js: Added assertions for the repository groups. |
| * server-tests/api-report-tests.js: |
| (.emptyReport): |
| (.reportWithTwoLevelsOfAggregations): |
| * server-tests/api-update-triggerable.js: Added test cases for updating the repository groups associated with |
| a triggerable. |
| (.updateWithOSXRepositoryGroup): |
| (.mapRepositoriesByGroup): |
| * server-tests/privileged-api-create-test-group-tests.js: |
| (addTriggerableAndCreateTask): Add two repository groups for testing. Added assertions for repository groups |
| in existing test cases, and added a test case for creating a test group with two different repository groups. |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.resetV3Models): Reset TriggerableRepositoryGroup's static maps. |
| (MockData.emptyTriggeragbleId): Added. |
| (MockData.macosRepositoryId): Added. |
| (MockData.webkitRepositoryId): Added. |
| (MockData.gitWebkitRepositoryId): Added. |
| (MockData.addMockData): Create repository groups as needed. Renamed the "OS X" repository to "macOS" since some |
| tests were using the latter, and now we need mock data to be consistent across tests due to stricter checks. |
| (MockData.addEmptyTriggerable): Added. Used in api-update-triggerable.js. |
| (MockData.addMockTestGroupWithGitWebKit): Added. Used in api-build-requests-tests.js. |
| (MockData.addAnotherMockTestGroup): Cleanup. |
| (MockData.mockTestSyncConfigWithSingleBuilder): Updated the mock configuration per code changes. |
| (MockData.mockTestSyncConfigWithTwoBuilders): Ditto. |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: Updated a test case testing /api/update-triggerable to test |
| updating the set of repository groups in addition to the set of test, platform pairs. |
| (.refetchManifest): Added. |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer): Now takes a set of configurations shared across syncers: repositoryGroups, slaveArgument, |
| and buildRequestArgument as the third argument. |
| (BuildbotSyncer.prototype.repositoryGroups): Added. |
| (BuildbotSyncer.prototype._testGroupMapForBuildRequests): Cleaned up the code to use Array.prototype.find. |
| Also added an assertion that the build request is associated with a repository group. |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): Removed the support for using an arbitary property to |
| specify a revision in favor of explicity listing each property and repository name in a repository group. |
| (BuildbotSyncer._loadConfig): Removed the support for "shared", which specified the set of buildbot properties |
| shared across syncers, the name of properties which specifies the build slave name and build request ID. These |
| values are not stored as top-level properties and superseded by the concept of repository groups. |
| (BuildbotSyncer._parseRepositoryGroup): Parses and validates repository groups. |
| (BuildbotSyncer._createTestConfiguration): We no longer expect each configuration to specify a dictionary of |
| properties or buildRequestArgument (often inherited from shared). |
| (BuildbotSyncer._validateAndMergeConfig): Removed "slaveArgument" and "buildRequestArgument" from the list of |
| allowed proeprties in each configuration now that they're specified as top-level properties. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.updateTriggerable): Update the associated repository groups. |
| (BuildbotTriggerable.prototype.syncOnce): Skip test groups for which the next build request to be scheduled is |
| not included in the list of valid build requests. |
| (BuildbotTriggerable.prototype._validateRequests): Now returns the list of valid build requests, which excludes |
| those that lack a repository group set. |
| (BuildbotTriggerable.prototype._nextRequestInGroup): Extracted from _scheduleRequestIfSlaveIsAvailable. Finds |
| the next build request to be scheduled for the test group. |
| (BuildbotTriggerable.prototype._scheduleRequestIfSlaveIsAvailable): Renamed from |
| _scheduleNextRequestInGroupIfSlaveIsAvailable. Now takes the syncer and the slave name as arguments instead of |
| a test group information since syncOnce now calls _nextRequestInGroup to find the next build request. |
| |
| * tools/js/v3-models.js: |
| |
| * unit-tests/build-request-tests.js: Fixed the test name. |
| |
| * unit-tests/buildbot-syncer-tests.js: Removed tests for "rootOptions" and "rootsExcluding", and added tests |
| for parsing repository groups. |
| (sampleiOSConfig): Updated the mock configuration per code changes. |
| (sampleiOSConfigWithExpansions): Ditto. |
| (smallConfiguration): Ditto. Now returns the entire configuration instead of a single builder configuration. |
| Various test cases have been updated to reflect this. |
| (createSampleBuildRequest): Removed the git hash of WebKit to match the repository groups listed in the mock |
| configurations. The git hash was there to test "rootOptions", which this patch removed. |
| (samplePendingBuild): Removed "root_dict" from the list of properties. This was used to test "rootsExcluding" |
| which, again, this patch removed. |
| (sampleInProgressBuild): Ditto. |
| (sampleFinishedBuild): Ditto. |
| |
| * unit-tests/resources/mock-v3-models.js: |
| (MockModels.inject): Added ock repository groups so that existing tests will continue to function. |
| |
| 2017-04-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Introduce the notion of repository groups to triggerables |
| https://bugs.webkit.org/show_bug.cgi?id=170228 |
| |
| Reviewed by Chris Dumez. |
| |
| On some triggerable, it's desirable to specify multiple sets of repositories that are accepted. |
| |
| For example, if a repository X transitioned from Subversion to Git, and if a triggerable accepted X and |
| some other repository Y, then it's desirable to two sets: (X-Subversion, Y) and (X-Git, Y) since neither |
| (X-Subversion, X-Git) nor (X-Subversion, X-Git, Y) makes sense as a set. |
| |
| This patch introduces triggerable_repository_groups table to represent a set of repositories accepted by |
| a triggerable. It has many to one relationship to build_triggerables and triggerable_repositories in turn |
| now has many to one relationship to triggerable_repository_groups instead of build_triggerables. |
| |
| Also make it possible to disable a triggerable e.g. a set of tests and platforms are no longer supported. |
| We don't want to delete the triggerable completely from the database since it would result in the associated |
| A/B testing results being purged, which is not desirale. |
| |
| To migrate an existing database, run the following transaction: |
| ```sql |
| BEGIN; |
| ALTER TABLE build_triggerables ADD COLUMN triggerable_disabled boolean NOT NULL DEFAULT FALSE; |
| |
| CREATE TABLE triggerable_repository_groups ( |
| repositorygroup_id serial PRIMARY KEY, |
| repositorygroup_triggerable integer REFERENCES build_triggerables NOT NULL, |
| repositorygroup_name varchar(256) NOT NULL, |
| repositorygroup_description varchar(256), |
| repositorygroup_accepts_roots boolean NOT NULL DEFAULT FALSE, |
| CONSTRAINT repository_group_name_must_be_unique_for_triggerable |
| UNIQUE(repositorygroup_triggerable, repositorygroup_name)); |
| INSERT INTO triggerable_repository_groups (repositorygroup_triggerable, repositorygroup_name) |
| SELECT triggerable_id, 'default' FROM build_triggerables; |
| |
| ALTER TABLE triggerable_repositories ADD COLUMN trigrepo_group integer REFERENCES triggerable_repository_groups; |
| UPDATE triggerable_repositories SET trigrepo_group = repositorygroup_id FROM triggerable_repository_groups |
| WHERE trigrepo_triggerable = repositorygroup_triggerable; |
| ALTER TABLE triggerable_repositories ALTER COLUMN trigrepo_group SET NOT NULL; |
| |
| ALTER TABLE triggerable_repositories DROP COLUMN trigrepo_triggerable; |
| ALTER TABLE triggerable_repositories DROP COLUMN trigrepo_sub_roots; |
| END; |
| ``` |
| |
| * init-database.sql: |
| * public/admin/triggerables.php: Use a custom column to make forms to add and configure repository groups. |
| (insert_triggerable_repositories): Added. |
| (generate_repository_list): Added. |
| (generate_repository_form): Added. |
| (generate_repository_checkboxes): Now generates checkboxes for a repository group instead of a triggerable. |
| |
| * public/include/manifest-generator.php: |
| (fetch_triggerables): Fixed the bug that we were not filtering results with query in /api/triggerable. |
| Rewrote it to include an array of repository groups, which in turn contains an array of repositories along |
| with its name and a description, and a boolean indicating whether it accepts a custom root file or not. |
| The boolean will be used when we're adding the support for perf try bots. We will keep acceptedRepositories |
| since it's still used by detect-changes.js. |
| |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest): Resolve repositoriy, test, and platform IDs to their respective objects. |
| |
| * public/v3/models/triggerable.js: |
| (Triggerable): |
| (Triggerable.prototype.isDisabled): Added. |
| (Triggerable.prototype.repositoryGroups): Added. |
| (Triggerable.prototype.acceptsTest): Added. |
| (TriggerableRepositoryGroup): Added. |
| (TriggerableRepositoryGroup.prototype.description): Added. |
| (TriggerableRepositoryGroup.prototype.acceptsCustomRoots): Added. |
| (TriggerableRepositoryGroup.prototype.repositories): Added. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._didFetchTask): Don't use a disabled triggerable. |
| |
| * server-tests/api-manifest-tests.js: Updated a test case to test repository groups. |
| |
| * tools/js/database.js: |
| (tableToPrefixMap): Added triggerable_repository_groups. |
| |
| * tools/js/v3-models.js: Imported TriggerableRepositoryGroup from triggerable.js. |
| |
| 2017-03-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. For OS versions, we can end up with non-alphanumeric revision. |
| Delete the code path only used by the v2 UI since nobody uses that now. |
| |
| * public/api/commits.php: |
| (main): |
| |
| 2017-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| sync-buildbot.js can schedule more than one build per builder |
| https://bugs.webkit.org/show_bug.cgi?id=170318 |
| |
| Reviewed by Saam Barati. |
| |
| The bug was caused by _scheduleNextRequestInGroupIfSlaveIsAvailable not returning a promise when |
| scheduling the first build request of a test group. This resulted in _pullBuildbotOnAllSyncers |
| to prematurely resolve before POST'ing new build had finished. That in turn could result in the |
| next cycle of syncing to occur before POST'ing has actually taken place. |
| |
| More precisely, when the nextRequest was the first request or its associated syncer object could |
| not be identified, we were supposed to find the first available syncer, schedule the request, |
| and then return the promise returned by scheduleRequestInGroupIfAvailable. However, the for loop |
| which called scheduleRequestInGroupIfAvailable on every syncer was declaring its own variable |
| named "promise" thereby shadowing the outer variable, which is returned to the caller. |
| |
| Fixed the bug by not declaring a shadowing variable, and refactored the code. Namely, the only |
| reason we had such a complicated logic with two local variables, promise and syncer, was so that |
| we could log that we're scheduling a build. Extracted this code as _scheduleRequestWithLog. |
| |
| _scheduleNextRequestInGroupIfSlaveIsAvailable can now simply exit early with a call to |
| _scheduleRequestWithLog when the syncer is readily identified. When looping over syncers, it can |
| simply return the first non-null result of _scheduleNextRequestInGroupIfSlaveIsAvailable. |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: Added a test case where we wait 10ms after |
| receiving the request to POST a build. There should be no new network request until we resolve |
| this request. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype._scheduleNextRequestInGroupIfSlaveIsAvailable): Fixed the bug. |
| (BuildbotTriggerable.prototype._scheduleRequestWithLog): Extracted. |
| |
| 2017-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Modernize BuildbotSyncer and BuildbotTriggerable |
| https://bugs.webkit.org/show_bug.cgi?id=170310 |
| |
| Reviewed by Chris Dumez. |
| |
| Modernized the code to use arrow functions and other modern idoms in ES2016. |
| |
| * ReadMe.md: Added instructions on how to run tests, and moved the steps to configure postgres |
| above the steps to configure Apache since only the former is needed to run tests. |
| * tools/js/buildbot-syncer.js: |
| * tools/js/buildbot-triggerable.js: |
| |
| 2017-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Yet another build fix after r214502. Workaround webkit.org/b/169907 for now. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.cssTemplate): |
| |
| 2017-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Revert an erronously change in the previous commit. |
| |
| * public/v3/components/base.js: |
| |
| 2017-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r214280. Don't render components until its element is inserted into a document. |
| |
| * public/v3/components/base.js: |
| (ComponentBase): |
| |
| 2017-03-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix after r214502. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype.render): this._groupToCellMap.get may not contain the cell when startPoint |
| or metric had not been fetched yet even if currentTestGroup is set. |
| |
| 2017-03-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r214502. Analysis tasks without any test groups are throwing exceptions. |
| |
| * public/v3/components/results-table.js: |
| (ResultsTable.prototype.renderTable): Don't show the header row when there are no content to show. |
| (ResultsTable.prototype._computeRepositoryList): Return a pair of arrays. The caller expects the repository |
| list to be an array, not undefined. |
| |
| 2017-03-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Modernize AnalysisTaskPage |
| https://bugs.webkit.org/show_bug.cgi?id=170165 |
| |
| Reviewed by Antti Koivisto. |
| |
| Modernized AnalysisTaskPage and related components. The main refactoring happened in AnalysisTaskPage |
| from which AnalysisTaskResultsPane and AnalysisTaskTestGroupPane have been extracted. |
| |
| Decoupled BuildRequest from its results. AnalysisResultsViewer and TestGroupResultsTable now stores |
| a reference to AnalysisResultsView and Metric to find the results for each build request. |
| This refactoring is necessary in order to view results of an arbitrary metric in the future. |
| |
| Also refactored ResultsTable and its subclasses extensively. Instead of making its render() to invoke |
| subclass' methods such as buildRowGroups, heading, and additionalHeading, rely on each subclass call |
| to invoke renderTable(), renamed from render(), with callbacks to add extra headers and columns. |
| |
| This patch also fixes a number of usability issues found by the user such as changing the test name |
| resets the customized revisions by the virtue of the modern code being naturally more correct. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer): |
| (AnalysisResultsViewer.prototype.setTestGroupCallback): Deleted. Replaced by "testGroupClick" action. |
| (AnalysisResultsViewer.prototype.setRangeSelectorLabels): Moved here from ResultsTable since it's |
| never used in ResultsTable or TestGroupResultsTable. |
| (AnalysisResultsViewer.prototype.selectedRange): Ditto. |
| (AnalysisResultsViewer.prototype.setPoints): Now takes metric as the third argument. |
| (AnalysisResultsViewer.prototype.setTestGroups): Now takes the current test group. |
| (AnalysisResultsViewer.prototype.didUpdateResults): Deleted. |
| (AnalysisResultsViewer.prototype.setAnalysisResultsView): Added. |
| (AnalysisResultsViewer.prototype.render): Invoke _renderTestGroups lazily. Also simplified the logic |
| to find the selected list item. Since we always use a shadow DOM now, we can simply look for an element |
| with ".seleted" instead of crafting a unique class name. |
| (AnalysisResultsViewer.prototype.renderTestGroups): Renamed from buildRowGroups. Specify callbacks to |
| insert headers for A/B radio buttons, which has been moved from ResultsTable.prototype.render, and the |
| stacked blocks of testing results. |
| (AnalysisResultsViewer.prototype._classForTestGroup): Deleted. |
| (AnalysisResultsViewer.prototype._openStackingBlock): Deleted. |
| (AnalysisResultsViewer.prototype._expandBetween): Create a new set for expandedPoints to make |
| _renderTestGroupsLazily.evaluate do the work. |
| (AnalysisResultsViewer._layoutBlocks): Moved from TestGroupStackingGrid.layout. |
| (AnalysisResultsViewer._sortBlocksByRow): Moved from AnalysisResultsViewer.TestGroupStackingGrid. |
| (AnalysisResultsViewer._insertAfterBlockWithSameRange): Ditto. |
| (AnalysisResultsViewer._insertBlockInFirstAvailableColumn): Ditto. |
| (AnalysisResultsViewer._createCellsForRow): Ditto. |
| |
| (AnalysisResultsViewer.TestGroupStackingBlock): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.addRowIndex): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.createStackingCell): No longer creates a unique |
| class name here. See the inline comment for AnalysisResultsViewer.prototype.render. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.isThin): Deleted. We used to collapse "failed" |
| test groups as a thin vertical line, and we wanted to show them next to each other in _layoutBlock but |
| we don't do that anymore. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._valuesForCommitSet): Added. Uses |
| this._analysisResultsView to extract the results for the current metrics. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus): |
| |
| * public/v3/components/analysis-task-bug-list.js: Added. |
| (AnalysisTaskBugList): Added. Extracted from AnalysisTaskChartPane. |
| (AnalysisTaskBugList.prototype.setTask): Added. |
| (AnalysisTaskBugList.prototype.didConstructShadowTree): Added. |
| (AnalysisTaskBugList.prototype.render): Added. |
| (AnalysisTaskBugList.prototype._associateBug): Added. |
| (AnalysisTaskBugList.prototype._dissociateBug): Added. |
| (AnalysisTaskBugList.htmlTemplate): Added. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.htmlTemplate): Added a hook to insert more content at the end in AnalysisTaskChartPane. |
| (ChartPaneBase.paneFooterTemplate): Added. |
| |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm): |
| (CustomizableTestGroupForm.prototype.setCommitSetMap): |
| (CustomizableTestGroupForm.prototype.startTesting): Renamed from _submitted. Now dispatches an action |
| by the name of "startTesting" instead of calling this._startCallback. |
| (CustomizableTestGroupForm.prototype.didConstructShadowTree): Added. Moved the logic to attach event |
| handlers here to avoid eagerly creating the shadow tree in the constructor. |
| (CustomizableTestGroupForm.prototype._computeCommitSetMap): Use the newly added this._revisionEditorMap |
| to find the relevant input element instead of running a querySelector. |
| (CustomizableTestGroupForm.prototype.render): Lazily invoke _renderCustomRevisionTable. This avoids |
| overriding the customized revisions when the user finally types in the test group name. |
| (CustomizableTestGroupForm.prototype._renderCustomRevisionTable): Extracted from render. |
| (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons): Made this a non-static method |
| since it needs to update this._revisionEditorMap now. Merged _constructRevisionRadioButtons. |
| (CustomizableTestGroupForm.prototype._createRadioButton): Deleted. See above. |
| (CustomizableTestGroupForm.cssTemplate): |
| (CustomizableTestGroupForm.formContent): Use IDs instead of classes to make this.content(ID) work. |
| |
| * public/v3/components/mutable-list-view.js: |
| (MutableListView.prototype.setList): |
| (MutableListView.prototype.setKindList): |
| (MutableListView.prototype.setAddCallback): Deleted. Replaced by "addItem" action. |
| (MutableListView.prototype.render): |
| (MutableListItem.prototype.content): |
| |
| * public/v3/components/results-table.js: |
| (ResultsTable): Removed this._rangeSelectorLabels, this._rangeSelectorCallback, and this._selectedRange |
| as they are only used by AnalysisResultsViewer. Also replaced this._valueFormatter by |
| this._analysisResultsView which knows a metric. |
| (ResultsTable.prototype.setValueFormatter): Deleted. |
| (ResultsTable.prototype.setRangeSelectorLabels): Deleted. |
| (ResultsTable.prototype.setRangeSelectorCallback): Deleted. |
| (ResultsTable.prototype.selectedRange): Deleted. |
| (ResultsTable.prototype._rangeSelectorClicked): Deleted. |
| (ResultsTable.prototype.setAnalysisResultsView): Added. |
| (ResultsTable.prototype.renderTable): Added. Removed the logic to add _rangeSelectorLabels since it has |
| been moved to AnalysisResultsViewer.prototype.render inside buildColumns, which also inserts additional |
| columns which used to be stored on each ResultsTableRow. Use the same technique to insert additional |
| headers. Also take the name (thead tr th) of row header (tbody tr td) as an argument and automatically |
| create a table cell of an appropriate colspan. |
| (ResultsTable.prototype._createRevisionListCells): |
| (ResultsTable.prototype.heading): Deleted. Superseded by buildHeaders callback. |
| (ResultsTable.prototype.additionalHeading): Ditto. |
| (ResultsTable.prototype.buildRowGroups): Deleted. It is now the responsibility of each subclass to call |
| ResultsTable's renderTable() in the subclass' render() function. |
| (ResultsTable.prototype._computeRepositoryList): No longer takes extraRepositories as an argument. |
| Instead, this function now returns a pair of the repository list and the list of constant commits. |
| (ResultsTable.htmlTemplate): |
| (ResultsTable.cssTemplate): |
| |
| * public/v3/components/test-group-form.js: |
| (TestGroupForm): Avoid eagerly creating the shadow tree. Also removed the removed the dead code. |
| (TestGroupForm.prototype.setRepetitionCount): Simply override the value of the select element. |
| (TestGroupForm.prototype.didConstructShadowTree): Added. Attach event handlers here to avoid eagerly |
| creating the shadow tree in the constructor. |
| (TestGroupForm.prototype.startTesting): Renamed from _submitted. Dispatch "startTesting" action instead |
| of invoking _startCallback which has been removed. |
| (TestGroupForm.htmlTemplate): |
| (TestGroupForm.formContent): |
| |
| * public/v3/components/test-group-results-table.js: |
| (TestGroupResultsTable): |
| (TestGroupResultsTable.prototype.didUpdateResults): Deleted. No longer neeed per setAnalysisResultsView |
| in ResultsTable. |
| (TestGroupResultsTable.prototype.setTestGroup): |
| (TestGroupResultsTable.prototype.heading): Deleted. |
| (TestGroupResultsTable.prototype.render): |
| (TestGroupResultsTable.prototype._renderTestGroup): Extracted from render. |
| (TestGroupResultsTable.prototype._buildRowGroups): Renamed from buildRowGroups. |
| (TestGroupResultsTable.prototype._buildRowGroupForCommitSet): Extracted from buildRowGroups. |
| (TestGroupResultsTable.prototype._buildComparisonRow): Extracted from buildRowGroups.buildRowGroups |
| |
| * public/v3/index.html: Include analysis-task-bug-list.js. |
| |
| * public/v3/models/analysis-results.js: |
| (AnalysisResults): Inverted the map so that we can easily create a view based on metric. |
| (AnalysisResults.prototype.find): Ditto. |
| (AnalysisResults.prototype.add): Ditto. |
| (AnalysisResults.prototype.viewForMetric): Added. |
| (AnalysisResults.fetch): |
| (AnalysisResultsView): Added. |
| (AnalysisResultsView.prototype.metric): Added. |
| (AnalysisResultsView.prototype.resultForBuildId): Added. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.result): Deleted. |
| (BuildRequest.setResult): Deleted. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup): Removed this._allCommitSets since it was never used. |
| (TestGroup.prototype.didSetResult): Deleted since it was never used. |
| (TestGroup.prototype.compareTestResults): Now takes an array of measurement set values. |
| (TestGroup.prototype._valuesForCommitSet): Deleted. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane): This class now includes the form to cutomize the revisions. |
| (AnalysisTaskChartPane.prototype.setShowForm): Added. |
| (AnalysisTaskChartPane.prototype._mainSelectionDidChange): |
| (AnalysisTaskChartPane.prototype.didConstructShadowTree): Added. Dispatches "newTestGroup" action when |
| the user presses the button to start a new A/B testing from the chart. |
| (AnalysisTaskChartPane.prototype.render): Added. |
| (AnalysisTaskChartPane.prototype.paneFooterTemplate): Added. |
| (AnalysisTaskChartPane.cssTemplate): |
| |
| (AnalysisTaskResultsPane): Added. Encapsulates AnalysisResultsViewer and CustomizableTestGroupForm. |
| (AnalysisTaskResultsPane.prototype.setPoints): Added. |
| (AnalysisTaskResultsPane.prototype.setTestGroups): Added. |
| (AnalysisTaskResultsPane.prototype.setAnalysisResultsView): Added. |
| (AnalysisTaskResultsPane.prototype.setShowForm): Added. |
| (AnalysisTaskResultsPane.prototype.didConstructShadowTree): Added. Dispatches "newTestGroup" action |
| when the user presses the button to start a new A/B testing from the chart. |
| (AnalysisTaskResultsPane.prototype.render): Added. |
| (AnalysisTaskResultsPane.htmlTemplate): Added. |
| (AnalysisTaskResultsPane.cssTemplate): Added. |
| |
| (AnalysisTaskTestGroupPane): Added. Encapsulates TestGroupResultsTable and CustomizableTestGroupForm. |
| (AnalysisTaskTestGroupPane.prototype.didConstructShadowTree): Added. |
| (AnalysisTaskTestGroupPane.prototype.setTestGroups): Added. |
| (AnalysisTaskTestGroupPane.prototype.setAnalysisResultsView): Added. |
| (AnalysisTaskTestGroupPane.prototype.render): Added. |
| (AnalysisTaskTestGroupPane.prototype._renderTestGroups): Added. Updates the list of test groups. Hide |
| the hidden groups unless showHiddenGroups is set. Updates this._testGroupMap so that the visibility of |
| groups and their names can be updated without having to re-render the entire list. |
| (AnalysisTaskTestGroupPane.prototype._renderTestGroupVisibility): Added. |
| (AnalysisTaskTestGroupPane.prototype._renderTestGroupNames): Added. |
| (AnalysisTaskTestGroupPane.prototype._renderCurrentTestGroup): Added. Update TestGroupResultsTable with |
| the selected test group. Also highlight the list view, and update the hide-unhide toggle button's label |
| as needed. |
| (AnalysisTaskTestGroupPane.htmlTemplate): Added. |
| (AnalysisTaskTestGroupPane.cssTemplate): Added. |
| |
| (AnalysisTaskPage): Deleted a massive number of instance variables. They are now manged by newly added |
| AnalysisTaskChartPane, AnalysisTaskResultsPane, and AnalysisTaskTestGroupPane |
| (AnalysisTaskPage.prototype.didConstructShadowTree): Added. Attach various event handlers here to avoid |
| eagerly creating the shadow tree in the constructor. |
| (AnalysisTaskPage.prototype._fetchRelatedInfoForTaskId): |
| (AnalysisTaskPage.prototype._didFetchTask): No longer sets the value formatter to the results viewer |
| and the results table as they now recieve AnalysisResultsView later in _assignTestResultsIfPossible. |
| (AnalysisTaskPage.prototype._didFetchMeasurement): Set the metric to the results viewer. |
| (AnalysisTaskPage.prototype._didUpdateTestGroupHiddenState): |
| (AnalysisTaskPage.prototype._assignTestResultsIfPossible): Create AnalysisResultsView from the newly |
| retrieved AnalysisResults and pass it to AnalysisTaskResultsPane and AnalysisTaskTestGroupPane. |
| (AnalysisTaskPage.prototype.render): Dramatically simplified. |
| (AnalysisTaskPage.prototype._renderTaskNameAndStatus): Extracted from render. |
| (AnalysisTaskPage.prototype._renderRelatedTasks): Ditto. |
| (AnalysisTaskPage.prototype._renderCauseAndFixes): Ditto. |
| (AnalysisTaskPage.prototype._showTestGroup): |
| (AnalysisTaskPage.prototype._updateTaskName): Now takes the new name as an argument. |
| (AnalysisTaskPage.prototype._updateTestGroupName): Now takes the new name as the second argument. |
| (AnalysisTaskPage.prototype._hideCurrentTestGroup): Now takes the test group to hide. |
| (AnalysisTaskPage.prototype._associateCommit): Moved to AnalysisTaskBugList. |
| (AnalysisTaskPage.prototype._dissociateCommit): Ditto. |
| (AnalysisTaskPage.prototype._retryCurrentTestGroup): Now takes the test group as the first argument. |
| (AnalysisTaskPage.prototype._chartSelectionDidChange): Deleted. |
| (AnalysisTaskPage.prototype._createNewTestGroupFromChart): Deleted. |
| (AnalysisTaskPage.prototype._selectedRowInAnalysisResultsViewer): Deleted. |
| (AnalysisTaskPage.prototype._createNewTestGroupFromViewer): Deleted. |
| (AnalysisTaskPage.htmlTemplate): |
| (AnalysisTaskPage.cssTemplate): |
| |
| * unit-tests/test-groups-tests.js: Updated a test case which was expecting BuildReqeust's result, which |
| has been removed, to exist. |
| |
| 2017-03-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Share more code between ManifestGenerator and /api/triggerables |
| https://bugs.webkit.org/show_bug.cgi?id=169993 |
| |
| Reviewed by Chris Dumez. |
| |
| Shared the code to fetch the list of triggerables from the database between ManifestGenerator |
| and /api/triggerables. |
| |
| * public/api/triggerables.php: |
| (main): |
| * public/include/manifest-generator.php: |
| (ManifestGenerator::fetch_triggerables): Extracted as a static function. Also include the ID |
| in the triggerable data. |
| |
| 2017-03-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| create-test-group should allow a different set of repositories to be used in each configuration |
| https://bugs.webkit.org/show_bug.cgi?id=169992 |
| |
| Rubber-stamped by Antti Koivisto. |
| |
| Added the support for new POST parameter, revisionSets, to /privileged-api/create-test-group. |
| This new parameter now specifies an array of repository id to revision dictionaries, and allows |
| different set of repositories' revisions to be specified in each dictionary. |
| |
| We keep the old API for v2 UI and detect-changes.js compatibility for now. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): |
| (commit_sets_from_revision_sets): Added. |
| (ensure_commit_sets): Only fetch the top-level repository per r213788 and r213976. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.createAndRefetchTestGroups): Use the newly added revisionSets parameter instead of |
| the now depreacted commitSets parameter. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList): Simplified this code |
| by simply verifying the consistency of commit sets now that createAndRefetchTestGroups takes |
| an array of commit sets instead of a dictionary of repository name to a list of revisions. |
| |
| * server-tests/privileged-api-create-test-group-tests.js: Added test cases for new parameter. |
| |
| 2017-03-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| /api/uploaded-file should return createdAt as a POSIX timestamp |
| https://bugs.webkit.org/show_bug.cgi?id=169980 |
| |
| Rubber-stamped by Antti Koivisto. |
| |
| Call Database::to_js_time on createdAt to return it as a POSIX timestamp. |
| |
| * public/include/uploaded-file-helpers.php: |
| (format_uploaded_file): Fixed the bug. |
| * server-tests/api-manifest-tests.js: Renamed from api-manifest.js. |
| * server-tests/api-uploaded-file-tests.js: Renamed from api-uploaded-file.js. Added a test case. |
| |
| 2017-03-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| UploadedFile should support a callback for upload progress |
| https://bugs.webkit.org/show_bug.cgi?id=169977 |
| |
| Reviewed by Andreas Kling. |
| |
| Added a new option dictionary to CommonRemoteAPI.sendHttpRequest with uploadProgressCallback |
| |
| Moved request headers and responseHandler callback in NodeRemoteAPI to this dictionary, |
| and updated the tests which relied on this code. |
| |
| * public/shared/common-remote.js: |
| (CommonRemoteAPI.prototype.postJSON): |
| (CommonRemoteAPI.prototype.postJSONWithStatus): |
| (CommonRemoteAPI.prototype.postFormData): |
| (CommonRemoteAPI.prototype.postFormDataWithStatus): |
| * public/v3/privileged-api.js: |
| (PrivilegedAPI.prototype.sendRequest): |
| * public/v3/remote.js: |
| (BrowserRemoteAPI.prototype.sendHttpRequest): |
| (BrowserRemoteAPI.prototype.sendHttpRequestWithFormData): |
| (BrowserRemoteAPI): |
| * server-tests/api-uploaded-file.js: |
| * tools/js/remote.js: |
| (NodeRemoteAPI.prototype.sendHttpRequest): |
| (NodeRemoteAPI.prototype.sendHttpRequestWithFormData): |
| (NodeRemoteAPI): |
| |
| 2017-03-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| ComponentBase should enqueue itself to render when it becomes connected |
| https://bugs.webkit.org/show_bug.cgi?id=169905 |
| |
| Reviewed by Antti Koivisto. |
| |
| When a component becomes connected to a document, enqueue itself to render automatically. |
| Also added the support for boolean attribute to ComponentBase.createElement. |
| |
| * ReadMe.md: Added an instruction to raise the upload limit per r214065. |
| * browser-tests/component-base-tests.js: Added tests for the new behavior and createElement. Also moved |
| the tests related to enqueueToRenderOnResize out of defineElement tests. |
| |
| * browser-tests/index.html: |
| (BrowsingContext.prototype.constructor): Override requestAnimationFrame so that the callback would be |
| involved immediately durign testing. |
| |
| * public/v3/components/base.js: |
| (ComponentBase): Enqueue itself to render during construction if custom elements is not available. |
| (ComponentBase.defineElement): |
| (ComponentBase.defineElement.elementClass.prototype.connectedCallback): Enqueue itself to render when |
| the component's element became connected. |
| (ComponentBase.createElement): Use Array.isArray instead of instanceof to make it work with arrays made |
| in other realms (global objects) during testing. Added the support for boolean attributes. Setting an |
| attribute value to true would set the attribute, and setting it to false would not set the attribute. |
| (ComponentBase.useNativeCustomElements): Added. True iff window.customElements is defined. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.render): No longer need to call enqueueToRender on the commit log viewer. |
| |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer.prototype.render): No longer need to call enqueueToRender on the spinner icon. |
| |
| * public/v3/models/time-series.js: |
| (TimeSeries): Made this a proper class declaration now that we don't include data.js after r213300. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype._renderActionToolbar): No longer need to call enqueueToRender on the close icon. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype._renderCell): No longer need to call enqueueToRender on the spinner icon. |
| |
| 2017-03-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Delete another function that was supposed to be removed in the previous commit. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.cachedRequestsForTriggerableID): Deleted. |
| |
| 2017-03-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Modernize BuildRequestQueuePage |
| https://bugs.webkit.org/show_bug.cgi?id=169903 |
| |
| Reviewed by Antti Koivisto. |
| |
| Modernized the code for /v3/#/analysis/queue. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.fetchTriggerables): Deleted since the manifest JSON now contains all the triggerables. |
| |
| * public/v3/pages/build-request-queue-page.js: |
| (BuildRequestQueuePage): Deleted this._triggerables. Added this._buildRequestsByTriggerable. |
| (BuildRequestQueuePage.prototype.open): Modernized the code. |
| (BuildRequestQueuePage.prototype.render): Ditto. |
| (BuildRequestQueuePage.prototype._constructBuildRequestTable): Ditto. |
| |
| 2017-03-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Charts page show an inconsistent list of revisions for Git and Subversion |
| https://bugs.webkit.org/show_bug.cgi?id=169888 |
| |
| Reviewed by Andreas Kling. |
| |
| With Git, CommitLogViewer was showing the list of revisions including the starting hash, |
| which was the last data point's revision instead of all revisions after the last data point. |
| |
| Fixed the bug by always specifying the revision at the last data point in both Subversion |
| and Git and then making /api/commits/<repository>/?from=X&to=Y exclude the first revision. |
| For clarity, "from" and "to" query parameters have been renamed to "precedingRevision" and |
| "lastRevision" respectively. |
| |
| We also no longer adds 1 to the starting revision of Subversion-like starting revisions. e.g. |
| when the last data point was at r1234, new data point is at r1250, the label is now "r1234-r1250" |
| instead of "r1235-r1250". |
| |
| * browser-tests/chart-revision-range-tests.js: Fixed the tests since revisionList no longer |
| specifies from/to revisions. |
| * browser-tests/commit-log-viewer-tests.js: Added. Added tests for CommitLogViewer. |
| * browser-tests/index.html: Include the new test. Also use a local copy of mocha.js/css. |
| |
| * public/api/commits.php: |
| (main): Renamed "from" and "to" query parameters. |
| |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::fetch_between): Added a check that commit time should either be specified |
| in both rows or not specified in either. Also reject when before_first_revision is identical |
| or after last_revision instead of re-ordering them since it no longer makes sense to do so with |
| new query parameter names. |
| |
| * public/v3/components/base.js: |
| (ComponentBase._addContentToElement): Use Array.isArray instead of instanceof. It's resilient |
| againt realm (global object) differences. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype._updateCommitLogViewer): No longer calls enqueueToRender on this since |
| CommitLogViewer does that on its own now. |
| (ChartPaneBase.prototype.render): Juse use this._openRepository instead of relying on CommitLogViewer |
| to remember which repository is current. This was the only use of currentRepository. |
| |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer): |
| (CommitLogViewer.prototype.currentRepository): Deleted. |
| (CommitLogViewer.prototype.view): |
| (CommitLogViewer.prototype._fetchCommitLogs): Modernized and extracted from view to make it lazy. |
| Call fetchForSingleRevision when precedingRevision is not specified or it's identical to lastRevision |
| since the generic JSON API no longer supports being called with the identical revisions. |
| (CommitLogViewer.prototype.render): Modernized & simplified the code. |
| (CommitLogViewer.prototype._renderCommitList): Extracted from render to make it lazy. |
| (CommitLogViewer.htmlTemplate): Add ID on caption & tbody so that they're more easily addressable. |
| (CommitLogViewer.cssTemplate): |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog.prototype.diff): No longer includes from/to revisions in the result. Also avoid adding |
| 1 to a Subversion-like starting revision for creating the label. See above. But we still do this |
| for forming URLs due to the way tools like Trac work with Subversion revisions. |
| (CommitLog.fetchBetweenRevisions): Rewritten using DataModel.prototype.cachedFetch with FIXME for |
| what this function is supposed to be doing. |
| (CommitLog._cachedCommitLogs): Deleted. |
| (CommitLog.fetchForSingleRevision): Added. |
| (CommitLog._constructFromRawData): Added. |
| |
| * public/v3/models/data-model.js: |
| (DataModelObject.cachedFetch): Don't parse query values as an integer. Just URL-escape them. |
| |
| * public/v3/remote.js: |
| (BrowserRemoteAPI.prototype.sendHttpRequest): Fixed a typo. |
| |
| * server-tests/api-commits-tests.js: Renamed from api-commits.js. Updated the existing tests to |
| use new query parameters and added more test cases. |
| |
| * unit-tests/commit-log-tests.js: Updated the test cases now that CommitLog.prototype.diff no longer |
| includes from/to values. They're computed in ChartRevisionRange instead. |
| |
| 2017-03-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix os-build-fetcher.js and subprocess.js to make them work |
| https://bugs.webkit.org/show_bug.cgi?id=169844 |
| |
| Reviewed by Antti Koivisto. |
| |
| The script added in r213976 has a bug that it can execute commands to fetch subcommits in parallel. |
| Some commands to poll the lsit of system components is not desirable to be ran in parallel. |
| |
| * server-tests/resources/mock-subprocess.js: |
| (MockSubprocess): Use const declaration. |
| (MockSubprocess.resetAndWaitForInvocation): Added. |
| (MockSubprocess.waitForInvocation): Renamed from waitingForInvocation. A function name must be a verb. |
| See https://webkit.org/code-style-guidelines/#names-verb |
| (MockSubprocess.reset): Set invocations.length to 0 so that tests can store a reference to the array |
| regardless of whether reset is called or when it's called. |
| |
| * server-tests/tools-os-build-fetcher-tests.js: Updated tests per the code change. Most of codes now |
| expect each command to be ran seprately. e.g. if there were two commands to run, instead of expecting |
| them to be both ran, and resolving invocation promises, we'd wait for one command to run, resolve, |
| its subcommand to run, and then move onto the second top-level command. Also use a local reference |
| to MockSubprocess.invocations instead of using the fully qualified name. |
| |
| * tools/js/os-build-fetcher.js: |
| (mapInSerialPromiseChain): Added. Calling a closure that returns a promise on each item in an array |
| in serial (not asynchronous) is a very common pattern in this class. |
| (OSBuildFetcher.fetchAndReportAllInOrder): Added. |
| (OSBuildFetcher.prototype.fetchAndReportNewBuilds): Log what the number of builds being submitted. |
| (OSBuildFetcher.prototype._fetchAvailableBuilds): Fixed the main bug. Using Promise.all would result |
| in each top-level command to be execued in parallel. Since each subcommand is executed as soon as |
| its parent command is executed, this results in commands to be executed in parallel. |
| Added a whole bunch of logging so that we can at least detect a bug like this in the future. |
| (OSBuildFetcher.prototype._commitsForAvailableBuilds): Cleanup the coding style. |
| (OSBuildFetcher.prototype._addSubCommitsForBuild): Use mapInSerialPromiseChain. Tightened the assertion |
| about the content returned by a subcommand. |
| |
| * tools/js/subprocess.js: Fixed the bug that we were importing require('child_process').ChildProcess. |
| execFile is defined on require('child_process') itself. |
| (Subprocess.prototype.execute): Fixed a typo. this._childProcess doesn't exist. |
| (Subprocess): |
| |
| * tools/sync-os-versions.js: Renamed from tools/pull-os-versions.js. |
| (syncLoop): Cleaned up the coding style a little. Also added logging about how long we're about to sleep. |
| |
| 2017-03-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the file uploading capability to the perf dashboard. |
| https://bugs.webkit.org/show_bug.cgi?id=169737 |
| |
| Reviewed by Chris Dumez. |
| |
| Added /privileged-api/upload-file to upload a file, and /api/uploaded-file/ to download the file |
| and retrieve its meta data based on its SHA256. We treat two files with the identical SHA256 as |
| identical since anyone who can upload a file using this mechanism can execute arbitrary code in |
| our bots anyway. This is important for avoiding uploading a large darwinup roots multiple times |
| to the server, saving both user's time/bandwidth and server's disk space. |
| |
| * config.json: Added uploadDirectory, uploadFileLimitInMB, and uploadUserQuotaInMB as options. |
| * init-database.sql: Added uploaded_files table. |
| |
| * public/api/uploaded-file.php: Added. |
| (main): /api/uploaded-file/N would download uploaded_file with id=N. /api/uploaded-file/?sha256=X |
| would return the meta data for uploaded_file with sha256=X. |
| (stream_file_content): Streams the file content in 64KB chunks. We support Range & If-Range HTTP |
| request headers so that browsers can pause and resume downloading of a large root file. |
| (parse_range_header): Parses Range HTTP request header. |
| |
| * public/include/json-header.php: |
| (remote_user_name): Use the default argument of NULL. |
| |
| * public/include/manifest-generator.php: |
| (ManifestGenerator::generate): Include the maximum upload size in the manifest file to let the |
| frontend code preemptively check the file size before attempting to submit a file. |
| |
| * public/include/uploaded-file-helpers.php: Added. |
| (format_uploaded_file): |
| (uploaded_file_path_for_row): |
| |
| * public/privileged-api/upload-file-form.html: Added. For debugging purposes. |
| (fetchCSRFfToken): |
| (upload): |
| |
| * public/privileged-api/upload-file.php: Added. |
| (main): |
| (query_total_file_size): |
| (create_uploaded_file_from_form_data): |
| |
| * public/shared/common-remote.js: |
| (CommonRemoteAPI.prototype.postFormData): Added. |
| (CommonRemoteAPI.prototype.postFormDataWithStatus): Added. |
| (CommonRemoteAPI.prototype.sendHttpRequestWithFormData): Added. |
| (CommonRemoteAPI.prototype._asJSON): Throw an exception instead of calling a non-existent reject. |
| |
| * public/v3/models/uploaded-file.js: Added. |
| (UploadedFile): Added. |
| (UploadedFile.uploadFile): Added. |
| (UploadedFile.fetchUnloadedFileWithIdenticalHash): Added. Finds the file with the same SHA256 in |
| the server to avoid uploading a large custom root multiple times. |
| (UploadedFile._computeSHA256Hash): Added. |
| |
| * public/v3/privileged-api.js: |
| (PrivilegedAPI.prototype.sendRequest): Added the options dictionary as a third argument. For now, |
| only support useFormData boolean. |
| |
| * public/v3/remote.js: |
| (BrowserRemoteAPI.prototype.sendHttpRequestWithFormData): Added. |
| |
| * server-tests/api-manifest.js: Updated per the inclusion of fileUploadSizeLimit in the manifest. |
| * server-tests/api-uploaded-file.js: Added. |
| * server-tests/privileged-api-upload-file-tests.js: Added. |
| |
| * server-tests/resources/temporary-file.js: Added. |
| (TemporaryFile): Added. A helper class for creating a temporary file to upload. |
| (TemporaryFile.makeTemporaryFileOfSizeInMB): |
| (TemporaryFile.makeTemporaryFile): |
| (TemporaryFile.inject): |
| |
| * server-tests/resources/test-server.conf: Set upload_max_filesize and post_max_size for testing. |
| * server-tests/resources/test-server.js: |
| (TestServer.prototype.testConfig): Use uploadFileLimitInMB and uploadUserQuotaInMB of 2MB and 5MB. |
| (TestServer.prototype._ensureDataDirectory): Create a directory to store uploaded files inside |
| the data directory. In a production server, we can place it outside ServerRoot / DocumentRoot. |
| (TestServer.prototype.cleanDataDirectory): Delete the aforementioned directory as needed. |
| |
| * tools/js/database.js: |
| (tableToPrefixMap): Added uploaded_files. |
| |
| * tools/js/remote.js: |
| (NodeRemoteAPI.prototype.sendHttpRequest): Added a dictionary to specify request headers and |
| a callback to process the response as arguments. Fixed the bug that any 2xx code other than 200 |
| was resulting in a rejected promise. Also include the response headers in the result for tests. |
| Finally, when content is a function, call that instead of writing the content since FormData |
| requires a custom logic. |
| (NodeRemoteAPI.prototype.sendHttpRequestWithFormData): Added. |
| |
| * tools/js/v3-models.js: Include uploaded-file.js. |
| |
| * tools/run-tests.py: |
| (main): Add form-data as a new dependency. |
| |
| 2017-03-15 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Fix unit test and bug fix for 'pull-os-versions.js' script. |
| https://bugs.webkit.org/show_bug.cgi?id=169701 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Fix unit tests warnings on node-6.10.0. |
| Fix 'pull-os-versions.js' does not fetch new builds and report. |
| |
| * server-tests/tools-os-build-fetcher-tests.js: |
| (then): |
| (beforeEach): |
| (afterEach): |
| * tools/pull-os-versions.js: |
| (syncLoop): |
| |
| 2017-03-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| In-browser and node.js implementations of RemoteAPI should share some code |
| https://bugs.webkit.org/show_bug.cgi?id=169695 |
| |
| Rubber-stamped by Antti Koivisto. |
| |
| Extracted CommonRemoteAPI out of RemoteAPI implementations for node.js and browser. |
| |
| * public/shared/common-remote.js: Added. |
| (CommonRemoteAPI): Added. |
| (CommonRemoteAPI.prototype.postJSON): Extracted from RemoteAPI. |
| (CommonRemoteAPI.prototype.postJSONWithStatus): Ditto. |
| (CommonRemoteAPI.prototype.getJSON): Ditto. |
| (CommonRemoteAPI.prototype.getJSONWithStatus): Ditto. |
| (CommonRemoteAPI.prototype.sendHttpRequest): Added. Needs to implemented by a subclass. |
| (CommonRemoteAPI.prototype._asJSON): Added. |
| (CommonRemoteAPI.prototype._checkStatus): Added. |
| |
| * public/v3/index.html: Include common-remote.js. |
| |
| * public/v3/privileged-api.js: |
| (PrivilegedAPI): Use class now that we don't include data.js. |
| (PrivilegedAPI.sendRequest): Modernized the code. |
| (PrivilegedAPI.requestCSRFToken): Ditto. |
| |
| * public/v3/remote.js: |
| (BrowserRemoteAPI): Renamed from RemoteAPI. window.RemoteAPI is now an instance of this class. |
| (BrowserRemoteAPI.prototype.sendHttpRequest): Moved from RemoteAPI.sendHttpRequest. |
| (BrowserRemoteAPI.prototype.sendHttpRequest): |
| |
| * server-tests/privileged-api-create-analysis-task-tests.js: Updated tests since NodeJSRemoteAPI |
| now throws the JSON status as an error to be consistent with BrowserRemoteAPI. |
| * server-tests/privileged-api-create-test-group-tests.js: Ditto. |
| * server-tests/privileged-api-upate-run-status.js: Ditto. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.syncOnce): Just use postJSONWithStatus instead of manually |
| checking the status. |
| |
| * tools/js/remote.js: |
| (NodeRemoteAPI): Renamed from RemoteAPI. Still exported as RemoteAPI. |
| (NodeRemoteAPI.prototype.constructor): |
| (NodeRemoteAPI.prototype.sendHttpRequest): Modernized the code. |
| |
| 2017-03-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix server tests after r213998 and r213969 |
| https://bugs.webkit.org/show_bug.cgi?id=169690 |
| |
| Reviewed by Antti Koivisto. |
| |
| Fixed the existing server tests. |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.prototype._updateRemoteState): Use the relative path from the root so that it works inside tests. |
| (AnalysisTask.prototype.associateBug): Ditto. |
| (AnalysisTask.prototype.dissociateBug): Ditto. |
| (AnalysisTask.prototype.associateCommit): Ditto. |
| (AnalysisTask.prototype.dissociateCommit): Ditto. |
| (AnalysisTask._fetchSubset): Ditto. |
| (AnalysisTask.fetchAll): Ditto. |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.updateName): Ditto. |
| (TestGroup.prototype.updateHiddenFlag): Ditto. |
| (TestGroup.createAndRefetchTestGroups): Ditto. |
| (TestGroup.cachedFetch): Ditto. |
| * server-tests/api-manifest.js: Reverted an inadvertant change in r213969. |
| * tools/js/database.js: |
| (tableToPrefixMap): Added analysis_strategies. |
| * unit-tests/analysis-task-tests.js: Updated expectations per changes to AnalysisTask. |
| |
| 2017-03-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add tests for privileged-api/create-analysis-task and privileged-api/create-test-group |
| https://bugs.webkit.org/show_bug.cgi?id=169688 |
| |
| Rubber-stamped by Antti Koivisto. |
| |
| Added tests for privileged-api/create-analysis-task and privileged-api/create-test-group, and fixed newly found bugs. |
| |
| * public/privileged-api/create-analysis-task.php: |
| (main): Fixed the bug that we were not explicitly checking whether start_run and end_run were integers or not. |
| Also return InvalidTimeRange when start and end times are identical as that makes no sense for an analysis task. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Fixed a bug that we were not explicitly checking task and repetitionCount to be an integer. |
| (ensure_commit_sets): Fixed the bug that the number of commit sets weren't checked. |
| |
| * server-tests/privileged-api-create-analysis-task-tests.js: Added. |
| * server-tests/privileged-api-create-test-group-tests.js: Added. |
| |
| * server-tests/resources/common-operations.js: |
| (prepareServerTest): Increase the timeout from 1s to 5s. |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.addMockData): Use a higher database ID of 20 for a mock build_slave to avoid a conflict with auto-generated IDs. |
| |
| 2017-03-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make unit tests return a promise instead of manually calling done |
| https://bugs.webkit.org/show_bug.cgi?id=169663 |
| |
| Reviewed by Antti Koivisto. |
| |
| Make the existing unit tests always reutrn a promise instead of manually calling "done" callback as done |
| in r213969. The promise tests are a lot more stable and less error prone. |
| |
| Also use MockRemoteAPI.waitForRequest() instead of chaining two resolved promises where appropriate. |
| |
| * unit-tests/analysis-task-tests.js: |
| * unit-tests/buildbot-syncer-tests.js: |
| * unit-tests/checkconfig.js: |
| * unit-tests/privileged-api-tests.js: |
| |
| 2017-03-15 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Rewrite 'pull-os-versions' script in Javascript to add support for reporting os revisions with sub commits. |
| https://bugs.webkit.org/show_bug.cgi?id=169542 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Extend '/api/commits/<repository>/last-reported' to accept a range and return last reported commits in given range. |
| Rewrite 'pull-os-versions' in JavaScript and add unit tests for it. |
| Instead of writing query manually while searching criteria contains null columns, use the methods provided in 'db.php'. |
| Add '.gitignore' file to ommit files generated by while running tests/instances locally. |
| |
| * .gitignore: Added. |
| * public/api/commits.php: |
| * public/api/report-commits.php: |
| * public/include/commit-log-fetcher.php: |
| * public/include/db.php: 'null_columns' of prepare_params should be a reference. |
| * public/include/report-processor.php: |
| * server-tests/api-commits.js: |
| (then): |
| * server-tests/api-report-commits-tests.js: |
| * server-tests/resources/mock-logger.js: Added. |
| (MockLogger): |
| (MockLogger.prototype.log): |
| (MockLogger.prototype.error): |
| * server-tests/resources/mock-subprocess.js: Added. |
| (MockSubprocess.call): |
| (MockSubprocess.waitingForInvocation): |
| (MockSubprocess.inject): |
| (MockSubprocess.reset): |
| * server-tests/tools-buildbot-triggerable-tests.js: |
| (MockLogger): Deleted. |
| (MockLogger.prototype.log): Deleted. |
| (MockLogger.prototype.error): Deleted. |
| * server-tests/tools-os-build-fetcher-tests.js: Added. |
| (beforeEach): |
| (return.waitingForInvocationPromise.then): |
| (then): |
| (string_appeared_here.return.waitingForInvocationPromise.then): |
| (return.addSlaveForReport.emptyReport.then): |
| * tools/js/os-build-fetcher.js: Added. |
| (OSBuildFetcher): |
| (OSBuildFetcher.prototype._fetchAvailableBuilds): |
| (OSBuildFetcher.prototype._computeOrder): |
| (OSBuildFetcher.prototype._commitsForAvailableBuilds.return.this._subprocess.call.then.): |
| (OSBuildFetcher.prototype._commitsForAvailableBuilds): |
| (OSBuildFetcher.prototype._addSubCommitsForBuild): |
| (OSBuildFetcher.prototype._submitCommits): |
| (OSBuildFetcher.prototype.fetchAndReportNewBuilds): |
| * tools/js/subprocess.js: Added. |
| (const.childProcess.require.string_appeared_here.Subprocess.prototype.call): |
| (const.childProcess.require.string_appeared_here.Subprocess): |
| * tools/pull-os-versions.js: Added. |
| (main): |
| (syncLoop): |
| * tools/sync-commits.py: |
| (Repository.fetch_commits_and_submit): |
| |
| 2017-03-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make server tests return a promise instead of manually calling done |
| https://bugs.webkit.org/show_bug.cgi?id=169648 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Make the existing server tests always reutrn a promise instead of manually calling "done" callback. |
| The promise tests are a lot more stable and less error prone. |
| |
| Also use arrow functions everywhere and use prepareServerTest, renamed from connectToDatabaseInEveryTest, |
| in more tests instead of manually connecting to database in every test, and reset v3 models. |
| |
| * server-tests/admin-platforms-tests.js: |
| * server-tests/admin-reprocess-report-tests.js: |
| * server-tests/api-build-requests-tests.js: |
| * server-tests/api-manifest.js: |
| * server-tests/api-measurement-set-tests.js: |
| (.postReports): Deleted. Not used in any test. |
| * server-tests/api-report-commits-tests.js: |
| * server-tests/api-report-tests.js: |
| * server-tests/api-update-triggerable.js: |
| * server-tests/privileged-api-upate-run-status.js: |
| * server-tests/resources/common-operations.js: |
| (prepareServerTest): Renamed from connectToDatabaseInEveryTest. Increase the timeout and reset v3 models. |
| * server-tests/tools-buildbot-triggerable-tests.js: |
| |
| 2017-03-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Rename RootSet to CommitSet |
| https://bugs.webkit.org/show_bug.cgi?id=169580 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Renamed root_sets to commit_sets and roots to commit_set_relationships in the database schema, and renamed |
| related classes in public/v3/ and tools accordingly. |
| |
| RootSet, MeasurementRootSet, and CustomRootSet are respectively renamed to CommitSet, MeasurementCommitSet, |
| and CustomCommitSet. |
| |
| In order to migrate the database, run: |
| ``` |
| BEGIN; |
| ALTER TABLE root_sets RENAME TO commit_sets; |
| ALTER TABLE commit_sets RENAME COLUMN rootset_id TO commitset_id; |
| ALTER TABLE roots RENAME TO commit_set_relationships; |
| ALTER TABLE commit_set_relationships RENAME COLUMN root_set TO commitset_set; |
| ALTER TABLE commit_set_relationships RENAME COLUMN root_commit TO commitset_commit; |
| ALTER TABLE build_requests RENAME COLUMN request_root_set TO request_commit_set; |
| END; |
| ``` |
| |
| * browser-tests/index.html: |
| * init-database.sql: |
| * public/api/build-requests.php: |
| (main): |
| * public/api/test-groups.php: |
| (main): |
| (format_test_group): |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::__construct): |
| (BuildRequestsFetcher::results_internal): |
| (BuildRequestsFetcher::commit_sets): Renamed from root_sets. |
| (BuildRequestsFetcher::commits): Renamed from roots. |
| (BuildRequestsFetcher::fetch_commits_for_set_if_needed): Renamed from fetch_roots_for_set_if_needed. |
| * public/privileged-api/create-test-group.php: |
| (main): |
| (ensure_commit_sets): Renamed from commit_sets_from_root_sets. |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype.buildRowGroups): |
| (AnalysisResultsViewer.prototype._collectCommitSetsInTestGroups): Renamed from _collectRootSetsInTestGroups. |
| (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): |
| (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): |
| (AnalysisResultsViewer.CommitSetInTestGroup): Renamed from RootSetInTestGroup. |
| (AnalysisResultsViewer.CommitSetInTestGroup.prototype.constructor): |
| (AnalysisResultsViewer.CommitSetInTestGroup.prototype.commitSet): Renamed from rootSet. |
| (AnalysisResultsViewer.CommitSetInTestGroup.prototype.succeedingCommitSet): Renamed from succeedingRootSet. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.constructor): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.addRowIndex): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.isComplete): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.startRowIndex): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.endRowIndex): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus): |
| * public/v3/components/chart-revision-range.js: |
| (ChartRevisionRange.prototype._revisionForPoint): |
| (ChartRevisionRange.prototype._computeRevisionList): |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm.prototype.constructor): |
| (CustomizableTestGroupForm.prototype.setCommitSetMap): Renamed from setRootSetMap. |
| (CustomizableTestGroupForm.prototype._submitted): |
| (CustomizableTestGroupForm.prototype._computeCommitSetMap): Renamed from _computeRootSetMap. |
| (CustomizableTestGroupForm.prototype.render): Renamed from render. |
| (CustomizableTestGroupForm.prototype._constructRevisionRadioButtons): |
| * public/v3/components/results-table.js: |
| (ResultsTable.prototype.render): |
| (ResultsTable.prototype._createRevisionListCells): |
| (ResultsTable.prototype._computeRepositoryList): |
| (ResultsTableRow.prototype.constructor): |
| (ResultsTableRow.prototype.commitSet): Renamed from rootSet. |
| * public/v3/components/test-group-results-table.js: |
| (TestGroupResultsTable.prototype.buildRowGroups): |
| * public/v3/index.html: |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.constructor): |
| (BuildRequest.prototype.updateSingleton): |
| (BuildRequest.prototype.commitSet): Renamed from rootSet. |
| (BuildRequest.constructBuildRequestsFromData): |
| * public/v3/models/commit-set.js: Renamed from public/v3/models/root-set.js. |
| (CommitSet): Renamed from RootSet. |
| (CommitSet.containsMultipleCommitsForRepository): |
| (MeasurementCommitSet): Renamed from MeasurementRootSet. |
| (MeasurementCommitSet.prototype.namedStaticMap): |
| (MeasurementCommitSet.prototype.ensureNamedStaticMap): |
| (MeasurementCommitSet.namedStaticMap): |
| (MeasurementCommitSet.ensureNamedStaticMap): |
| (MeasurementCommitSet.ensureSingleton): |
| (CustomCommitSet): Renamed from CustomRootSet. |
| * public/v3/models/measurement-adaptor.js: |
| (MeasurementAdaptor.prototype.applyTo): |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.constructor): |
| (TestGroup.prototype.addBuildRequest): |
| (TestGroup.prototype.repetitionCount): |
| (TestGroup.prototype.requestedCommitSets): Renamed from requestedRootSets. |
| (TestGroup.prototype.requestsForCommitSet): Renamed from requestsForRootSet. |
| (TestGroup.prototype.labelForCommitSet): Renamed from labelForRootSet. |
| (TestGroup.prototype.didSetResult): |
| (TestGroup.prototype.compareTestResults): |
| (TestGroup.prototype._valuesForCommitSet): Renamed from _valuesForRootSet. |
| (TestGroup.prototype.createAndRefetchTestGroups): |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype.render): |
| (AnalysisTaskPage.prototype._retryCurrentTestGroup): |
| (AnalysisTaskPage.prototype._createNewTestGroupFromChart): |
| (AnalysisTaskPage.prototype._createNewTestGroupFromViewer): |
| (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingCommitSetList): |
| * server-tests/api-build-requests-tests.js: |
| * server-tests/resources/mock-data.js: |
| (MockData.resetV3Models): |
| (MockData.addMockData): |
| (MockData.addAnotherMockTestGroup): |
| * tools/detect-changes.js: |
| (createAnalysisTaskAndNotify): |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): |
| (BuildbotSyncer.prototype._revisionSetFromCommitSetWithExclusionList): |
| * tools/js/database.js: |
| (tableToPrefixMap): |
| * tools/js/v3-models.js: |
| * tools/sync-buildbot.js: |
| (syncLoop): |
| * tools/sync-with-buildbot.py: Deleted. No longer used. |
| * unit-tests/analysis-task-tests.js: |
| * unit-tests/build-request-tests.js: |
| (sampleBuildRequestData): |
| * unit-tests/buildbot-syncer-tests.js: |
| (sampleCommitSetData): |
| * unit-tests/measurement-adaptor-tests.js: |
| * unit-tests/measurement-set-tests.js: |
| * unit-tests/resources/mock-v3-models.js: |
| (MockModels.inject): |
| * unit-tests/test-groups-tests.js: |
| (sampleTestGroup): |
| |
| 2017-03-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Database's query functions should support querying for a row with NULL value |
| https://bugs.webkit.org/show_bug.cgi?id=169504 |
| |
| Reviewed by Antti Koivisto. |
| |
| Add the support for calling select_* with one of column values set to NULL. |
| This feature is useful in webkit.org/b/146374 and webkit.org/b/168962. |
| |
| * public/include/db.php: |
| (Database::prepare_params): Added $null_columns as an optional argument. |
| (Database::select_conditions_with_null_columns): Added. Builds up a query string by appending AND x is NULL |
| to match columns whose value must be NULL. |
| (Database::_select_update_or_insert_row): |
| (Database::select_rows): |
| |
| 2017-03-13 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Add the ability to report a commit with sub-commits. |
| https://bugs.webkit.org/show_bug.cgi?id=168962 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Introduce 'commit_ownerships' which records ownership between commits. |
| On existing production server, run ``` |
| CREATE TABLE commit_ownerships ( |
| commit_owner integer NOT NULL REFERENCES commits ON DELETE CASCADE, |
| commit_ownee integer NOT NULL REFERENCES commits ON DELETE CASCADE, |
| PRIMARY KEY (commit_owner, commit_ownee) |
| ); |
| ALTER TABLE repositories RENAME repository_parent TO repository_owner; |
| ALTER TABLE repositories DROP repository_name_must_be_unique; |
| CREATE UNIQUE INDEX repository_name_owner_unique_index ON repositories (repository_owner, repository_name) WHERE repository_owner IS NOT NULL; |
| CREATE UNIQUE INDEX repository_name_unique_index ON repositories (repository_name) WHERE repository_owner IS NULL; |
| ``` to update database. |
| Add unit-tests to cover this change. |
| |
| * init-database.sql: |
| * public/api/report-commits.php: |
| * public/include/commit-log-fetcher.php: |
| * public/include/db.php: |
| * public/include/manifest-generator.php: |
| * public/include/report-processor.php: |
| * public/v3/models/repository.js: |
| (Repository): |
| (Repository.prototype.owner): |
| * server-tests/admin-reprocess-report-tests.js: |
| (addBuilderForReport.simpleReportWithRevisions.0.then): |
| (then): |
| * server-tests/api-manifest.js: |
| (then): |
| * server-tests/api-report-commits-tests.js: |
| (addSlaveForReport.sameRepositoryNameInSubCommitAndMajorCommit.then): |
| (then): |
| (addSlaveForReport.systemVersionCommitWithSubcommits.then): |
| (addSlaveForReport.multipleSystemVersionCommitsWithSubcommits.then): |
| (addSlaveForReport.systemVersionCommitWithEmptySubcommits.then): |
| (addSlaveForReport.systemVersionCommitAndSubcommitWithTimestamp.then): |
| * tools/js/database.js: |
| |
| 2017-03-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update ReadMe.md to use directory format for backing up & restoring the database |
| https://bugs.webkit.org/show_bug.cgi?id=169263 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Update ReadMe.md's instruction to backup and restore the database to use directory format instead of |
| piping it to gzip. The new command will backup and restore the database with multiple concurrent processes |
| with a custom compression level. |
| |
| * ReadMe.md: |
| |
| 2017-03-02 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make baseline data points selectable |
| https://bugs.webkit.org/show_bug.cgi?id=169069 |
| <rdar://problem/29209427> |
| |
| Reviewed by Antti Koivisto. |
| |
| Add the capability to select data points other than "current" configuration type. |
| |
| This patch refactors the way the "chart status" is computed. Before this patch, ChartStatusView was |
| responsible for determining two data points for which to compute the status, and computing the status |
| between two data points. ChartPaneStatusView which inherits from ChartStatusView and used in the charts |
| page relied upon ChartStatusView to compute these values, and computed the list of revision ranges for |
| each relevant repository between the data points. ChartPane then had callbacks on ChartPaneStatusView |
| to know whenever these values changed. Because of this entangled mess, ChartStatusView had to be aware |
| of InteractiveTimeSeriesChart even though only ChartPaneStatusView could be used with it. |
| |
| This patch dramatically simplifies the situation by adding referencePoints() on TimeSeriesChart and |
| InteractiveTimeSeriesChart which returns the current point, the previous point if there is any, and |
| their time series view. It also extracts ChartStatusEvaluator which computes the current status values |
| and ChartRevisionRange which computes a list of revision differences both based on the referencePoints. |
| As a result, ChartPaneStatusView no longer inherits from ChartStatusView, and ChartStatusView has been |
| renamed to DashboardChartStatusView to reflect its purpose. Furthermore, ChartPane which used to rely on |
| ChartPaneStatusView's revisionCallback to update the commit log viewer simply uses another instance of |
| ChartRevisionRange, eliminating the need for the callback. |
| |
| To implement these classes easily, this patch also introduces a new class, LazilyEvaluatedFunction to |
| memoize the return value of a function when called with the same arguments. Delaying the computation of |
| a value and avoiding the work when the values are the same is a very common pattern in the perf dashboard |
| so I expect this class would be used in a lot more places in the future. |
| |
| * browser-tests/chart-revision-range-tests.js: Added. Tests for ChartRevisionRange. |
| * browser-tests/chart-status-evaluator-tests.js: Added. Tests for ChartStatusEvaluator. |
| |
| * browser-tests/index.html: |
| (BrowsingContext): |
| (BrowsingContext.importScripts): Fixed the bug that calling importScripts twice results in MockRemoteAPI |
| being loaded twice. |
| (ChartTest.importChartScripts): Import more model objects. |
| (ChartTest.sampleCluster): Made this a getter. |
| (ChartTest.makeModelObjectsForSampleCluster): |
| (ChartTest.makeSampleCluster): Added. Cutomizes the valus of baseline / target based on options. |
| (ChartTest.respondWithSampleCluster): Now takes an options argument for makeSampleCluster. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase): Added _openRepository to keep track of the currently open repository instead of relying |
| on _mainChartStatus or _commitLogViewer to keep track of it. |
| (ChartPaneBase.prototype.configure): The callback for when the user clicked on a repository name in |
| ChartPaneStatusView has been replaced by "openRepository" action. |
| (ChartPaneBase.prototype.setOpenRepository): Moved from ChartPane. |
| (ChartPaneBase.prototype._mainSelectionDidChange): |
| (ChartPaneBase.prototype._indicatorDidChange): |
| (ChartPaneBase.prototype._didFetchData): |
| (ChartPaneBase.prototype._updateCommitLogViewer): Renamed from _updateStatus. |
| (ChartPaneBase.prototype.openNewRepository): Renamed from _requestOpeningCommitViewer. Fixed a bug that |
| clicking on the repository name inside ChartPaneStatusView would not focus the pane, which resulted in |
| arrow keys to be ignored instead of moving the main chart's indicator or the currently open repository. |
| (ChartPaneBase.prototype._keyup): |
| (ChartPaneBase.prototype._moveOpenRepository): Moved from ChartPaneStatusView's |
| moveRepositoryWithNotification. Used when changing the open repository by up/down arrow keys. |
| |
| * public/v3/components/chart-revision-range.js: Added. Extracted from ChartPaneStatusView. |
| (ChartRevisionRange): Added. |
| (ChartRevisionRange.prototype.revisionList): Added. |
| (ChartRevisionRange.prototype.rangeForRepository): Added. |
| (ChartRevisionRange._revisionForPoint): Added. Extracted from ChartPaneStatusView's |
| _updateRevisionListForNewCurrentRepository. |
| (ChartRevisionRange._computeRevisionList): Ditto from computeChartStatusLabels. |
| |
| * public/v3/components/chart-status-evaluator.js: Added. |
| (ChartStatusEvaluator): Added. |
| (ChartStatusEvaluator.prototype.status): Added. |
| (ChartStatusEvaluator.computeChartStatus): Added. Extracted from ChartStatusView's updateStatusIfNeeded. |
| |
| * public/v3/components/chart-status-view.js: Removed. |
| (ChartStatusView): Deleted. Split into ChartStatusEvaluator and DashboardChartStatusView. |
| |
| * public/v3/components/chart-styles.js: |
| (ChartStyles.baselineStyle): Make baseline data points interactive. This single line change is what |
| enables the user to interact with the data points. The rest of changes in this patch mostly deals with |
| the status text such as "5% worse than baseline" and the list of revisions shown in the commit log viewer |
| which would have shown the wrong range without these changes. |
| |
| * public/v3/components/dashboard-chart-status-view.js: Added. Extracted from ChartStatusView. |
| (DashboardChartStatusView): Added. |
| (DashboardChartStatusView.prototype.render): Added. |
| (DashboardChartStatusView.htmlTemplate): Added. |
| (DashboardChartStatusView.cssTemplate): Added. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype.referencePoints): Added. Return the first point and the last point |
| as the reference points when there is a selection. Only report the previous point if they are distinct as |
| showing a range of revisions from a data point to itself makes no sense. When there is a indicator simply |
| return it and its previous point as reference points. Otherwise return null unlike TimeSeriesChart's |
| referencePoints which always returns the latest point as the reference point. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype.referencePoints): Added. Return the latest point as the reference point. It |
| never returns the previous point even if there were more data points as there is no way for the user to |
| specify which data points to compare. |
| |
| * public/v3/index.html: Include newly added files. |
| |
| * public/v3/lazily-evaluated-function.js: Added. |
| (LazilyEvaluatedFunction): Added. |
| (LazilyEvaluatedFunction.prototype.evaluate): Added. |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog.prototype.diff): Fixed a bug that computing the diff of two Subversion-like revisions results |
| in "from" field to be unexpectedly an integer instead of a string. |
| |
| * public/v3/models/metric.js: |
| (Metric): Moved the code to compute the unit from the metric name from v2's RunsData class. This makes |
| writing tests easier since it eliminates the need to load v2's data.js. |
| (Metric.prototype.unit): |
| (Metric.prototype.isSmallerBetter): Ditto for determining whether the unit is smaller-is-better. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane.prototype._updateStatus): Deleted the unused code. |
| |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView): No longer inherits from ChartStatusView. Uses ChartStatusEvaluator and |
| ChartRevisionRange to to compute the chart status and the list of revision changes. |
| (ChartPaneStatusView.prototype.pointsRangeForAnalysis): Deleted. |
| (ChartPaneStatusView.prototype.render): Split it into _renderStatus and _renderBuildRevisionTable using |
| LazilyEvaluatedFunction. |
| (ChartPaneStatusView.prototype._renderStatus): Added. |
| (ChartPaneStatusView.prototype._renderBuildRevisionTable): Added. |
| (ChartPaneStatusView.prototype.setCurrentRepository): _updateRevisionListForNewCurrentRepository has been |
| moved into ChartRevisionRange. Just enqueue itself to re-render. |
| (ChartPaneStatusView.prototype._setRevisionRange): Deleted. |
| (ChartPaneStatusView.prototype.moveRepositoryWithNotification): Deleted. |
| (ChartPaneStatusView.prototype.updateRevisionList): Deleted. |
| (ChartPaneStatusView.prototype._updateRevisionListForNewCurrentRepository): Deleted. |
| (ChartPaneStatusView.prototype.computeChartStatusLabels): Deleted. |
| (ChartPaneStatusView.htmlTemplate): |
| (ChartPaneStatusView.cssTemplate): |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype.openNewRepository): Overrides the one in ChartPaneBase, which has been renamed from |
| _requestOpeningCommitViewer. |
| (ChartPane.prototype._analyzeRange): |
| (ChartPane.prototype._renderActionToolbar): Use the main chart's selection directly to determine whether |
| an analysis task can be created for the currenty selected range. |
| |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype._createChartForCell): |
| |
| * unit-tests/lazily-evaluated-function-tests.js: Added. Tests for LazilyEvaluatedFunction. |
| |
| 2017-03-01 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r212853. Make creating an analysis task work again. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype.render): |
| |
| 2017-02-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix tests after r213119 and r213120. |
| |
| * browser-tests/time-series-chart-tests.js: |
| (return.ChartTest.importChartScripts.context.then): |
| (string_appeared_here.then): Deleted. |
| |
| 2017-02-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Removed the unused code that was supposed to be removed in the previous commit. |
| |
| * browser-tests/time-series-chart-tests.js: |
| |
| 2017-02-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Split tests for InteractiveTimeSeriesChart into a separate test file. |
| https://bugs.webkit.org/show_bug.cgi?id=168960 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Extracted the test cases for InteractiveTimeSeriesChart charts from time-series-chart-tests.js |
| into interactive-time-series-chart-tests.js now that the former file has gotten really big over time. |
| |
| Also extracted a bunch of helper functions time-series-chart-tests.js as ChartTest in index.html. |
| Any test which instantiates a time series chart can use this helper class. |
| |
| * browser-tests/index.html: |
| (ChartTest.importChartScripts): Ditto. |
| (ChartTest.posixTime): Moved from time-series-chart-tests.js. |
| (ChartTest.sampleCluster): Ditto. |
| (ChartTest.createChartWithSampleCluster): Ditto. |
| (ChartTest.createInteractiveChartWithSampleCluster): Ditto. |
| (ChartTest.respondWithSampleCluster): |
| * browser-tests/interactive-time-series-chart-tests.js: Extracted from time-series-chart-tests.js. |
| * browser-tests/time-series-chart-tests.js: |
| (posixTime): Moved. |
| (dayInMilliseconds): Moved. |
| (sampleCluster): Moved. |
| (createChartWithSampleCluster): Moved. |
| (createInteractiveChartWithSampleCluster): Moved. |
| (respondWithSampleCluster): Moved. |
| * unit-tests/analysis-task-tests.js: Fixed a typo. s/adopter/adapter/. |
| |
| 2017-02-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Calling build() on a baseline point results in an exception |
| https://bugs.webkit.org/show_bug.cgi?id=168959 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Some baseline points may lack the build information. e.g. A custom data point made by an user. |
| Only instantiate Build object in a point object returned by MeasurementAdaptor when the builder id |
| is available so that we don't hit an assertion inside Build's constructor. |
| |
| * public/v3/models/measurement-adaptor.js: |
| (MeasurementAdaptor.prototype.applyTo..build): Only instantiate Build when builderId is set. |
| * unit-tests/measurement-adaptor-tests.js: Added a test case. |
| |
| 2017-02-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Arrow key shouldn't move the indicator beyond the visible points |
| https://bugs.webkit.org/show_bug.cgi?id=168956 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| The bug was caused by moveLockedIndicatorWithNotification using the full sampled time series view |
| instead of the one constrained by the domain. Since the time series chart expands the visible domain |
| to include at least one point before the start time and one point after the end tiem to draw lines |
| extending beyond the visible region (otherwise it looks as though the graph ends there), we need to |
| use a view constrained by the start time and the end time before looking for a next/previous point. |
| |
| * browser-tests/time-series-chart-tests.js: Added test cases for moveLockedIndicatorWithNotification. |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype.moveLockedIndicatorWithNotification): Fixed the bug. Also |
| enqueue itself to render instead of relying on a parent component to do it. |
| |
| 2017-02-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A Locked indicator should be visually distinct from an unlocked indicator |
| https://bugs.webkit.org/show_bug.cgi?id=168868 |
| <rdar://problem/29666054> |
| |
| Reviewed by Antti Koivisto. |
| |
| Added the support for specifying options.lockedIndicator in addition to options.indicator to style |
| an locked indicator differently from an unlocked one. |
| |
| * browser-tests/time-series-chart-tests.js: Added new test cases for indicators. |
| (createChartWithSampleCluster): Renamed and swapped the order of arguments to better match |
| TimeSeriesChart's constructor. Now the second argument is an array of source as is in the constructor. |
| (createInteractiveChartWithSampleCluster): Added. |
| |
| * public/v3/components/chart-styles.js: |
| (ChartStyles.overviewChartOptions): Changed the color of a selection to blue. |
| (ChartStyles.mainChartOptions): Ditto. Also use a different style for a locked indicator. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype._layout): Removed the unused variable. |
| (InteractiveTimeSeriesChart.prototype._renderChartContent): Use options.lockedIndicator when rendering |
| a locked indicator. Also stroke the circle in addition to filling it so that we can use a blue circle |
| with a white hole for a locked indicator to make it even more visually distinctive from an unlocked one. |
| |
| 2017-02-25 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Commit should order by 'commit_order' as secondary key. |
| https://bugs.webkit.org/show_bug.cgi?id=168866 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Currently, commits are sorted by 'commit_time' only. |
| We should use 'commit_order' as secondary key when 'commit_time' is equal or null. |
| |
| * public/include/commit-log-fetcher.php: |
| * public/include/db.php: |
| * server-tests/api-commits.js: |
| (return.addSlaveForReport.subversionCommits.then): |
| (then): |
| |
| 2017-02-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION(r212853): Comparisons to baseline no longer shows up |
| https://bugs.webkit.org/show_bug.cgi?id=168863 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| The bug was caused by ChartStatusView's code not being updated to use TimeSeriesView's. |
| Updated the code to use TimeSeriesView's methods to fix the bug. |
| |
| Also made InteractiveTimeSeriesChart's currentPoint to return a (TimeSeriesView, point, isLocked) tuple |
| to consolidate it with lockedIndicator() to work towards making the baseline data points selectable. |
| |
| * browser-tests/time-series-chart-tests.js: Updated the test cases to use currentIndicator, and added |
| test cases for newly added lastPointInTimeRange. |
| |
| * public/v3/components/chart-pane.js: |
| (ChartPane.prototype.serializeState): Updated to use currentIndicator. |
| (ChartPane.prototype._renderFilteringPopover): Ditto. |
| |
| * public/v3/components/chart-status-view.js: |
| (ChartStatusView.prototype.updateStatusIfNeeded): Use currentIndicator for an interative time series. |
| Fixed the non-interactive chart's code path for TimeSeriesView. |
| (ChartStatusView.prototype._computeChartStatus): Modernized the code. |
| (ChartStatusView.prototype._findLastPointPriorToTime): Deleted. Replaced by TimeSeriesView's |
| lastPointInTimeRange. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype.currentIndicator): |
| (InteractiveTimeSeriesChart.prototype.moveLockedIndicatorWithNotification): |
| (InteractiveTimeSeriesChart.prototype._renderChartContent): |
| (InteractiveTimeSeriesChart): |
| |
| * public/v3/models/time-series.js: |
| (TimeSeriesView.prototype.lastPointInTimeRange): Added. |
| (TimeSeriesView.prototype._reverse): Added. Traverses the view in the reverse order. |
| * unit-tests/time-series-tests.js: |
| |
| 2017-02-23 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Rename 'commit_parent' in 'commits' table to 'commit_previous_commit'. |
| https://bugs.webkit.org/show_bug.cgi?id=168816 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Rename 'commit_parent' to avoid ambiguity in the coming feature. |
| For exisiting database, run |
| "ALTER TABLE commits RENAME commit_parent TO commit_previous_commit;" |
| to update the database. |
| |
| * init-database.sql: |
| * public/api/report-commits.php: |
| * public/include/commit-log-fetcher.php: |
| * server-tests/api-commits.js: |
| (then): |
| * server-tests/api-report-commits-tests.js: |
| (then): |
| * tools/sync-commits.py: |
| (main): |
| (Repository.fetch_commits_and_submit): |
| (GitRepository._revision_from_tokens): |
| * unit-tests/analysis-task-tests.js: |
| (sampleAnalysisTask): |
| |
| 2017-02-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New sampling algorithm shows very few points when zoomed out |
| https://bugs.webkit.org/show_bug.cgi?id=168813 |
| |
| Reviewed by Saam Barati. |
| |
| When a chart is zoomed out to a large time interval, the new sampling algorithm introduced in r212853 can |
| hide most of the data points because the difference between the preceding point's time and the succeeding |
| point's time of most points will be below the threshold we computed. |
| |
| Instead, rank each data point based on the aforementioned time interval difference, and pick the first M data |
| points when M data points are to be shown. |
| |
| This makes the new algorithm behave like our old algorithm while keeping it stable still. Note that this |
| algorithm still biases data points without a close neighboring point but this seems to work out in practice |
| because such a point tends to be an important sample anyway, and we don't have a lot of space between |
| data points since we aim to show about one point per pixel. |
| |
| * browser-tests/index.html: |
| (CanvasTest.canvasContainsColor): Extracted from one of the test cases and generalized. Returns true when |
| the specified region of the canvas contains a specified color (alpha is optional). |
| * browser-tests/time-series-chart-tests.js: Added a test case for sampling. It checks that sampling happens |
| and that we always show some data point even when zoomed out to a large time interval. |
| (createChartWithSampleCluster): |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype._sampleTimeSeries): |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype._ensureSampledTimeSeries): M, the number of data points we pick must be computed |
| based on the width of data points we're about to draw constrained by the canvas size. e.g. when the canvas |
| is only half filled, we shouldn't be showing two points per pixel in the filled region. |
| (TimeSeriesChart.prototype._sampleTimeSeries): Refined the algorithm. First, compute the time difference or |
| the rank for each N data points. Sort those ranks in descending order (in the order we prefer), and include |
| all data points above the M-th rank in the sample. |
| (TimeSeriesChart.prototype.computeTimeGrid): Revert the inadvertent change in r212935. |
| |
| * public/v3/models/time-series.js: |
| (TimeSeriesView.prototype.filter): Fixed a bug that the indices passed onto the callback were shifted by the |
| starting index. |
| * unit-tests/time-series-tests.js: Added a test case to ensure callbacks are called with correct data points |
| and indices. |
| |
| 2017-02-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION(r212542): Make TimeSeriesChart.computeTimeGrid stops x-axis grid prematurely |
| https://bugs.webkit.org/show_bug.cgi?id=168812 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Add time iterator of two months, three months, and four months with some tests. |
| |
| Also for one-month time iterator, round the day of month to 1 or 15 whichever is closer. |
| |
| * browser-tests/time-series-chart-tests.js: Added more tests. |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart._timeIterators.next): |
| (TimeSeriesChart._timeIterators): |
| |
| 2017-02-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add tests for InteractiveTimeSeriesChart and adopt actions |
| https://bugs.webkit.org/show_bug.cgi?id=168750 |
| |
| Reviewed by Chris Dumez. |
| |
| Added tests for InteractiveTimeSeriesChart. |
| |
| Also replaced selection.onchange, selection.onzoom, indicator.onchange, annotations.onclick callbacks |
| by "selectionChange", "zoom", "indicatorChange", and "annotationClick" actions respectively. |
| |
| Also fixed various bugs and bad code I encountered while writing these tests. |
| |
| * browser-tests/index.html: |
| (waitForComponentsToRender): Delay the call to enqueueToRender until the next run loop because there |
| might be outstanding promises that just got resolved. e.g. for fetching measurement sets JSONs. Let |
| all those promises get resolved first. Otherwise, some tests become racy. |
| (canvasImageData): Extracted from time-series-chart-tests.js. |
| (canvasRefTest): Ditto. |
| (CanvasTest): Ditto. |
| (CanvasTest.fillCanvasBeforeRedrawCheck): Ditto. |
| (CanvasTest.hasCanvasBeenRedrawn): Ditto. |
| (CanvasTest.canvasImageData): Ditto. |
| (CanvasTest.expectCanvasesMatch): Ditto. |
| (CanvasTest.expectCanvasesMismatch): Ditto. |
| |
| * browser-tests/time-series-chart-tests.js: Fixed some test cases where dpr multipler was not doing |
| the right thing anymore in Safari under a high DPI screen. Also added a lot of test cases for interactive |
| time series chart and one for rendering annotations. |
| (scripts): Moved. |
| (posixTime): Added. A helper function for sampleCluster. |
| (dayInMilliseconds): Ditto. |
| (sampleCluster): Moved here. Made the same cluster more artifical for an easier testing. |
| (createChartWithSampleCluster): Moved out of one of the tests. |
| (respondWithSampleCluster): Ditto. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.configure): Adopted new actions in InteractiveTimeSeriesChart. |
| |
| * public/v3/components/chart-status-view.js: |
| (ChartStatusView.prototype.updateStatusIfNeeded): Removed a superflous console.log. |
| |
| * public/v3/components/chart-styles.js: |
| (ChartStyles.mainChartOptions): Set zoomButton to true. InteractiveTimeSeriesChart used to determine |
| whether to show the zoom button or not based on the precense of the zoom callback. We made it explicit. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype.setIndicator): Explicitly call _notifySelectionChanged with false |
| instead of relying on undefined to be treated as falsey. |
| (InteractiveTimeSeriesChart.prototype._createCanvas): Use id instead of selector to find elements. |
| (InteractiveTimeSeriesChart.htmlTemplate): |
| (InteractiveTimeSeriesChart.cssTemplate): |
| (InteractiveTimeSeriesChart.prototype._mouseMove): Explicitly call _startOrContinueDragging with false |
| instead of relying on undefined treated as falsey. Also added the missing call to enqueueToRender found |
| by new tests. This was working fine on the dashboard due to other components invoking enqueueToRender |
| but won't work in a standalone instance of InteractiveTimeSeriesChart. |
| (InteractiveTimeSeriesChart.prototype._mouseLeave): Ditto, adding the missing call to enqueueToRender. |
| (InteractiveTimeSeriesChart.prototype._click): Removed the assignment to _forceRender when calling |
| _mouseMove in an early exist, which does set this flag and invokes enqueueToRender, and added the missing |
| call to enqueueToRender in the other code path. |
| (InteractiveTimeSeriesChart.prototype._startOrContinueDragging): Replaced annotations.onclick callback |
| by the newly added "annotationClick" action, and added the missing call to enqueueToRender. |
| (InteractiveTimeSeriesChart.prototype._endDragging): Use arrow function. |
| (InteractiveTimeSeriesChart.prototype._notifyIndicatorChanged): Replaced indicator.onchange callback by |
| the newly added "indicatorChange" action. |
| (InteractiveTimeSeriesChart.prototype._notifySelectionChanged): Replaced selection.onchange callback by |
| the newly added "selectionChange" action. |
| (InteractiveTimeSeriesChart.prototype._renderChartContent): Show the zoom button when options.zoomButton |
| is set instead of relying on the presence of selection.onzoom especially now that the callback has been |
| replaced by the "zoom" action. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype.setAnnotations): Added the missing call to enqueueToRender. |
| |
| * public/v3/main.js: |
| |
| 2017-02-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make sampling algorithm more stable and introduce an abstraction for sampled data |
| https://bugs.webkit.org/show_bug.cgi?id=168693 |
| |
| Reviewed by Chris Dumez. |
| |
| Before this patch, TimeSeriesChart's resampling resulted in some points poping up and disappearing as |
| the width of a chart is changed. e.g. when resizing the browser window. The bug was by caused by |
| the sample for a given width not always including all points for a smaller width so as the width is |
| expanded, some point may be dropped. |
| |
| Fixed this by using a much simpler algorithm of always picking a point when the time interval between |
| the preceding point and the succeeding point is larger than the minimum space we allow for a given width. |
| |
| Also introduced a new abstraction around the sample data: TimeSeriesView. A TimeSeriesView provides |
| a similar API to TimeSeries for a subset of the time series filtered by a time range a custom function. |
| This paves a way to adding the ability to select baseline, etc... on the chart status view. |
| |
| TimeSeriesView can be in two modes: |
| Mode 1. The view represents a contiguous subrange of TimeSeries - In this mode, this._data references |
| the underlying TimeSeries's _data directly, and we use _startingIndex to adjust index given to |
| find the relative index. Finding the next point or the previous point of a given point is done |
| via looking up the point's seriesIndex and doing a simple arithmetic. In general, an index is |
| converted to the absolute index in the underlying TimeSeries's _data array. |
| |
| Mode 2. The view represents a filtered non-contiguous subset of TimeSeries - In this mode, this._data is |
| its own array. Finding the next point or the previous point of a given point requires finding |
| a sibling point in the underlying TimeSeries which is in this view. Since this may result in O(n) |
| traversal and a hash lookup, we lazily build a map of each point to its position in _data instead. |
| |
| * public/v3/components/chart-status-view.js: |
| (ChartStatusView.prototype.updateStatusIfNeeded): Call selectedPoints instead of sampledDataBetween for |
| clarity. This function now returns a TimeSeriesView instead of a raw array. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype.currentPoint): Updated now that _sampledTimeSeriesData contains |
| an array of TimeSeriesView's. Note that diff is either 0, -1, or 1. |
| (InteractiveTimeSeriesChart.prototype.selectedPoints): Ditto. sampledDataBetween no longer exists since |
| we can simply call viewTimeRange on TimeSeriesView returned by sampledDataBetween. |
| (InteractiveTimeSeriesChart.prototype.firstSelectedPoint): Ditto. |
| (InteractiveTimeSeriesChart.prototype._sampleTimeSeries): Use add since excludedPoints is now a Set. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype.sampledDataBetween): Deleted. |
| (TimeSeriesChart.prototype.firstSampledPointBetweenTime): Deleted. |
| (TimeSeriesChart.prototype._ensureSampledTimeSeries): Modernized the code. Use the the time interval of |
| the chart divided by the number of allowed points as the time interval used in the new sampling algorithm. |
| (TimeSeriesChart.prototype._sampleTimeSeries): Rewritten. We also create TimeSeriesView here. |
| (TimeSeriesChart.prototype._sampleTimeSeries.findMedian): Deleted. |
| (TimeSeriesChart.prototype._updateCanvasSizeIfClientSizeChanged): Fixed a bug that the canvas size wasn't |
| set to the correct value on Chrome when a high DPI screen is used. |
| |
| * public/v3/models/time-series.js: |
| (TimeSeries.prototype.viewBetweenPoints): Renamed from dataBetweenPoints. Now returns a TimeSeriesView. |
| (TimeSeriesView): Added. This constructor is to be called by viewBetweenPoints, viewTimeRange, and filter. |
| (TimeSeriesView.prototype._buildPointIndexMap): Added. Used in mode (2). |
| (TimeSeriesView.prototype.length): Added. |
| (TimeSeriesView.prototype.firstPoint): Added. |
| (TimeSeriesView.prototype.lastPoint): Added. |
| (TimeSeriesView.prototype.nextPoint): Added. Note index is always a position in this._data. In mode (1), |
| this is the position of the point in the underlying TimeSeries' _data. In mode (2), this is the position |
| of the point in this._data which is dictinct from the underlying TimeSeries' _data. |
| (TimeSeriesView.prototype.previousPoint): Ditto. |
| (TimeSeriesView.prototype.findPointByIndex): Added. Finds the point using the positional index from the |
| beginning of this view. findPointByIndex(0) on one view may not be same as findPointByIndex(0) of another. |
| (TimeSeriesView.prototype.findById): Added. This is O(n). |
| (TimeSeriesView.prototype.values): Added. Returns the value of each point in this view. |
| (TimeSeriesView.prototype.filter): Added. Creates a new view with a subset of data points the predicate |
| function returned true. |
| (TimeSeriesView.prototype.viewTimeRange): Added. Creates a new view with a subset of data points for the |
| given time ragne. When the resultant view would include all points of this view, it simply returns itself |
| as an optimization. |
| (TimeSeriesView.prototype.firstPointInTimeRange): Added. Returns the first point in the view which lies |
| within the specified time range. |
| (TimeSeriesView.prototype.Symbol.iterator): Added. Iterates over each point in the view. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane.prototype.selectedPoints): Use selectedPoints in lieu of getting selection and then |
| calling sampledDataBetween with that range. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPageConfigurationGroup.set _medianForTimeRange): Modernized. |
| |
| * unit-tests/time-series-tests.js: Added tests for TimeSeries and TimeSeriesView. Already caught bugs! |
| (addPointsToSeries): |
| |
| 2017-02-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add tests for the time series chart and fix bugs I found along the way |
| https://bugs.webkit.org/show_bug.cgi?id=168499 |
| |
| Reviewed by Antti Koivisto. |
| |
| Add basic tests for the time series chart. |
| |
| Replaced the "ondata" callback set in the options by "dataChange" action now that ComponentBase provides |
| a facility for defining event-like actions. |
| |
| Also fixed bugs I encountered while writing these tests see below for descriptions. |
| |
| * browser-tests/editable-text-tests.js: |
| (waitToRender): Moved to index.html |
| * browser-tests/index.html: |
| (waitToRender): Moved from editable-text-tests.js. |
| (wait): Added. |
| * browser-tests/time-series-chart-tests.js: Added. |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.configure): |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart): Removed the code to set display and position inline properties. This is now done inside |
| cssTemplate with :host pseudo class. |
| (TimeSeriesChart.prototype._ensureCanvas): Don't strech the canvas to 100% of width and height. This was |
| causing a flush of contents where the canvas is momentarily streched by the browser and the script later |
| updates with the content with the correct aspect ratio. |
| (TimeSeriesChart.cssTemplate): Added :host rule to set display: block and position: relative. |
| (TimeSeriesChart._updateAllCharts): Deleted. |
| (TimeSeriesChart.prototype.render): Only run the code for axis when options.axis is defined. Also, avoid |
| setting the fill style because we never fill for axis drawing. |
| (TimeSeriesChart.prototype._computeHorizontalRenderingMetrics): Ditto. Fallback to sensible values when |
| options.axis is not defined. |
| (TimeSeriesChart.prototype._renderYAxis): Now computeValueGrid generates a sequence of {time, label}. |
| (TimeSeriesChart.prototype._renderTimeSeries): Don't draw the shades for confidence intervals unless its |
| fill style is defined. Otherwise, we'd end up drawing black shade and mask the actual data points. |
| (TimeSeriesChart.prototype._ensureSampledTimeSeries): Dispatch newly added "dataChange" action instead of |
| calling "ondata" callback in options dictionary. |
| (TimeSeriesChart.computeTimeGrid): Modernized to use const/let. Also fixed the bug that we were emitting |
| the date even when the entire time range fit within a 24-hour interval. |
| (TimeSeriesChart.computeValueGrid): Rewritten to make MB/GB use a nice round number instead of 0.98GB. |
| We were using a power of 10 to round up the stepping value but the value formatter used a power of 1024 |
| to divide byte measurements (e.g. for memory). Use formatter.divisor to find the right scaling factor for |
| each kind. |
| * public/v3/models/metric.js: |
| (Metric.prototype.makeFormatter): |
| (Metric.makeFormatter): Extracted from the one on the prototype so that tests don't need a metric object |
| just to test TimeSeriesChart. Added the second argument which specifies the maximum absolute value of the |
| range we're formatting. This is needed to use the same number of decimal points when the most significant |
| digit of some value is smaller than that of the biggest one. For example, we were emitting 0.50GB instead |
| of 0.5G along with 2.0GB. The "adjustment" reduces the number of significant figures in these cases. |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype._createChartForCell): |
| |
| 2017-02-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Use expect.js instead of expect in browser tests |
| https://bugs.webkit.org/show_bug.cgi?id=168492 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Use expect.js (https://github.com/Automattic/expect.js) instead of expect (https://github.com/mjackson/expect). |
| |
| * browser-tests/close-button-tests.js: |
| * browser-tests/component-base-tests.js: |
| * browser-tests/editable-text-tests.js: |
| * browser-tests/index.html: |
| |
| 2017-02-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Modernize and fix measurement-set tests |
| https://bugs.webkit.org/show_bug.cgi?id=168484 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Modernized and fixed the tests in measurement-set-tests.js. |
| |
| 1. Return a promise instead of manually calling done in then/catch hanlders. |
| 2. Use arrow function everywhere. |
| 3. Explicitly assert the number of calls to callbacks instead of asserting never reached. |
| |
| The test case labled "should return false when the range ends after the fetched cluster" |
| was incorrectly asserting that hasFetchedRange returns false when the end time is after |
| the primary cluster's end time. Test an interval before the primary cluster instead. |
| |
| Added a test case for hasFetchedRange returning true when the end time appears after |
| the end of the primary cluster and fixed hasFetchedRange to that end. Since there are |
| no data points after the primary cluster which is chronologically the last cluster, |
| there is nothing to fetch beyond its end time. |
| |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet.prototype.hasFetchedRange): Fixed the bug that this function returned |
| false when the end time was after the primary cluster's end by truncating the range by |
| the end of the primary cluster. |
| * unit-tests/measurement-set-tests.js: |
| * unit-tests/resources/mock-remote-api.js: |
| (assert.notReached.assert.notReached): Deleted. It's no longer used by any tests. |
| |
| 2017-02-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update ReadMe.md and merge it with Install.md |
| https://bugs.webkit.org/show_bug.cgi?id=168405 |
| |
| Reviewed by Michael Catanzaro. |
| |
| Merged Install.md and ReadMe.md into one file. |
| |
| * Install.md: Removed. |
| * ReadMe.md: Merged Install.md at the top and updated the rest of the content. |
| |
| 2017-01-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Modernize editable-text component and add tests |
| https://bugs.webkit.org/show_bug.cgi?id=167398 |
| |
| Reviewed by Yusuke Suzuki. |
| |
| Modernized EditableText component to use the action feature added in r210938. |
| |
| * browser-tests/editable-text-tests.js: Added. Added tests for EditableText component. |
| (.waitToRender): |
| * browser-tests/index.html: |
| * public/v3/components/base.js: |
| (ComponentBase.prototype.dispatchAction): Return the result from the callback. |
| * public/v3/components/editable-text.js: |
| (EditableText): Removed a bunch of instance variables that are no longer needed. |
| (EditableText.prototype.didConstructShadowTree): Added. Add event listeners on the Edit/Save button and the host. |
| (EditableText.prototype.editedText): Return the text field's value directly. |
| (EditableText.prototype.text): Added. |
| (EditableText.prototype.setText): Call enqueueToRender automatically instead of relying on the parent component |
| to do so in _startedEditingCallback, which has been removed. |
| (EditableText.prototype.render): Modernized the code. |
| (EditableText.prototype._didClick): No longer prevents the default action manually since that's automatically done |
| in createEventHandler. Handle the case where the update action is not handled. |
| (EditableText.prototype._endEditingMode): Renamed from _didUpdate. |
| (EditableText.htmlTemplate): Added ids on various elements in the shadow tree. |
| (EditableText.cssTemplate): Updated the CSS selectors per above change. |
| * public/v3/main.js: |
| (main): Fixed a typo. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): Use the action listener instead of manually setting callbacks. |
| (AnalysisTaskPage.prototype._createTestGroupListItem): Ditto. |
| (AnalysisTaskPage.prototype._didStartEditingTaskName): Deleted. |
| |
| 2017-01-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r210783. Didn't mean to require custom elements API. |
| |
| * public/v3/main.js: |
| (main): |
| |
| 2017-01-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make sync-commits.py robust against missing Subversion authors and missing parent Git commits |
| https://bugs.webkit.org/show_bug.cgi?id=167231 |
| |
| Reviewed by Antti Koivisto. |
| |
| Fixed a bug that a subversion commit that's missing author name (anonymous commit) results in an out of bound |
| exception, and a bug that syncing a git repository starts failing once there was a merge commit which pulled |
| in a commit data earlier than that of the last reported commit. |
| |
| For the latter fix, added --max-ancestor-fetch-count to specify the number of maximum commits to look back. |
| |
| * tools/sync-commits.py: |
| (main): Added --max-ancestor-fetch-count. |
| (Repository.fetch_commits_and_submit): If submit_commits fails with FailedToFindParentCommit, fetch the parent |
| commit's information until we've resolved them all. |
| (Repository.fetch_next_commit): Renamed from fetch_commit. |
| (SVNRepository.fetch_next_commit): Renamed from fetch_commit. Don't try to get the author name if it's missing |
| due to an anonymous commit. It's important to never include the "author" field in the JSON submitted to |
| a dashboard since it rejects when "author" field is not an array (e.g. null). |
| (GitRepository.fetch_next_commit): Renamed from fetch_commit. |
| (GitRepository.fetch_commit): Added. Fetches the commit information for a given git hash. Used to retrieve |
| missing parent commits. |
| (GitRepository._revision_from_tokens): Extracted from fetch_commit. |
| |
| * tools/util.py: |
| (submit_commits): Optionally takes status_to_accept to avoid throwing in the case of FailedToFindParentCommit |
| and returns the response JSON. |
| |
| 2017-01-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION(r198234): /api/commits/%revision% always fails |
| https://bugs.webkit.org/show_bug.cgi?id=167235 |
| |
| Reviewed by Antti Koivisto. |
| |
| The bug was caused by a typo in CommitLogFetcher::fetch_revision, which was calling commit_for_revision on |
| $this->db instead of $this. This had been monkey-patched in the internal dashboard so it was working there. |
| |
| Also fixed a bug that /latest wasn't doing what it claimed to do, and a bug that /oldest /latest, |
| and /last-reported would return a commit with all values set to null instead of an empty list. |
| |
| Finally, added server API tests for /api/commits. |
| |
| * public/api/commits.php: |
| (main): Add a comment for APIs that only exist for v2 UI. |
| |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::fetch_latest): Fixed the bug that this function was returning the oldest commit, not the |
| the latest commit as desired. |
| (CommitLogFetcher::fetch_revision): Fixed the bug that this function would always encounter an exception |
| because commit_for_revision is defined on $this, not $this->db. |
| (CommitLogFetcher::format_single_commit): Return an empty list instead of an array with a single commit with |
| all values set to null. |
| |
| * server-tests/api-commits.js: Added. Added tests for the JSON API at /api/commits. |
| (.assertCommitIsSameAsOneSubmitted): Added. A helper function to compare a commit returned by /api/commits |
| to one sent to /api/report-commits. |
| |
| 2017-01-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| measurement-sets API can incorrectly order points with OS version without commit time |
| https://bugs.webkit.org/show_bug.cgi?id=167227 |
| |
| Reviewed by Chris Dumez. |
| |
| Ignore revision_order for the purpose of ordering data points in /api/measurement-sets. |
| |
| These orderings are used in some UI (e.g A/B testing) to order OS build numbers which do not have a timestamp |
| associated with each "revision". |
| |
| The baseline measurements made in our internal dashboard were using these ordering numbers before ordering |
| results with build time. Because those data points don't have an associated Webkit revisions, all data points |
| were ordered first by macOS's revision_order, then build time. Because v3 UI completely ignores revision_order |
| for the purpose of plotting data points, this resulted in some data points being plotted in a wrong order |
| with some lines going backwards in time. |
| |
| This patch addresses this discrepancy by stop ordering data points with revision_order in the JSON API. |
| |
| * public/api/measurement-set.php: |
| (MeasurementSetFetcher::execute_query): Fixed the bug. |
| * server-tests/api-measurement-set-tests.js: Added a test. |
| |
| 2017-01-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r210626. We need to clear Triggerable's static map in each iteration. |
| |
| * tools/sync-buildbot.js: |
| (syncLoop): |
| |
| 2017-01-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a mechanism to dispatch and listen to an action |
| https://bugs.webkit.org/show_bug.cgi?id=167191 |
| |
| Reviewed by Antti Koivisto. |
| |
| Added the notion of an action to components. Like DOM events, it can be dispatched or listen to. |
| |
| Also added ComponentBase.prototype.part which finds a sub-component inside a component's shadow tree, |
| and made ComponentBase.prototype.content take an id to find an element that matches it. |
| |
| * browser-tests/close-button-tests.js: Added. Tests for CloseButton. |
| * browser-tests/component-base-tests.js: Added tests for ComponentBase's part(~), content(id), dispatchEvent. |
| * browser-tests/index.html: |
| * public/v3/components/base.js: |
| (ComponentBase): Added this._actionCallbacks, which is a map of an action name to a callback to be invoked. |
| (ComponentBase.prototype.content): Return an element of the given id if one is specified. |
| (ComponentBase.prototype.part): Find a component whose element has the matching id. |
| (ComponentBase.prototype.dispatchAction): Added. |
| (ComponentBase.prototype.listenToAction): Added. |
| (ComponentBase.prototype._ensureShadowTree): Call didConstructShadowTree. |
| (ComponentBase.prototype.didConstructShadowTree): Added. |
| (ComponentBase.prototype._recursivelyReplaceUnknownElementsByComponents): Copy attributes when instantiating |
| an element for a component when the browser doesn't support custom elements API. |
| (ComponentBase.createLink): |
| (ComponentBase.prototype.createEventHandler): Added. |
| (ComponentBase.createEventHandler): Renamed from createActionHandler. |
| * public/v3/components/button-base.js: |
| (ButtonBase.prototype.didConstructShadowTree): Added. Dispatch "activate" action when the button is clicked. |
| (ButtonBase.prototype.setCallback): Deleted. |
| (ButtonBase.htmlTemplate): Use id instead of class so that this.content() can find it. |
| (ButtonBase.cssTemplate): Updated style rules. |
| * public/v3/pages/chart-pane.js: |
| (ChartPane): |
| (ChartPane.prototype.didConstructShadowTree): Added. Listen to "activate" action on the close button. |
| (ChartPane.prototype.render): Fixed a bug that we were never calling enqueueToRender on the close button. |
| (ChartPane.htmlTemplate): Add the id on the close button. |
| |
| 2017-01-18 Dewei Zhu <dewei_zhu@apple.com> |
| |
| 'buildbot-syncer.js' should be able to determine force build argument from a list of possible repositories. |
| https://bugs.webkit.org/show_bug.cgi?id=167152 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Add 'rootOptions' key which maps to a list of possible repositories. |
| For a build request, only one of the repositories in the list is valid. |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): |
| (BuildbotSyncer._validateAndMergeProperties): |
| (BuildbotSyncer): |
| * unit-tests/buildbot-syncer-tests.js: |
| (sampleiOSConfig): |
| (sampleiOSConfigWithExpansions): |
| (createSampleBuildRequest): |
| (Promise.resolve.then): |
| * unit-tests/resources/mock-v3-models.js: |
| (MockModels.inject): |
| |
| 2017-01-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make calls to render() functions async |
| https://bugs.webkit.org/show_bug.cgi?id=167151 |
| |
| Reviewed by Andreas Kling. |
| |
| Make calls to render() async by coalescing calls inside enqueueToRender(), which has been renamed from |
| updateRendering(). We now queue up all the components and wait until the next animation frame to invoke |
| render() on all those components. |
| |
| This reduces render() calls in the summary page of our internal dashboard by 15x from ~9400 to ~600 by |
| eliminating pathological O(n^2) behavior between render() calls. |
| |
| Consolidated TimeSeriesChart's enqueueRender into this newly added feature of ComponentBase along with |
| the support to call render() on a resize event. New implementation makes use of connectedCallback and |
| disconnectedCallback to avoid the work when the component is not in a document tree. |
| |
| The rest of the patch concerns with renaming updateRendering to enqueueToRender and fixing a few minor bugs |
| that I encountered while working on this patch. |
| |
| * browser-tests/component-base-tests.js: Added tests for ComponentBase.enqueueToRender(). |
| * browser-tests/index.html: |
| (BrowserContext.prototype.importScripts): Renamed from importScript; Now supports loading multiple scripts. |
| (BrowserContext.prototype.importScript): Added. |
| (BrowserContext): Removed the unused createWithScripts. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype._expandBetween): |
| * public/v3/components/bar-graph-group.js: |
| (BarGraphGroup.prototype.updateGroupRendering): |
| |
| * public/v3/components/base.js: |
| (ComponentBase): When the browser doesn't support custom elements and |
| (ComponentBase.prototype.enqueueToRender): Renamed from updateRendering. Queues up the component to call |
| render() instead of immediately invoking it. |
| (ComponentBase.renderingTimerDidFire): Call render(). Since render() function often calls enqueueToRender |
| on child components, go ahead and invoke render() on any components enqueued during render() calls. |
| (ComponentBase._connectedComponentToRenderOnResize): Added. |
| (ComponentBase._disconnectedComponentToRenderOnResize): Added. |
| (ComponentBase.defineElement.elementClass.prototype.connectedCallback): Added. This is an optimization to |
| avoid the work when the component is not in the document; e.g. because the entire page component has been |
| detached from the document. The old implementation in TimeSeriesChart was not doing this. |
| (ComponentBase.defineElement.elementClass.prototype.disconnectedCallback): Added. |
| (ComponentBase): Replaced unused static variables with _componentsToRender and _componentsToRenderOnResize. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.fetchAnalysisTasks): |
| (ChartPaneBase.prototype.didUpdateAnnotations): Added. Addresses the bug that the annotation bars in the |
| charts shown an an analysis task doesn't update its color when the state is updated in the UI. |
| (ChartPaneBase.prototype._mainSelectionDidZoom): |
| (ChartPaneBase.prototype._updateStatus): |
| (ChartPaneBase.prototype._requestOpeningCommitViewer): |
| (ChartPaneBase.prototype._keyup): |
| (ChartPaneBase.prototype.render): |
| * public/v3/components/commit-log-viewer.js: |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm): |
| (CustomizableTestGroupForm.prototype._customize): |
| * public/v3/components/editable-text.js: |
| (EditableText.prototype._didUpdate): |
| * public/v3/components/interactive-time-series-chart.js: |
| * public/v3/components/pane-selector.js: |
| (PaneSelector.prototype._selectedItem): |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart): Removed the logic to update upon resize. See _connectedComponentToRenderOnResize above. |
| (TimeSeriesChart.prototype.get enqueueToRenderOnResize): Added. Returns true. |
| (TimeSeriesChart.prototype.enqueueToRender): Deleted. |
| (TimeSeriesChart._renderEnqueuedCharts): Deleted. |
| (TimeSeriesChart): Call ComponentBase.defineElement to make this a proper component so that the logic in |
| connectedCallback to update upon resize event would work. |
| * public/v3/instrumentation.js: |
| (Instrumentation.dumpStatistics): Sort results by the key names. |
| * public/v3/models/time-series.js: |
| (TimeSeries.prototype.values): Added. This method was never ported to v3 in r198462, and broke the feature |
| to show moving averages, etc... on the charts page. |
| * public/v3/pages/analysis-category-page.js: |
| (AnalysisCategoryPage.prototype.open): |
| (AnalysisCategoryPage.prototype.updateFromSerializedState): |
| (AnalysisCategoryPage.prototype.filterDidChange): |
| (AnalysisCategoryPage.prototype.render): |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane.prototype._updateStatus): |
| (AnalysisTaskPage.prototype.updateFromSerializedState): |
| (AnalysisTaskPage.prototype._didFetchTask): |
| (AnalysisTaskPage.prototype._didFetchRelatedAnalysisTasks): |
| (AnalysisTaskPage.prototype._didFetchMeasurement): |
| (AnalysisTaskPage.prototype._didFetchTestGroups): |
| (AnalysisTaskPage.prototype._showAllTestGroups): |
| (AnalysisTaskPage.prototype._didFetchAnalysisResults): |
| (AnalysisTaskPage.prototype.render): |
| (AnalysisTaskPage.prototype._renderTestGroupList.): |
| (AnalysisTaskPage.prototype._renderTestGroupList): |
| (AnalysisTaskPage.prototype._createTestGroupListItem): |
| (AnalysisTaskPage.prototype._showTestGroup): |
| (AnalysisTaskPage.prototype._didStartEditingTaskName): |
| (AnalysisTaskPage.prototype._updateTaskName): |
| (AnalysisTaskPage.prototype._updateTestGroupName): |
| (AnalysisTaskPage.prototype._hideCurrentTestGroup): |
| (AnalysisTaskPage.prototype._updateChangeType): Fixed the bug that we were never updating annotation bars |
| in the main chart by calling didUpdateAnnotations. |
| (AnalysisTaskPage.prototype._associateBug): |
| (AnalysisTaskPage.prototype._dissociateBug): |
| (AnalysisTaskPage.prototype._associateCommit): |
| (AnalysisTaskPage.prototype._dissociateCommit): |
| (AnalysisTaskPage.prototype._chartSelectionDidChange): |
| (AnalysisTaskPage.prototype._selectedRowInAnalysisResultsViewer): |
| * public/v3/pages/build-request-queue-page.js: |
| (BuildRequestQueuePage.prototype.open.): |
| (BuildRequestQueuePage.prototype.open): |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype.setOpenRepository): |
| (ChartPane.prototype._renderTrendLinePopover): Fixed a race condition. Insert a select element as needed |
| before trying to assign the current value on it. |
| (ChartPane.prototype._trendLineTypeDidChange): |
| (ChartPane.prototype._updateTrendLine): |
| * public/v3/pages/charts-page.js: |
| (ChartsPage.prototype.updateFromSerializedState): |
| (ChartsPage.prototype._updateDomainsFromSerializedState): |
| (ChartsPage.prototype.setNumberOfDaysFromToolbar): |
| (ChartsPage.prototype._didMutatePaneList): |
| (ChartsPage.prototype.render): |
| * public/v3/pages/charts-toolbar.js: |
| (ChartsToolbar.prototype.render): |
| * public/v3/pages/create-analysis-task-page.js: |
| (CreateAnalysisTaskPage.prototype.updateFromSerializedState): |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype.updateFromSerializedState): |
| (DashboardPage.prototype._fetchedData): |
| * public/v3/pages/heading.js: |
| (Heading.prototype.render): |
| * public/v3/pages/page-with-heading.js: |
| (PageWithHeading.prototype.render): |
| * public/v3/pages/page.js: |
| (Page.prototype.open): |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype.open): |
| (SummaryPage.prototype.this._renderQueue.push): |
| (SummaryPage): |
| (SummaryPage.prototype._renderCell): |
| |
| 2017-01-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the build fix for browsers that don't yet support custom elements SPI. |
| It was supposedly to be a part of the previous commit. |
| |
| * public/v3/components/base.js: |
| (ComponentBase.defineElement): |
| |
| 2017-01-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Adopt custom elements API in perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=167045 |
| |
| Reviewed by Darin Adler. |
| |
| Adopt custom elements API in ComponentBase, and create the shadow tree lazily in content() and render() |
| instead of eagerly creating it inside the constructor. |
| |
| For now, create a separate element class for each component in ComponentBase.defineElement instead of |
| making ComponentBase inherit from HTMLElement to preserve the semantics we have as well as to test |
| the boundaries of what custom elements API allows for framework authors. |
| |
| In order to ensure one-to-one correspondence between elements and their components, we use a static map, |
| ComponentBase._currentlyConstructedByInterface, to remember which element or component is being created |
| and use that in custom element's constructor to update element.component() and this._element. |
| |
| Also dropped the support for not having attachShadow as we've shipped this feature in Safari 10. |
| |
| Finally, added tests to be ran inside a browser to test the front end code in browser-tests. |
| |
| * browser-tests/component-base-tests.js: Added. Basic tests for ComponentBase. |
| * browser-tests/index.html: Added. |
| |
| * public/v3/components/base.js: |
| (ComponentBase): Don't create the shadow tree. Use the currently constructed element as this._element if |
| there is one (the custom element's constructor is getting called). Otherwise create a new element but |
| store this component in the map to avoid creating a new component in the custom element's constructor. |
| (ComponentBase.prototype.content): Lazily create the shadow tree now. |
| (ComponentBase.prototype.render): Ditto. |
| (ComponentBase.prototype._ensureShadowTree): Renamed from _constructShadowTree. Dropped the support for |
| not having shadow DOM API. This is now required. Also use importNode instead of cloneNode in cloning |
| the template content since the latter would not get upgraded. |
| (ComponentBase.prototype._recursivelyReplaceUnknownElementsByComponents): Modernized the code. Don't |
| re-create a component if its element had already been upgraded by its custom element constructor. |
| (ComponentBase.defineElement): Add this component to the static maps. _componentByName is used by |
| _recursivelyReplaceUnknownElementsByComponents to instantiate new components in the browsers that don't |
| support custom elements API and _componentByClass is used by ComponentBase's constructor to lookup the |
| element name. The latter should go away once all components fully adopt ComponentBase.defineElement. |
| (ComponentBase.defineElement.elementClass): A class to define a custom element for the component. |
| We need to reconfigure the property since class's name is not writable but configurable. |
| |
| * public/v3/components/button-base.js: |
| (ButtonBase.htmlTemplate): Added. Extracted the common code from CloseButton and WarningIcon. |
| (ButtonBase.buttonContent): Added. An abstract method overridden by CloseButton and WarningIcon. |
| (ButtonBase.sizeFactor): Added. Overridden by WarningIcon. |
| (ButtonBase.cssTemplate): Updated to use :host. |
| * public/v3/components/close-button.js: |
| (CloseButton.buttonContent): Renamed from htmlTemplate. |
| * public/v3/components/spinner-icon.js: |
| (SpinnerIcon.cssTemplate): Removed webkit prefixed properties, and updated it to animate stroke instead |
| of opacity to reduce the power usage. |
| (SpinnerIcon.htmlTemplate): Factored stroke, stroke-width, and stroke-linecap into cssTemplate. |
| * public/v3/components/warning-icon.js: |
| (WarningIcon.cssTemplate): Deleted. |
| (WarningIcon.sizeFactor): Added. |
| (WarningIcon.buttonContent): Renamed from htmlTemplate. |
| * public/v3/pages/summary-page.js: |
| (SummaryPage._constructRatioGraph): Fixed a bug that we were not never calling spinner.updateRendering(). |
| (SummaryPage.prototype._renderCell): |
| |
| 2017-01-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Instrument calls to render() |
| https://bugs.webkit.org/show_bug.cgi?id=167037 |
| |
| Reviewed by Sam Weinig. |
| |
| Wrap every call to render() by newly added ComponentBase.updateRendering() to instrument it. |
| Also, use arrow functions instead of this.render.bind or regular closures for simplicity. |
| |
| Currently, we're making 5100 calls to render() while opening the summary page, and that's way too high. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype._expandBetween): |
| * public/v3/components/bar-graph-group.js: |
| (BarGraphGroup.prototype.updateGroupRendering): Renamed form render() as BarGraphGroup is not a component. |
| * public/v3/components/base.js: |
| (ComponentBase.prototype.updateRendering): Added. Instruments render() call. |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.fetchAnalysisTasks): |
| (ChartPaneBase.prototype._mainSelectionDidZoom): |
| (ChartPaneBase.prototype._updateStatus): |
| (ChartPaneBase.prototype._requestOpeningCommitViewer): |
| (ChartPaneBase.prototype._keyup): |
| (ChartPaneBase.prototype.render): |
| * public/v3/components/commit-log-viewer.js: |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm): |
| (CustomizableTestGroupForm.prototype._customize): |
| * public/v3/components/editable-text.js: |
| (EditableText.prototype._didUpdate): |
| * public/v3/components/pane-selector.js: |
| (PaneSelector.prototype._selectedItem): |
| * public/v3/components/results-table.js: |
| (ResultsTable.prototype.render): |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart._renderEnqueuedCharts): |
| * public/v3/pages/analysis-category-page.js: |
| (AnalysisCategoryPage.prototype.open): |
| (AnalysisCategoryPage.prototype.updateFromSerializedState): |
| (AnalysisCategoryPage.prototype.filterDidChange): |
| (AnalysisCategoryPage.prototype.render): |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane.prototype._updateStatus): |
| (AnalysisTaskPage.prototype.updateFromSerializedState): |
| (AnalysisTaskPage.prototype._didFetchTask): |
| (AnalysisTaskPage.prototype._didFetchRelatedAnalysisTasks): |
| (AnalysisTaskPage.prototype._didFetchMeasurement): |
| (AnalysisTaskPage.prototype._didFetchTestGroups): |
| (AnalysisTaskPage.prototype._showAllTestGroups): |
| (AnalysisTaskPage.prototype._didFetchAnalysisResults): |
| (AnalysisTaskPage.prototype.render): |
| (AnalysisTaskPage.prototype._renderTestGroupList.): |
| (AnalysisTaskPage.prototype._renderTestGroupList): |
| (AnalysisTaskPage.prototype._createTestGroupListItem): |
| (AnalysisTaskPage.prototype._showTestGroup): |
| (AnalysisTaskPage.prototype._didStartEditingTaskName): |
| (AnalysisTaskPage.prototype._updateTaskName): |
| (AnalysisTaskPage.prototype._updateTestGroupName): |
| (AnalysisTaskPage.prototype._hideCurrentTestGroup): |
| (AnalysisTaskPage.prototype._updateChangeType): |
| (AnalysisTaskPage.prototype._associateBug): |
| (AnalysisTaskPage.prototype._dissociateBug): |
| (AnalysisTaskPage.prototype._associateCommit): |
| (AnalysisTaskPage.prototype._dissociateCommit): |
| (AnalysisTaskPage.prototype._chartSelectionDidChange): |
| (AnalysisTaskPage.prototype._selectedRowInAnalysisResultsViewer): |
| * public/v3/pages/build-request-queue-page.js: |
| (BuildRequestQueuePage.prototype.open.): |
| (BuildRequestQueuePage.prototype.open): |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype.setOpenRepository): |
| (ChartPane.prototype._trendLineTypeDidChange): |
| (ChartPane.prototype._updateTrendLine): |
| * public/v3/pages/charts-page.js: |
| (ChartsPage.prototype.updateFromSerializedState): |
| (ChartsPage.prototype._updateDomainsFromSerializedState): |
| (ChartsPage.prototype.setNumberOfDaysFromToolbar): |
| (ChartsPage.prototype._didMutatePaneList): |
| (ChartsPage.prototype.render): |
| * public/v3/pages/charts-toolbar.js: |
| (ChartsToolbar.prototype.render): |
| * public/v3/pages/create-analysis-task-page.js: |
| (CreateAnalysisTaskPage.prototype.updateFromSerializedState): |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype.updateFromSerializedState): |
| (DashboardPage.prototype._fetchedData): |
| * public/v3/pages/heading.js: |
| (Heading.prototype.render): |
| * public/v3/pages/page-with-heading.js: |
| (PageWithHeading.prototype.render): |
| * public/v3/pages/page.js: |
| (Page.prototype.open): |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype.open): |
| (SummaryPage.prototype.this._renderQueue.push): |
| (SummaryPage): |
| (SummaryPage.prototype._renderCell): |
| |
| 2017-01-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Outliers are not hidden in v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=166966 |
| |
| Reviewed by Andreas Kling. |
| |
| Fixed the typo in addToSeries. An outlier has markedOutlier set to true, not isOutlier. |
| |
| Also fixed a bug unveiled by new tests in MeasurementRootSet.ensureSingleton. It was was creating |
| a new MeasurementRootSet each time it was called instead of finding an existing instance. Fixed the bug |
| by merging the static maps of MeasurementRootSet and RootSet. |
| |
| * public/v3/models/measurement-cluster.js: |
| (MeasurementCluster.prototype.addToSeries): Fixed the bug. |
| * public/v3/models/root-set.js: |
| (MeasurementRootSet.prototype.namedStaticMap): Added. |
| (MeasurementRootSet.prototype.ensureNamedStaticMap): Added. |
| (MeasurementRootSet.namedStaticMap): Added. |
| (MeasurementRootSet.ensureNamedStaticMap): Added. |
| * unit-tests/measurement-set-tests.js: Added tests for adopting time series data from a cluster. |
| |
| 2017-01-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Hide the UI to trigger an A/B testing when there are no triggerables |
| https://bugs.webkit.org/show_bug.cgi?id=166964 |
| |
| Reviewed by Yusuke Suzuki. |
| |
| Hide the "Start A/B Testing" button on analysis task pages instead of showing it and failing later |
| when the user tries to create one it with a TriggerableNotFound error. |
| |
| Added the list of triggerables to the manifest JSON so that we can determine this condition without |
| having to fetch /api/triggerable for each analysis task as done in v2 UI. |
| |
| * public/admin/reprocess-report.php: |
| * public/api/manifest.php: |
| * public/api/report.php: |
| * public/include/admin-header.php: |
| * public/include/manifest-generator.php: Moved from public/include/manifest.php. |
| (ManifestGenerator::generate): |
| (ManifestGenerator::triggerables): Added. Include the list of repositories this triggerable accepts |
| as well as the list of (test, platform) pairs on which this triggerable is available. |
| Use [testId, platformId] instead of a dictionary to reduce the file size. |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm): Removed this._disabled. This variable was used in TestGroupFrom to |
| disable the "Start A/B Testing" button when no range is selected but this ended up racy. Compute |
| the visibility of the button in render() function instead. |
| (CustomizableTestGroupForm.prototype.setRootSetMap): |
| (CustomizableTestGroupForm.prototype._submitted): |
| (CustomizableTestGroupForm.prototype.render): Hide the customize link and the button as needed. |
| The "Start A/B Testing" button must be hidden when either no range is selected or no title is typed. |
| "Customize" button must be hidden when no range is selected. |
| * public/v3/components/test-group-form.js: |
| (TestGroupForm): Removed _disabled since it's no longer used. |
| (TestGroupForm.prototype.setDisabled): Ditto. |
| (TestGroupForm.prototype.render): Ditto. |
| * public/v3/index.html: Include triggerable.js. |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest): Modernized. Create Triggerable objects from the manifest JSON. |
| * public/v3/models/triggerable.js: Added. |
| (Triggerable): Add this triggerable object to the static map of (test id, platform id) pair. |
| (Triggerable.prototype.acceptedRepositories): Added. |
| (Triggerable.findByTestConfiguration): Added. Finds a triggerable in the aforementioned static map. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane.prototype._updateStatus): Added. Re-render the page since time series data |
| points that were previously not available may have become available. The lack of this update was |
| causing a race condition in which the "Start A/B Testing" button for the charts is disabled even |
| after a group name had been specified because setRootSetMap was never called with a valid set. |
| (AnalysisTaskPage): Added this._triggerable. |
| (AnalysisTaskPage.prototype._didFetchTask): Find the triggerable now that we've fetched the task. |
| (AnalysisTaskPage.prototype.render): Hide the group view (the table of A/B testing results) entirely |
| when there are no groups to show. Also hide the forms to start A/B testing when there are no matching |
| triggerable, which is the main feature of this patch. |
| * server-tests/api-manifest.js: Added a test for including a list of triggerables in the manifest JSON. |
| * server-tests/resources/mock-data.js: |
| (MockData.resetV3Models): Reset Triggerable's static map. |
| * server-tests/tools-buildbot-triggerable-tests.js: Assert that Triggerable objects are constructed |
| with appropriate list of repositories and (test, platform) associations. |
| * tools/js/database.js: |
| (tableToPrefixMap): Added triggerable_repositories's prefix. |
| * tools/js/remote.js: |
| (RemoteAPI.prototype.getJSON): Log the entire response to stderr when JSON.parse fails to aid debugging. |
| * tools/js/v3-models.js: Import triggerable.js. |
| |
| 2017-01-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| fetch-from-remote doesn’t work with some websites |
| https://bugs.webkit.org/show_bug.cgi?id=166963 |
| |
| Reviewed by Yusuke Suzuki. |
| |
| Apparently file_get_contents is not compatible with some SSL/TLS connections. |
| Use curl_* functions to access remote servers instead. |
| |
| * public/admin/fetch-from-remote.php: |
| (fetch_remote): |
| |
| 2017-01-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix. Always use UTC when expressing commit times in UNIX-epoch timestamps. |
| |
| * public/api/measurement-set.php: |
| |
| 2017-01-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo in the previous commit. |
| |
| * public/api/measurement-set.php: |
| |
| 2017-01-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fixes for older versions of Postgres. |
| |
| Also redirect / and /# to /v3/ as intended in r200820. |
| |
| * public/api/measurement-set.php: |
| * public/api/runs.php: |
| * public/index.html: |
| |
| 2016-10-18 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Update test cases for change r206465. |
| https://bugs.webkit.org/show_bug.cgi?id=163618 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Update test case for change r206465 which added support for multiple summary pages. |
| Use deepStrictEqual instead of deepEqual as deepEqual will not complain in the case like 'deepEqual([],{})'. |
| Fix a test failure in tools-buildbot-triggerable-tests.js. |
| Fix a bug in generating manifest. |
| |
| * config.json: |
| * public/include/manifest.php: |
| * server-tests/api-manifest.js: |
| (TestServer.remoteAPI.getJSON.string_appeared_here.then): |
| * server-tests/tools-buildbot-triggerable-tests.js: |
| (then): |
| |
| 2016-09-27 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Extend perf dashboard to support multiple summary pages. |
| https://bugs.webkit.org/show_bug.cgi?id=162594 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Start support multiple summary pages instead of one. |
| Specify 'summaryPages' as key that map to a list of summaries which follows |
| current 'summary' format in 'config.json' but with 2 more properties: |
| 'name': specifying the name shows on perf dashboard, |
| 'route': specifying the path to this page. |
| |
| * public/include/manifest.php: |
| * public/v3/main.js: |
| (main): |
| (main.): Deleted. |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest): |
| (Manifest): |
| * public/v3/pages/summary-page.js: |
| (SummaryPage): |
| (SummaryPage.prototype.routeName): |
| |
| 2016-08-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Don't filter out the latest data point in chart data sampling |
| https://bugs.webkit.org/show_bug.cgi?id=160714 |
| |
| Reviewed by Chris Dumez. |
| |
| Exclude the last data point from sampling so that it's always included in the "sampled" charts data. |
| Without this, the last data point can change as we zoom out the time domain. |
| |
| Luckily, we already had a mechanism to exclude the user selected point from sampling. Extend this |
| feature by supporting an array of point IDs instead of a single ID to exclude from filering. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype._sampleTimeSeries): Replaced exclusionPointID by excludedPoints. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype._ensureSampledTimeSeries): Put the last data point in excludedPoints. |
| (TimeSeriesChart.prototype._sampleTimeSeries): Check point's id against the list of IDs. |
| |
| 2016-08-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r204187. interval has to be a getter, not a method. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype._renderTimeSeries): |
| * public/v3/models/measurement-adaptor.js: |
| (MeasurementAdaptor.prototype.applyTo): |
| |
| 2016-08-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo that was supposed to be fixed in r204296 before landing. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane): |
| (ChartPane.prototype.updateFromSerializedState): |
| (ChartPane.prototype._analyzeRange): |
| (ChartPane.prototype._renderTrendLinePopover): |
| (ChartPane.prototype._trendLineTypeDidChange): |
| |
| 2016-08-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Always show segmentation on v3 charts page |
| https://bugs.webkit.org/show_bug.cgi?id=160576 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Added "Trend Lines" popover to select and customize a moving average or a segmentation to show on charts page |
| and made Schwarz criterion segmentation the default trend line for all charts. |
| |
| Because computing the segmentation is expensive, we use WebWorker to parallelize the computation via AsyncTask. |
| We also compute and cache the segmentation for each cluster separately to avoid processing the entire measurement |
| set as that could take 10-20s total, which was a huge problem in v2 UI. v3 UI's approach is more incremental and |
| even opens up an opportunity to cache the results in the server side. |
| |
| Also brought back "shading" for the confidence interval drawing as done in v1 and v2 UI. |
| |
| * public/shared/statistics.js: |
| (Statistics.segmentTimeSeriesByMaximizingSchwarzCriterion): Added segmentCountWeight and gridSize as arguments |
| to customize the algorithm. |
| (Statistics.splitIntoSegmentsUntilGoodEnough): Takes segmentCountWeight as BirgeAndMassartC. |
| |
| * public/v3/async-task.js: Added. |
| (AsyncTask): Added. This class represents a task such as computing segmentation to be executed in a worker. |
| (AsyncTask.prototype.execute): Added. Returns a promise that gets resolved when the specified task completes. |
| (AsyncTaskWorker.waitForAvailableWorker): Added. Calls the given callback with the first available worker. When |
| all workers are processing some tasks, it waits until one becomes available by putting the callback into a queue. |
| _didRecieveMessage pops an item out of this queue when a worker completes a task. We don't use a promise here |
| because calling this function multiple times synchronously could result in all the returned promises getting |
| resolved with the same worker as none of the callers get to lock away the first available worker until the end |
| of the current micro-task. |
| (AsyncTaskWorker._makeWorkerEventuallyAvailable): Added. A helper function for waitForAvailableWorker. Start |
| a new worker if the number of workers we've started is less than the number of extra cores (e.g. 7 if there are |
| 8 cores on the machine). Avoid starting a new worker if we've started a new worker within the last 50 ms since |
| starting a new worker takes some time. |
| (AsyncTaskWorker._findAvailableWorker): Added. Finds a worker that's available right now if there is any. |
| (AsyncTaskWorker): Added. An instance of AsyncTaskWorker represents a Web worker. |
| (AsyncTaskWorker.prototype.id): Added. |
| (AsyncTaskWorker.prototype.sendTask): Added. Sends a task represented by AsyncTask to the worker. |
| (AsyncTaskWorker.prototype._didRecieveMessage): Added. This function gets called when the current task completes |
| in the worker. Pop the next callback if some caller of waitForAvailableWorker is still waiting. Otherwise stop |
| the worker after one second of waiting to avoid worker churning. |
| (AsyncTaskWorker.workerDidRecieveMessage): Added. Called by onmessage on the worker. Executes the specified task |
| and sends back a message upon completion with the appropriate timing data. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.configure): Uses _createSourceList. |
| (ChartPaneBase.prototype._createSourceList): Added. Extracted from configure to customize the source list for |
| the main chart and the overview chart. |
| (ChartPaneBase.prototype._updateSourceList): Uses _createSourceList. |
| |
| * public/v3/components/chart-styles.js: |
| (ChartStyles.createSourceList): Added a boolean showPoint as an extra argument. This specifies whether circles |
| are drawn for each data point. |
| (ChartStyles.baselineStyle): Added styles for foreground lines and background lines. They're used for trend lines |
| and underlying raw data respectively when trend lines are shown. |
| (ChartStyles.targetStyle): Ditto. |
| (ChartStyles.currentStyle): Ditto. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart): Added _trendLines, _renderedTrendLines, and _fetchedTimeSeries as instance variables. |
| (TimeSeriesChart.prototype.setSourceList): Clear _fetchedTimeSeries before calling setSourceList for consistency. |
| (TimeSeriesChart.prototype.sourceList): Added. |
| (TimeSeriesChart.prototype.clearTrendLines): Added. |
| (TimeSeriesChart.prototype.setTrendLine): Added. Preserves the existing trend lines for other sources. This is |
| necessary because segmentation for "current" and "baseline" lines may become available at different times, and we |
| don't want to clear one or the other when setting one. |
| (TimeSeriesChart.prototype._layout): Added a call to _ensureTrendLines. |
| (TimeSeriesChart.prototype._renderChartContent): Call _renderTimeSeries for trend lines. Trend lines are always |
| foreground lines and "regular" raw data points are drawn as background if there are trend lines. |
| (TimeSeriesChart.prototype._renderTimeSeries): Added layerName as an argument. It could be an empty string, |
| "foreground", or "background". Draw a "shade" just like v1 and v2 UI instead of vertical lines for the confidence |
| intervals. Pick "foreground", "background", or "regular" chart style based on layerName. Also avoid drawing data |
| points when *PointRadius is set to zero to reduce the runtime of this function. |
| (TimeSeriesChart.prototype._sourceOptionWithFallback): Added. |
| (TimeSeriesChart.prototype._ensureSampledTimeSeries): When *PointRadius is 0, show as many points as there are x |
| coordinates as a fallback instead of showing every point. |
| (TimeSeriesChart.prototype._ensureTrendLines): Added. Returns true if the chart contents haven't been re-rendered |
| since the last update to trend lines. This flag is unset by setTrendLine. |
| |
| * public/v3/index.html: |
| |
| * public/v3/models/measurement-cluster.js: |
| (MeasurementCluster.prototype.addToSeries): Store the data points' index to idMap to help aid MeasurementSet's |
| _cachedClusterSegmentation efficiently re-create the segmentation from the cache. |
| |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet): Added _segmentationCache as an instance variable. |
| (MeasurementSet.prototype.fetchSegmentation): Added. Calls _cachedClusterSegmentation on each cluster, and |
| constructs the time series representation of the segmentation from the results. |
| (MeasurementSet.prototype._cachedClusterSegmentation): Computes and caches the segmentation for each cluster. |
| The cache of segmentation stores ID of each measurement set at which segment changes instead of its index since |
| the latter could change in any moment when a new test result is reported, or an existing test result is removed |
| from the time series; e.g. when it's marked as an outlier. |
| (MeasurementSet.prototype._validateSegmentationCache): Added. Checks whether the cached segmentation's name and |
| its parameters match that of the requested one. |
| (MeasurementSet.prototype._invokeSegmentationAlgorithm): Added. Invokes the segmentation algorithm either in the |
| main thread or in a Web worker via AsyncTask API based on the size of the time series. While parallelizing the |
| work is beneficial when the data set is large, the overhead can add up if we keep processing a very small data |
| set in a worker. |
| |
| * public/v3/models/time-series.js: Made the file compatible with Node. |
| (TimeSeries.prototype.length): Added. |
| (TimeSeries.prototype.valuesBetweenRange): Added. |
| |
| * public/v3/pages/chart-pane.js: |
| (createTrendLineExecutableFromAveragingFunction): Added. |
| (ChartTrendLineTypes): Added. Similar to StatisticsStrategies (statistics-strategies.js) in v2 UI. |
| (ChartPane): Added _trendLineType, _trendLineParameters, _trendLineVersion, and _renderedTrendLineOptions as |
| instance variables. |
| (ChartPane.prototype.serializeState): Serialize the trend line option. This format is compatible with v2 UI. |
| (ChartPane.prototype.updateFromSerializedState): Ditto. Parsing is compatible with v2 UI except that we now have |
| the default trend line set when the specified ID doesn't match an existing type ID. |
| (ChartPane.prototype._renderActionToolbar): Added a call to _renderTrendLinePopover. This is the popover that |
| specifies the type of a trend line to show as well as its parameters. |
| (ChartPane.prototype._renderTrendLinePopover): Added. A popover for specifying and customizing a trend line. |
| (ChartPane.prototype._trendLineTypeDidChange): Added. Called when a new trend line is selected. |
| (ChartPane.prototype._defaultParametersForTrendLine): Added. |
| (ChartPane.prototype._trendLineParameterDidChange): Added. Called when the trend lines' parameters are changed. |
| (ChartPane.prototype._didFetchData): Added. Overrides the one in ChartPaneBase to trigger a trend line update. |
| (ChartPane.prototype._updateTrendLine): Added. Update the trend line. Since segmentation can take an arbitrary |
| long time, avoid updating trend lines if this function had been called again (possibly for a different trend line |
| type or with different parameters) before the results become available; hence the versioning. |
| (ChartPane.paneHeaderTemplate): Added the trend line popover. |
| (ChartPane.cssTemplate): Added styles for the trend line popover. Also use a more opaque background color behind |
| popovers when the -webkit-backdrop-filter property is not supported. |
| |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype._createChartForCell): Call createSourceList with showPoints set to true to preserve the |
| existing behavior. |
| |
| * tools/js/v3-models.js: Include TimeSeries object. |
| |
| * unit-tests/measurement-set-tests.js: Added two test cases for MeasurementSet's fetchSegmentation. |
| |
| * unit-tests/resources/almost-equal.js: Added. |
| (almostEqual): Extracted out of statistics-tests.js. |
| |
| * unit-tests/statistics-tests.js: |
| |
| 2016-08-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| segmentTimeSeriesByMaximizingSchwarzCriterion returns a bogus result on empty charts |
| https://bugs.webkit.org/show_bug.cgi?id=160575 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| The bug was caused by an early return in segmentTimeSeriesByMaximizingSchwarzCriterion. |
| Removed this early return as the one in splitIntoSegmentsUntilGoodEnough was sufficient. |
| |
| Also factored out a few functions in findOptimalSegmentation so that they can be better |
| optimized in JSC's DFG and FTL tiers, and removed unused debuggingTestingRangeNomination. |
| |
| * public/shared/statistics.js: |
| (Statistics.segmentTimeSeriesByMaximizingSchwarzCriterion): Removed an early return. |
| (Statistics.splitIntoSegmentsUntilGoodEnough): |
| (.allocateCostUpperTriangularForSegmentation): Extracted from findOptimalSegmentation. |
| (.allocatePreviousNodeForSegmentation): Ditto. |
| (.findOptimalSegmentationInternal): Ditto. |
| (.findOptimalSegmentation): |
| |
| * unit-tests/statistics-tests.js: Added a test case. |
| |
| 2016-08-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard sometimes tries to fetch a non-existent measurement-set JSON |
| https://bugs.webkit.org/show_bug.cgi?id=160577 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| The bug was caused by findClusters computing the first cluster's endTime incorrectly. Namely, we were |
| multiplying the number of clusters by clusterStart instead of clusterSize with an off-by-one error. |
| |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet.prototype.findClusters): Folded computeClusterStart into where clusterEnd is computed |
| for clarity. Also fixed a bug that we were not computing the first cluster to fetch correctly when |
| the fetched time range started before clusterStart (i.e. when startTime - clusterStart is negative). |
| Finally, fixed the main bug by multiplying the number of clusters by clusterSize instead of |
| clusterStart to compute the end time of the very first cluster in this measurement set. Because what |
| we're computing here is the end time of the first cluster, not the start time, we also need to subtract |
| one from the number of clusters. e.g. if there was exactly one cluster, then firstClusterEndTime is |
| identically equal to lastClusterEndTime. |
| (MeasurementSet.prototype.fetchedTimeSeries): Removed the unused argument to TimeSeries's constructor. |
| |
| * unit-tests/analysis-task-tests.js: Fixed the tests for the latest version of Mocha which complains if |
| we returned a promise in unit tests when "done" function is used. |
| * unit-tests/checkconfig.js: Ditto. |
| * unit-tests/measurement-set-tests.js: Added a test case for findClusters and a test to make sure |
| fetchBetween doesn't try to fetch a cluster before the first cluster in the set. Also fixed other test |
| cases which were relying on the bug this patch fixed. |
| |
| 2016-08-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| MeasurementCluster's addToSeries is slow |
| https://bugs.webkit.org/show_bug.cgi?id=160581 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| The bulk of time was spent in MeasurementAdaptor.prototype.applyTo where we computed the interval. |
| |
| Since some of data points are filtered out by TimeSeriesChart component before intervals are used, |
| we can significantly reduce the CPU time by lazily compute them. This patch reduces the runtime of |
| applyTo from ~60ms to ~30ms on my machine. |
| |
| * public/v3/models/measurement-adaptor.js: |
| (MeasurementAdaptor.prototype.applyTo): Lazily compute and cache the interval. Also cache the build |
| object instead of always creating a new object. |
| * public/v3/models/measurement-cluster.js: |
| (MeasurementCluster.prototype.addToSeries): Call applyTo first before checking whether the point is |
| an outlier or its id to avoid extracting those values twice since they show up in the profiler. Also |
| use "of" instead "forEach" since "of" seems to be faster here. |
| |
| 2016-08-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Syncing script's configuration duplicates a lot of boilerplate |
| https://bugs.webkit.org/show_bug.cgi?id=160574 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| This patch makes each configuration accept an array of platforms and types so that we can write: |
| |
| {"type": "speedometer", "builder": "mba", "platform": "Trunk El Capitan MacBookAir"}, |
| {"type": "speedometer", "builder": "mbp", "platform": "Trunk El Capitan MacBookPro"}, |
| {"type": "speedometer", "builder": "mba", "platform": "Trunk Sierra MacBookAir"}, |
| {"type": "speedometer", "builder": "mbp", "platform": "Trunk Sierra MacBookPro"}, |
| {"type": "jetstream", "builder": "mba", "platform": "Trunk El Capitan MacBookAir"}, |
| {"type": "jetstream", "builder": "mbp", "platform": "Trunk El Capitan MacBookPro"}, |
| {"type": "jetstream", "builder": "mba", "platform": "Trunk Sierra MacBookAir"}, |
| {"type": "jetstream", "builder": "mbp", "platform": "Trunk Sierra MacBookPro"}, |
| |
| more concisely as: |
| |
| {"builder": "mba", "types": ["speedometer", "jetstream"], |
| "platforms": ["Trunk El Capitan MacBookAir", "Trunk Sierra MacBookAir"]}, |
| {"builder": "mbp", "types": ["speedometer", "jetstream"], |
| "platforms": ["Trunk El Capitan MacBookPro", "Trunk Sierra MacBookPro"]}, |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer._loadConfig): |
| (BuildbotSyncer._expandTypesAndPlatforms): Added. Clones a new configuration entry for each type |
| and platform. |
| (BuildbotSyncer._createTestConfiguration): Extracted from _loadConfig. |
| (BuildbotSyncer._validateAndMergeConfig): Added a new argument that specifies a property that |
| shouldn't be merged into the configuration. Also added the support for 'types' and 'platforms', |
| and merged the code for verify an array of strings. Finally, allow the appearance of 'properties' |
| since this function can now be called on a cloned configuration in which 'arguments' had already |
| been renamed to 'properties'. |
| |
| * unit-tests/buildbot-syncer-tests.js: Added a test case to parse a consolidated configuration. |
| (sampleiOSConfigWithExpansions): Added. |
| |
| * unit-tests/resources/mock-v3-models.js: |
| (MockModels.inject): Added a few more mock models for the newly added test. |
| |
| 2016-07-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION: Tooltip for analysis tasks doesn't show up on charts |
| https://bugs.webkit.org/show_bug.cgi?id=160221 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| The bug was caused by ChartPaneBase resetting annotation bars every time the current point has moved. |
| Avoid doing this in ChartPaneBase's _renderAnnotations(). |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase): |
| (ChartPaneBase.prototype.fetchAnalysisTasks): |
| (ChartPaneBase.prototype._renderAnnotations): |
| |
| 2016-07-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION: The arrow indicating the current page doesn't get updated |
| https://bugs.webkit.org/show_bug.cgi?id=160185 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by Heading's render() function not updating the DOM more than once. I don't understand |
| how this has ever worked. Fixed the bug by rendering DOM whenever the current page has changed. |
| |
| * public/v3/pages/heading.js: |
| (Heading): |
| (Heading.prototype.render): |
| |
| 2016-07-25 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix for Safari 9. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.waitingTime): Don't use "const" in strict mode. |
| |
| 2016-07-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should show the list of a pending A/B testing jobs |
| https://bugs.webkit.org/show_bug.cgi?id=160138 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Add a page to show the list of A/B testing build requests per triggerable. Ideally, we would like to |
| see a queue per builder but that would require changes to database tables and syncing scripts. |
| |
| Because this page is most useful when the analysis task with which each build request is associated, |
| JSON API at /api/build-requests/ has been modified to return the analysis task ID for each request. |
| |
| Also streamlined the page that shows the list of analysis tasks per Chris' feedback by consolidating |
| "Bisecting" and "Identified" into "Investigated" and moving the toolbar from the upper left corner |
| inside the heading to right beneath the heading above the table. Also made the category page serialize |
| the filter an user had typed in so that reloading the page doesn't clear it. |
| |
| * public/api/analysis-tasks.php: |
| (fetch_associated_data_for_tasks): Removed 'category' from the list of columns returned as the notion |
| of 'category' is only relevant in UI, and it's better computed in the front-end. |
| (format_task): Ditto. |
| (determine_category): Deleted. |
| |
| * public/api/test-groups.php: |
| (main): |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::fetch_for_task): Include the analysis task ID in the rows. |
| (BuildRequestsFetcher::fetch_for_group): Ditto. Ditto. |
| (BuildRequestsFetcher::fetch_incomplete_requests_for_triggerable): Ditto. |
| (BuildRequestsFetcher::results_internal): Ditto. |
| |
| * public/v3/index.html: |
| |
| * public/v3/main.js: |
| (main): Create a newly introduced BuildRequestQueuePage as a subpage of AnalysisCategoryPage. |
| |
| * public/v3/components/ratio-bar-graph.js: |
| (RatioBarGraph.prototype.update): Fixed a bogus assertion here. ratio can be any number. The coercion |
| into [-1, 1] is done inside RatioBarGraph's render() function. |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.prototype.category): Moved the code to compute the analysis task's category from |
| determine_category in analysis-tasks.php. Also merged "bisecting" and "identified" into "investigated". |
| (AnalysisTask.categories): Merged "bisecting" and "identified" into "investigated". |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest): Remember the triggerable and the analysis task associated with this request as well as |
| the time at when this request was created. |
| (BuildRequest.prototype.analysisTaskId): Added. |
| (BuildRequest.prototype.statusLabel): Use a shorter label: "Waiting" for "pending" status. |
| (BuildRequest.prototype.createdAt): Added. |
| (BuildRequest.prototype.waitingTime): Added. Returns a human readable time duration since the creation |
| of this build request such as "2 hours 21 minutes" against a reference time. |
| (BuildRequest.fetchTriggerables): Added. |
| (BuildRequest.cachedRequestsForTriggerableID): Added. Used when navigating back to |
| |
| * public/v3/pages/analysis-category-page.js: |
| (AnalysisCategoryPage): Construct AnalysisCategoryToolbar and store it in this._categoryToolbar since it |
| no longer inherits from Toolbar class, which PageWithHeading recognizes and stores. |
| (AnalysisCategoryPage.prototype.title): |
| (AnalysisCategoryPage.prototype.serializeState): Added. |
| (AnalysisCategoryPage.prototype.stateForCategory): Added. Include the filter in the serialization. |
| (AnalysisCategoryPage.prototype.updateFromSerializedState): Restore the filter from the URL state. |
| (AnalysisCategoryPage.prototype.filterDidChange): Added. Called by AnalysisCategoryToolbar to update |
| the URL state in addition to calling render() as done previously via setFilterCallback. |
| (AnalysisCategoryPage.prototype.render): Always call _categoryToolbar.render() since the hyperlinks for |
| the category pages now include the filter, which can be updated in each call. |
| (AnalysisCategoryPage.cssTemplate): |
| |
| * public/v3/pages/analysis-category-toolbar.js: |
| (AnalysisCategoryToolbar): Inherits from ComponentBase instead of Toolbar since AnalysisCategoryToolbar |
| no longer works with Heading class unlike other subclasses of Toolbar class. |
| (AnalysisCategoryToolbar.prototype.setCategoryPage): Added. |
| (AnalysisCategoryToolbar.prototype.setFilterCallback): Deleted. |
| (AnalysisCategoryToolbar.prototype.setFilter): Added. Used to restore from a serialized URL state. |
| (AnalysisCategoryToolbar.prototype.render): Don't recreate the input element as it clears the value as |
| well as the selection of the element. Also use AnalysisCategoryPage's stateForCategory to serialize the |
| category name and the current filter for each hyperlink. |
| (AnalysisCategoryToolbar.prototype._filterMayHaveChanged): Now takes an boolean argument specifying |
| whether the URL state should be updated or not. We update the URL only when a change event is fired to |
| avoid constantly updating it while an user is still typing. |
| (AnalysisCategoryToolbar.cssTemplate): Added. |
| (AnalysisCategoryToolbar.htmlTemplate): Added a button to open the newly added queue page. |
| |
| * public/v3/pages/build-request-queue-page.js: |
| (BuildRequestQueuePage): Added. |
| (BuildRequestQueuePage.prototype.routeName): Added. |
| (BuildRequestQueuePage.prototype.pageTitle): Added. |
| (BuildRequestQueuePage.prototype.open): Added. Fetch open build requests for every triggerables using |
| the same API as the syncing scripts. |
| (BuildRequestQueuePage.prototype.render): Added. |
| (BuildRequestQueuePage.prototype._constructBuildRequestTable): Added. Construct a table for the list of |
| pending, scheduled or running build requests in the order syncing scripts would see. Note that the list |
| of build requests returned by /api/build-requests/* can contain completed, canceled, or failed requests |
| since the JSON returns all build requests associated with each test group if one of the requests of the |
| group have not finished. This helps syncing scripts picking the right builder for A/B testing when it |
| had previously been unloaded or crashed in the middle of processing a test group. This characteristics |
| of the API actually helps us here because we can reliably compute the total number of build requests in |
| the group. The first half of this function does this counting as well as collapses all but the first |
| unfinished build requests into a "contraction" row, which just shows the number of build requests that |
| are remaining in the group. |
| (BuildRequestQueuePage.cssTemplate): Added. |
| (BuildRequestQueuePage.htmlTemplate): Added. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype.open): Use one-day median instead of seven-day median to compute the status. |
| (SummaryPageConfigurationGroup): Initialize _ratio to NaN. This was causing assertion failures in |
| RatioBarGraph's update() while measurement sets are being fetched. |
| |
| * server-tests/api-build-requests-tests.js: Updated the tests per change in BuildRequest's statusLabel. |
| * unit-tests/analysis-task-tests.js: Ditto. |
| * unit-tests/test-groups-tests.js: Ditto. |
| * unit-tests/build-request-tests.js: Added tests for BuildRequest's waitingTime. |
| |
| 2016-07-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION(r203035): Marking points as an outlier no longer updates charts |
| https://bugs.webkit.org/show_bug.cgi?id=160106 |
| |
| Reviewed by Darin Adler. |
| |
| The bug was caused by MeasurementSet's fetchBetween clearing previously registered callbacks when noCache |
| option is specified. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype.setSourceList): Clear this._fetchedTimeSeries when changing chart options. |
| e.g. need to start including or excluding outliers. |
| (TimeSeriesChart.prototype.fetchMeasurementSets): Don't skip the fetching when noCache is true. |
| |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet): Added this._callbackMap as an instance variable to keep track of all callbacks on every |
| cluster since we may need to call each callback multiple times per cluster when noCache option is used. |
| (MeasurementSet.prototype.fetchBetween): Moved the code to add _primaryClusterPromise to _allFetches here |
| so that now this function and _ensureClusterPromise are only functions that touch _allFetches. |
| (MeasurementSet.prototype._ensureClusterPromise): Extracted out of fetchBetween. Queue up all callbacks |
| for each cluster when creating a new promise. |
| (MeasurementSet.prototype._fetchPrimaryCluster): Removed the code to add _primaryClusterPromise now that |
| it's done in fetchBetween. |
| |
| * public/v3/remote.js: |
| (RemoteAPI.postJSONWithStatus): Removed superfluous call to console.log. |
| |
| * unit-tests/measurement-set-tests.js: Updated the test case for noCache. The callback registered before |
| fetchBetween is called with noCache=true is now invoked so callCount must be 3 instead of 2. |
| |
| 2016-07-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard always re-generate measurement set JSON |
| https://bugs.webkit.org/show_bug.cgi?id=159951 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by manifest.json reporting the last modified date of a measurement set in floating point, |
| and a measurement set JSON reporting it as an integer. Fixed the bug by always using an integer. |
| |
| * public/api/measurement-set.php: |
| (main): Return 404 when the results is empty. |
| (MeasurementSetFetcher::execute_query): Use "extract(epoch from commit_time)" like ManifestGenerator to improve |
| the generation speed. This is ~10% runtime improvement. |
| (MeasurementSetFetcher::format_map): Updated to reflect the above change. |
| (MeasurementSetFetcher::parse_revisions_array): Ditto. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::platforms): Fixed the bug by coercing lastModified to integer (instead of float). |
| |
| * server-tests/api-measurement-set-tests.js: Added a test case for returning empty results, and a test case for |
| making sure lastModified dates in manifest.json and measurement sets match. |
| |
| * tools/js/remote.js: |
| (RemoteAPI.prototype.sendHttpRequest): Reject the promise when HTTP status code is not 200. |
| |
| 2016-07-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard can consume 50-70% of CPU on MacBook even if user is not interacting at all |
| https://bugs.webkit.org/show_bug.cgi?id=159597 |
| |
| Reviewed by Chris Dumez. |
| |
| TimeSeriesChart and InteractiveTimeSeriesChart had been relying on continually polling on requestAnimationFrame |
| to update itself in response to its canvas resizing. Even though there as an early exit in the case there was |
| nothing to update, this is still causing a significant power drain when the user is not interacting at all. |
| |
| Let TimeSeriesChart use the regular top-down render path like other components with exceptions of listening to |
| window's resize eventas well as when new JSONs are fetched from the server. The render() call to the latter case |
| will be coerced into a single callback on requestAnimationFrame to avoid DOM-mutation-layout churn. |
| |
| * public/v3/components/base.js: |
| (ComponentBase.isElementInViewport): Deleted. |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.render): Enqueue charts to render. |
| * public/v3/components/chart-styles.js: |
| (ChartStyles.dashboardOptions): Removed updateOnRequestAnimationFrame which is no longer an available option. |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart): Replaced the code to register itself for rAF by the code to listen to resize events on window. |
| (TimeSeriesChart._updateOnRAF): Deleted. |
| (TimeSeriesChart._updateAllCharts): Added. |
| (TimeSeriesChart.prototype._enqueueToRender): Added. |
| (TimeSeriesChart._renderEnqueuedCharts): Added. |
| (TimeSeriesChart.prototype.fetchMeasurementSets): Avoid calling fetchBetween when the range had been fetched. |
| Without this change, we can incur a significant number of redundant calls to render() when adjusting the domain |
| in charts page by the slider. When no new JSON is fetched, simply enqueue this chart to render on rAF. |
| (TimeSeriesChart.prototype._didFetchMeasurementSet): Enqueue this chart to render on rAF. |
| (TimeSeriesChart.prototype.render): Removed the check for isElementInViewport since we no longer get render() call |
| when this chart moves into the viewport (as we no longer listen to every rAF or scroll event). |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet.prototype.hasFetchedRange): Fixed various bugs revealed by the new use in fetchMeasurementSets. |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView.prototype._updateRevisionListForNewCurrentRepository): Removed the dead code. It was probably |
| copied from when this code was in InteractiveTimeSeries chart. There is no this._forceRender in this component. |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype.render): Enqueue charts to render. |
| * public/v3/pages/heading.js: |
| (SummaryPage.prototype.open): Removed the call to isElementInViewport. This wasn't really doing anything useful in |
| this component. |
| * unit-tests/measurement-set-tests.js: Added tests for hasFetchedRange. |
| (.waitForMeasurementSet): Moved to be used in a newly added test case. |
| |
| 2016-07-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION: manifest.json generation takes multiple seconds on perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=159596 |
| |
| Reviewed by Chris Dumez. |
| |
| The most of CPU time was spent looking for a duplicate entry in an array of metrics by array_search. |
| This patch moves to postgres by using aggregate functions in the query. Also moved the code to convert |
| datetime to UNIX epoch timestamp from PHP to within postgres query. |
| |
| These improvements reduce total runtime of Manifest::generate from ~4s to ~350ms on my machine. |
| |
| * public/include/manifest.php: |
| (Manifest::generate): No longer fetches test_configurations table as this is done in Manifest::platforms now. |
| Also moved calls to each method in the class to separate lines for easier instrumentation. |
| (Manifest::platforms): Group test configurations (current, baseline, target) by platform and metric. |
| Use the max of the last modified dates in UNIX epoch timestamps (ms to be compatible with JS's representation). |
| A given platform, metric pair is considered to be in the v1 dashboard if any test configuration is in. |
| |
| 2016-07-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| bundle-v3-scripts.py should compress HTML/CSS templates |
| https://bugs.webkit.org/show_bug.cgi?id=159582 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Strip leading and trailing whitespaces from HTML and CSS templates. This is a 8% progression on the file size. |
| |
| * Install.md: Updated the list of MIME types to apply deflate for newer versions of Apache. |
| * tools/bundle-v3-scripts.py: |
| (main): |
| (compress_template): Added. |
| |
| 2016-06-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Strip out "use strict" everywhere so that the perf dashboard works on the shipping Safari. |
| |
| * tools/bundle-v3-scripts.py: |
| (main): |
| |
| 2016-06-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Invalid token error when trying to create an A/B analysis for a range |
| https://bugs.webkit.org/show_bug.cgi?id=158679 |
| |
| Reviewed by Chris Dumez. |
| |
| The problem in this particular case was due to another website overriding cookies for our subdomain. |
| Make PrivilegedAPI robust against its token becoming invalid in general to fix the bug since the cookie |
| is only available under /privileged-api/ and the v3 UI can't access it for security reasons. |
| |
| This patch factors out PrivilegedAPI out of remote.js so that it can be tested separately in server tests |
| as well as unit tests even though RemoteAPI itself is implemented differently in each case. |
| |
| * init-database.sql: Added a forgotten default value "false" to run_marked_outlier. |
| * public/v3/index.html: |
| * public/v3/privileged-api.js: Added. Extracted out of public/v3/remote.js. |
| (PrivilegedAPI.sendRequest): Fixed the bug. When the initial request fails with "InvalidToken" error, |
| re-generate the token and re-issue the request. |
| (PrivilegedAPI.requestCSRFToken): |
| * public/v3/remote.js: |
| (RemoteAPI.postJSON): Added to match tools/js/remote.js. |
| (RemoteAPI.postJSONWithStatus): Ditto. |
| (PrivilegedAPI): Moved to privileged-api.js. |
| * server-tests/api-measurement-set-tests.js: Removed the unused require for crypto. |
| * server-tests/privileged-api-upate-run-status.js: Added tests for /privileged-api/update-run-status. |
| * server-tests/resources/test-server.js: |
| (TestServer.prototype.inject): Clear the cookies as well as tokens in PrivilegedAPI. |
| * tools/js/remote.js: |
| (RemoteAPI): Added the support for PrivilegedAPI by making cookie set by the server persist. |
| (RemoteAPI.prototype.clearCookies): Added for tests. |
| (RemoteAPI.prototype.postJSON): Make sure sendHttpRequest always sends a valid JSON. |
| (RemoteAPI.prototype.postJSONWithStatus): Added since this API is used PrivilegedAPI. |
| (RemoteAPI.prototype.sendHttpRequest): Retain the cookie set by the server and send it back in each request. |
| * tools/js/v3-models.js: |
| * unit-tests/privileged-api-tests.js: Added unit tests for PrivilegedAPI. |
| * unit-tests/resources/mock-remote-api.js: |
| (MockRemoteAPI.postJSON): Added for unit testing. |
| (MockRemoteAPI.postJSONWithStatus): Ditto. |
| |
| 2016-06-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| /admin/tests is very slow |
| https://bugs.webkit.org/show_bug.cgi?id=158682 |
| |
| Reviewed by Chris Dumez. |
| |
| The slowness came from TestNameResolver::__construct, which was fetching the entire table of test_configurations, |
| which at this point contains more than 32,000 rows. Don't fetch the entire table in the constructor. Instead, |
| fetch a subset of rows as needed in configurations_for_metric_and_platform. Even though this results in many SQL |
| queries being issued, that's a lot more efficient in practice because we only fetch a few dozen rows in practice. |
| |
| Also removed a whole bunch of features from /admin/tests to simplify the page. In particular, the ability to update |
| the list of triggerables has been removed now that sync-buildbot.js automatically updates that for us. This removed |
| the last use of test_exists_on_platform, which was also dependent on fetching test_configurations upfront. |
| |
| * public/admin/tests.php: |
| * public/include/test-name-resolver.php: |
| (TestNameResolver::__construct): Don't fetch the entire table of test_configurations. |
| (TestNameResolver::configurations_for_metric_and_platform): Just issue a SQL query for the specified platform and metric. |
| (TestNameResolver::test_exists_on_platform): Removed. |
| |
| 2016-06-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| sync-buildbot.js should update the list of tests and platforms associated with a triggerable |
| https://bugs.webkit.org/show_bug.cgi?id=158406 |
| |
| Reviewed by Chris Dumez. |
| |
| Add /api/update-triggerable and a test for it, which were supposed to be added in r201718 |
| but for which I forgot to run svn add. |
| |
| * public/api/update-triggerable.php: Added. |
| (main): |
| * server-tests/api-update-triggerable.js: Added. |
| |
| 2016-06-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r201739. attachShadow was throwing an exception on this component. |
| |
| * public/v3/pages/analysis-category-toolbar.js: |
| (AnalysisCategoryToolbar): |
| |
| 2016-06-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| sync-buildbot.js should update the list of tests and platforms associated with a triggerable |
| https://bugs.webkit.org/show_bug.cgi?id=158406 |
| <rdar://problem/26185737> |
| |
| Reviewed by Darin Adler. |
| |
| Added /api/update-triggerable to update the list of configurations (platform and test pairs) |
| associated with a given triggerable, and make sync-buildbot.js use this JSON API before each |
| syncing cycle so that the association gets updated automatically by simply updating the JSON. |
| |
| * server-tests/api-manifest.js: Use const for imported modules. |
| * server-tests/api-report-commits-tests.js: Removed unnecessary importing of crypto. |
| * server-tests/resources/mock-data.js: |
| (MockData.someTestId): Added. |
| (MockData.somePlatformId): Added. |
| (MockData.addMockData): |
| * server-tests/tools-buildbot-triggerable-tests.js: Use const for imported modules. Also added |
| a test for BuildbotTriggerable's updateTriggerable. |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.updateTriggerable): Added. Find the list of all configurations |
| associated with this triggeerable and post it to /api/update-triggerable. |
| * tools/js/database.js: Added triggerable_configurations to the list of tables. |
| * tools/js/remote.js: |
| (RemoteAPI.prototype.postJSON): Print the whole response when JSON parsing fails for debugging. |
| * tools/sync-buildbot.js: |
| (syncLoop): Call BuildbotTriggerable's updateTriggerable before syncing. |
| |
| 2016-06-02 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r201564. |
| |
| * public/v3/pages/analysis-category-page.js: |
| (AnalysisCategoryPage.prototype.updateFromSerializedState): |
| * public/v3/pages/create-analysis-task-page.js: |
| (CreateAnalysisTaskPage.prototype.updateFromSerializedState): |
| (CreateAnalysisTaskPage.prototype.render): |
| |
| 2016-05-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI should support marking and unmarking outliers as well as hiding them |
| https://bugs.webkit.org/show_bug.cgi?id=158248 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Added the support for marking and unmarking a sequence of points as outliers. Unlike v2, we now support marking |
| multiple points as outliers in a single click. Also fixed a bug that outliers are never explicitly hidden in v3 UI. |
| |
| This patch splits ChartStyles.createChartSourceList into two functions: resolveConfiguration and createSourceList |
| to separate the work of resolving platform and metric IDs to their respective model objects, and creating a source |
| list used by TimeSeriesChart to fetch measurement sets. createSourceList is called again when filtering options are |
| changed. |
| |
| It also adds noCache option to TimeSeriesChart's fetchMeasurementSets, MeasurementSet's fetchBetween and |
| _fetchPrimaryCluster to update the measurement sets after marking or unmarking points as outliers. In addition, it |
| fixes a bug that the annotation bars for analysis tasks are not updated in charts page after creating an analysis |
| task by adding noCache option to ChartPaneBase's fetchAnalysisTasks, AnalysisTask's fetchByPlatformAndMetric and |
| _fetchSubset. |
| |
| Finally, this patch splits ChartPane._makeAnchorToOpenPane into _makePopoverActionItem, _makePopoverOpenOnHover and |
| _setPopoverVisibility for clarity. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase): Added _disableSampling and _showOutliers as instance variables. |
| (ChartPaneBase.prototype.configure): |
| (ChartPaneBase.prototype.isSamplingEnabled): Added. |
| (ChartPaneBase.prototype.setSamplingEnabled): Added. When a filtering option is updated, recreate the source list |
| so that TimeSeriesChart.setSourceList can re-fetch the measurement set JSONs. |
| (ChartPaneBase.prototype.isShowingOutliers): Added. |
| (ChartPaneBase.prototype.setShowOutliers): Added. Ditto for calling _updateSourceList. |
| (ChartPaneBase.prototype._updateSourceList): Added. |
| (ChartPaneBase.prototype.fetchAnalysisTasks): Renamed from _fetchAnalysisTasks. Now takes noCache as an argument |
| instead of platform and metric IDs since they're on instance variables. |
| |
| * public/v3/components/chart-styles.js: |
| (ChartStyles.resolveConfiguration): Renamed from createChartSourceList. Just resolves platform and metric IDs. |
| (ChartStyles.createSourceList): Extracted from createChartSourceList since it needs to be called when a filtering |
| option is changed as well as when ChartPaneBase.prototype.configure is called. |
| (ChartStyles.baselineStyle): Now takes filtering options. |
| (ChartStyles.targetStyle): Ditto. |
| (ChartStyles.currentStyle): Ditto. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype.currentPoint): Find the point in _fetchedTimeSeries when |
| _sampledTimeSeriesData hasn't been computed yet as a fallback (e.g. when the chart hasn't been rendered yet). |
| (InteractiveTimeSeriesChart.prototype.selectedPoints): Added. |
| (InteractiveTimeSeriesChart.prototype.firstSelectedPoint): Added. |
| (InteractiveTimeSeriesChart.prototype.lockedIndicator): Added. Returns the current point if it's locked. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype.setDomain): |
| (TimeSeriesChart.prototype.setSourceList): Added. Re-create _fetchedTimeSeries when filtering options have changed. |
| Don't re-fetch measurement set JSONs here since showing outliers can be done entirely in the front end. |
| (TimeSeriesChart.prototype.fetchMeasurementSets): Extracted out of setDomain. Now takes noCache as an argument. |
| ChartPane._markAsOutlier |
| (TimeSeriesChart.prototype.firstSampledPointBetweenTime): Added. |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.fetchByPlatformAndMetric): Added noCache as an argument. |
| (AnalysisTask._fetchSubset): Ditto. |
| |
| * public/v3/models/measurement-adaptor.js: |
| (MeasurementAdaptor.prototype.isOutlier): Added. |
| (MeasurementAdaptor.prototype.applyToAnalysisResults): Add markedOutlier as a property on each point. |
| |
| * public/v3/models/measurement-cluster.js: |
| (MeasurementCluster.prototype.addToSeries): Fixed the bug that filtering outliers was broken as _markedOutlierIndex |
| is undefined here. Use MeasurementAdaptor's isOutlier instead. |
| |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet.prototype.fetchBetween): Added noCache as an argument. Reset _primaryClusterPromise and _allFetches |
| when noCache is true since we need to re-fetch the primary cluster as well as all secondary clusters now. |
| (MeasurementSet.prototype._fetchPrimaryCluster): Added noCache as an argument. Directly invoke the JSON API at |
| /api/measurement-set to re-generate all clusters' JSON files instead of first fetching the cached version. |
| (MeasurementSet.prototype._fetchSecondaryCluster): |
| (MeasurementSet.prototype._didFetchJSON): Removed a bogus assertion since this function is called on secondary |
| clusters as well as primary clusters. |
| (MeasurementSet.prototype._addFetchedCluster): Reimplemented this function using an insertion sort. Also remove the |
| existing entry if the fetch cluster should replace it. |
| |
| * public/v3/models/time-series.js: |
| (TimeSeries.prototype.dataBetweenPoints): Removed the dead code to filter out outliers. This is done in addToSeries |
| of MeasurementCluster instead. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane): Renamed pane to popover since it was confusing to have a pane inside a pane class. As such, renamed |
| _paneOpenedByClick to _lockedPopover. |
| (ChartPane.prototype.serializeState): Added the code to serialize filtering options in the serialized state URL. |
| (ChartPane.prototype.updateFromSerializedState): Ditto for parsing. |
| (ChartPane.prototype._analyzeRange): Extracted out of render(). Also fixed a bug that the charts page don't show |
| the newly created analysis task by invoking fetchAnalysisTasks with noCache set to true. |
| (ChartPane.prototype._markAsOutlier): Added. |
| (ChartPane.prototype._renderActionToolbar): A bunch of changes due to pane -> popover rename. Also added a popover |
| for filtering options. |
| (ChartPane.prototype._makePopoverActionItem): Extracted from _makeAnchorToOpenPane. |
| (ChartPane.prototype._makePopoverOpenOnHover): Ditto. |
| (ChartPane.prototype._setPopoverVisibility): Ditto. |
| (ChartPane.prototype._renderFilteringPopover): Added. |
| (ChartPane.htmlTemplate): Added a popover for specifying filtering options. Also added .popover on each popover. |
| (ChartPane.cssTemplate): Updated the style to make use of .popover. |
| |
| * public/v3/pages/charts-page.js: |
| (ChartsPage.prototype.graphOptionsDidChange): Added. Updates the URL state when a filtering option is modified. |
| |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype._createChartForCell): |
| |
| * public/v3/pages/page-router.js: |
| (PageRouter.prototype._serializeHashQueryValue): Serialize a set of strings as | separated tokens. |
| (PageRouter.prototype._deserializeHashQueryValue): Rewrote the function as the serialized URL can no longer be |
| parsed as a JSON as | separated tokens can't be converted into a valid JSON construct with a simple regex. |
| |
| * unit-tests/measurement-set-tests.js: Added a test case for fetchBetween with noCache=true. |
| |
| 2016-05-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix after r201307. |
| |
| * public/v3/pages/page-router.js: |
| (PageRouter.prototype._deserializeHashQueryValue): |
| (PageRouter.prototype._countOccurrences): Moved from _deserializeHashQueryValue. |
| |
| 2016-05-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r201307. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype.serializeState): |
| |
| 2016-05-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Some applications truncates the last closing parenthesis in perf dashboard URL |
| https://bugs.webkit.org/show_bug.cgi?id=157976 |
| |
| Reviewed by Tim Horton. |
| |
| Unfortunately, different applications use different heuristics to determine the end of each URL. Two trailing |
| parentheses, for example, is just fine in Radar as well as Apple Mail if the URL is short enough. Using other |
| characters such as ] and } wouldn't work either because they would be %-escaped. At that point, we might as well |
| as %-escape everything. |
| |
| Work around the bug by parsing the URL as if it had one extra ')' if the parsing had failed. Also shorten the charts |
| page's URL by avoid emitting "-null" for each pane when the pane doesn't have a currently selected point or selection. |
| This improves the odds of the entire URL being recognized by various applications. |
| |
| We could, in theory, implement some sort of a URL shorter but that can wait until when we support real user accounts. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype.serializeState): Don't serialize the selection or the current point if nothing is selected. |
| * public/v3/pages/page-router.js: |
| (PageRouter.prototype._deserializeHashQueryValue): Try parsing the value again with one extra ] at the end if |
| the JSON parsing had failed. |
| |
| 2016-05-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard "Add pane" should list first by test, then by machine |
| https://bugs.webkit.org/show_bug.cgi?id=157880 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Reversed the order which tests and platforms are selected. Also split .pane-selector-container into #tests and |
| #platform for the ease of DOM node manipulations. |
| |
| * public/v3/components/pane-selector.js: |
| (PaneSelector): |
| (PaneSelector.prototype._renderPlatformList): Renamed from _renderPlatformLists since there is a single list |
| for platforms. This list now disappears while a non-metric item is selected in the collection of test lists. |
| e.g. "Speedometer" instead of its "Score" metric. Remember the last metric we rendered to avoid churning. |
| (PaneSelector.prototype._renderTestLists): Render the top level tests once. The index of lists have been |
| decreased by one since test lists are now inside #tests instead of appearing after the platform list. |
| (PaneSelector.prototype._buildTestList): Don't filter tests since platform is chosen after tests now. |
| (PaneSelector.prototype._replaceList): |
| (PaneSelector.prototype._selectedItem): Don't reset the test path (specifies which subtest or metric is picked) |
| when a platform is selected since it happens after a test metric is chosen now. |
| (PaneSelector.prototype._clickedItem): Add a pane when a platform is clicked, not when a metric is clicked. |
| (PaneSelector.cssTemplate): |
| |
| 2016-05-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task should look for a git commit based on abridged hashes |
| https://bugs.webkit.org/show_bug.cgi?id=157877 |
| <rdar://problem/26254374> |
| |
| Reviewed by Chris Dumez. |
| |
| Made /privileged-api/associate-commit look for commits using LIKE instead of an exact match. |
| Associate the commit when there is exactly one match. |
| |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::fetch_between): |
| * public/include/db.php: |
| (Database::escape_for_like): Extracted from CommitLogFetcher::fetch_between. |
| * public/privileged-api/associate-commit.php: |
| (main): Look for the commits using LIKE. Reject whenever there are multiple commits. We limit the number of |
| matches to two for performance when the user specifies something that almost thousands of commits: e.g. "1". |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._associateCommit): Added human friendly error messages for mismatching commits. |
| |
| 2016-05-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. Use --date-order so that every child commit appears after its parent. |
| Otherwise we'll hit a FailedToFindParentCommit error while submitting a commit that appears before its parent. |
| |
| * tools/sync-commits.py: |
| (GitRepository._fetch_all_hashes): |
| |
| 2016-05-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Removed the erroneously committed debug code. |
| |
| * tools/sync-commits.py: |
| (GitRepository.fetch_commit): |
| |
| 2016-05-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have a script to sync git commits |
| https://bugs.webkit.org/show_bug.cgi?id=157867 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the support to pull from a Git repo to pull-svn.py and renamed it to sync-commits.py. |
| |
| Added two classes SVNRepository and GitRepository which inherits from an abstract class, Repository. |
| The code that fetches commit and format revision number / git hash is specialized in each. |
| |
| * Install.md: |
| * tools/pull-svn.py: Removed. |
| * tools/sync-commits.py: Renamed from Websites/perf.webkit.org/tools/pull-svn.py. |
| (main): Renamed --svn-config-json to --repository-config-json. Also made it robust against exceptions |
| inside fetch_commits_and_submit of each Repository class. |
| (load_repository): A factory function for SVNRepository and GitRepository. |
| (Repository): Added. |
| (Repository.__init__): Added. |
| (Repository.fetch_commits_and_submit): Extracted from standalone fetch_commits_and_submit. |
| (Repository.fetch_commit): Added. Implemented by a subclass. |
| (Repository.format_revision): Ditto. |
| (Repository.determine_last_reported_revision): Extracted from alonealone |
| determine_first_revision_to_fetch. The fallback to use "oldest" has been moved to SVNRepository's |
| fetch_commit since it doesn't work in Git. |
| (Repository.fetch_revision_from_dasbhoard): Extracted from fetch_revision_from_dasbhoard. |
| (SVNRepository): Added. |
| (SVNRepository.__init__): Added. |
| (SVNRepository.fetch_commit): Extracted from standalone fetch_commit_and_resolve_author and fetch_commit. |
| (SVNRepository._resolve_author_name): Renamed from resolve_author_name_from_account. |
| (SVNRepository.format_revision): Added. |
| (GitRepository): Added. |
| (GitRepository.__init__): |
| (GitRepository.fetch_commit): Added. Fetches the list of all git hashes if needed, and finds the next hash. |
| (GitRepository._find_next_hash): Added. Finds the first commit that appears after the specified hash. |
| (GitRepository._fetch_all_hashes): Added. Gets the list of all git hashs chronologically (old to new). |
| (GitRepository._run_git_command): Added. |
| (GitRepository.format_revision): Added. Use the first 8 characters of the hash. |
| |
| 2016-05-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a subtitle under platform name in the summary page |
| https://bugs.webkit.org/show_bug.cgi?id=157809 |
| |
| Reviewed by Chris Dumez. |
| |
| Add a description beneath the platform names. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype._constructTable): Add a br and a span if subtitle is present. |
| (SummaryPage.cssTemplate): Added CSS rules for .subtitle. |
| |
| 2016-05-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI shows full git hash instead of the first 8 characters for a blame range |
| https://bugs.webkit.org/show_bug.cgi?id=157691 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Fixed the bug that v3 UI shows the full 40 character git hash instead of the first 8 character as done in v2 UI. |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog.prototype.diff): Fixed the bug. |
| * tools/run-tests.py: |
| (main): Add the support for running a subset of tests as mocha does. |
| * unit-tests/commit-log-tests.js: Added. |
| |
| 2016-05-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Added the missing executable bits. |
| |
| * tools/bundle-v3-scripts.py: Added property svn:executable. |
| * tools/detect-changes.js: Added property svn:executable. |
| * tools/process-maintenance-backlog.py: Added property svn:executable. |
| |
| 2016-05-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Summary page doesn't report some missing platforms |
| https://bugs.webkit.org/show_bug.cgi?id=157670 |
| |
| Reviewed by Darin Adler. |
| |
| This patch improves the warning text for missing platforms and fixes the bug that platforms that don't have |
| any data reported for a given test would not be reported as missing. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype.render): Added instrumentations. |
| (SummaryPage.prototype._constructRatioGraph): Always create both the ratio bar graph and the spinner icon. |
| (SummaryPage.prototype._renderCell): Extracted from _constructRatioGraph. Toggle the displayed-ness of the |
| spinner and the ratio bar graph in the cell by CSS for better performance. |
| (SummaryPage.prototype._warningTextForGroup): Extracted from _constructRatioGraph. Rephrased warning text |
| for clarity and adopted new API of SummaryPageConfigurationGroup. |
| (SummaryPage.prototype._warningTextForGroup.mapAndSortByName): Added. |
| (SummaryPage.prototype._warningTextForGroup.pluralizeIfNeeded): Added. |
| (SummaryPage.cssTemplate): Added rules to toggle the visibility of spinner icons and bar graphs. |
| (SummaryPageConfigurationGroup): Replaced this._warnings by more explicitly named this._missingPlatforms |
| and this._platformsWithoutBaseline. Also add a platform to this._missingPlatforms if it didn't appear in |
| any metrics. Note that adding a platform whenever it doesn't in any one metric would be incorrect since |
| some tests uses a different test name on different platforms: e.g. PLT-Mac and PLT-iPhone. |
| (SummaryPageConfigurationGroup.prototype.missingPlatforms): Added. |
| (SummaryPageConfigurationGroup.prototype.platformsWithoutBaseline): Added. |
| (SummaryPageConfigurationGroup.prototype._fetchAndComputeRatio): |
| |
| 2016-05-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Always use v3 UI for dashboards and analysis task pages |
| https://bugs.webkit.org/show_bug.cgi?id=157647 |
| |
| Reviewed by Darin Adler. |
| |
| Redirect dashboard pages from v1 and v2 to v3's summary page. Also redirect v1 UI's charts page and v2 UI's |
| analysis task pages to the corresponding v3 pages. |
| |
| Keep v2's charts page accessible since some features such as segmentation is still only available on v2 UI. |
| |
| * public/index.html: |
| (init.showCharts): Redirect to v3 UI once the chart list has been parsed. |
| (init.redirectChartsToV3): Added. |
| * public/v2/index.html: |
| |
| 2016-05-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Show a spinner while fetching data on summary page |
| https://bugs.webkit.org/show_bug.cgi?id=157658 |
| |
| Reviewed by Darin Adler. |
| |
| Show a spinner while fetching JSON files on the summary page. |
| |
| * public/v3/components/base.js: |
| (ComponentBase.prototype.renderReplace): Added a new implementation that simply calls the static version. |
| (ComponentBase.renderReplace): Made this static. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype._constructRatioGraph): Show a spinner icon when SummaryPageConfigurationGroup's |
| isFetching returns true. |
| (SummaryPage.cssTemplate): Force the height of each cell to be 2.5rem so that the height of cell doesn't |
| change when a spinner is replaced by a ratio bar graph. |
| |
| (SummaryPageConfigurationGroup): Added this._isFetching as an instance variable. |
| (SummaryPageConfigurationGroup.prototype.isFetching): Added. |
| (SummaryPageConfigurationGroup.prototype.fetchAndComputeSummary): Set this._isFetching while waiting for |
| the promises to resolve after 50ms. We don't immediately set this._isFetching to avoid FOC when all JSON |
| files have been cached. |
| |
| 2016-05-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add horizontal between categories of tests |
| https://bugs.webkit.org/show_bug.cgi?id=157386 |
| |
| Reviewed by Darin Adler. |
| |
| Wrap tests in each category by tbody and add a horizontal bar between each category. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPage.prototype._constructTable): |
| (SummaryPage.cssTemplate): |
| |
| 2016-05-04 Dewei Zhu <dewei_zhu@apple.com> |
| |
| Summary page should show warnings when current or baseline data is missing. |
| https://bugs.webkit.org/show_bug.cgi?id=157339 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| Set summary page to be the default page of v3 UI. |
| Show warning icon when either baseline or current data is missing. |
| Make fetchBetween returns a promise. |
| Update unit tests for MeasurementSet.fetchBetween since it returns a promise now. |
| Add a workaround to skip some platform and metric configurations. |
| |
| * public/v3/components/ratio-bar-graph.js: |
| (RatioBarGraph): |
| (RatioBarGraph.prototype.update): Add showWarningIcon flag to indicate whether we should show warning icon. |
| (RatioBarGraph.prototype.render): Show warning icon when showWarningIcon is true. |
| (RatioBarGraph.cssTemplate): Add style for warning icon. |
| * public/v3/components/warning-icon.js: Add warning icon. |
| (WarningIcon): |
| (WarningIcon.cssTemplate): |
| * public/v3/index.html: |
| * public/v3/main.js: |
| (main): Set summary page to be the default page of v3 UI. |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet): |
| (MeasurementSet.prototype.fetchBetween): Returns a promise. Fix the bug in previous implementation that we miss |
| some callbacks sometimes. Basically, we will fetch primary cluster first, then secondary clusters. For each |
| secondary cluster fetch, we will always invoke callback even when it fails. |
| (MeasurementSet.prototype._fetchSecondaryClusters): Deleted. |
| (MeasurementSet.prototype._fetch.else.url.api.measurement.set platform): Deleted. |
| * public/v3/pages/summary-page.js: |
| (SummaryPage): Add a variable for excluded configurations. |
| (SummaryPage.prototype._createConfigurationGroup): Pass excluded configurations while building config groups. |
| (SummaryPage.prototype._constructTable): Remove the logic for unified header since it breaks consistency of the table appearance. |
| (SummaryPage.prototype.this._renderQueue.push): Show warning message when baseline/current data is missing. |
| (SummaryPageConfigurationGroup): Add a variable to keep track of the warnings while computing summary. |
| (SummaryPageConfigurationGroup.prototype.warnings): A getter for warnings. |
| (SummaryPageConfigurationGroup._computeSummary): Fix a bug in calculating ratios. We should always use |
| current/baseline for ratio and present the difference between ratio and 1 in the summary page. |
| (SummaryPageConfigurationGroup.set then): Deleted. |
| (SummaryPageConfigurationGroup.set var): Deleted. |
| * unit-tests/measurement-set-tests.js: Add a helper function to wait for fetchBetween. Update unit tests since fetchBetween returns a promise now. |
| (promise.set fetchBetween): |
| (set MeasurementSet): |
| (set fetchBetween): Deleted. |
| |
| 2016-04-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Chart status should always be computed against prior values |
| https://bugs.webkit.org/show_bug.cgi?id=157014 |
| |
| Reviewed by Darin Adler. |
| |
| Compare the current value against the last baseline or target value that appear before the current value in time |
| so that the comparison stay the same even when new baseline and target values are reported. Also include the compared |
| baseline or target value in the label for clarity. |
| |
| * public/v3/components/chart-status-view.js: |
| (ChartStatusView.prototype._computeChartStatus): |
| (ChartStatusView.prototype._computeChartStatus.labelForDiff): |
| (ChartStatusView.prototype._findLastPointPriorToTime): Extracted from _relativeDifferenceToLaterPointInTimeSeries. |
| Now finds the last point before the current point's time if there is any, or the last point in baseline / target. |
| (ChartStatusView.prototype._relativeDifferenceToLaterPointInTimeSeries): Deleted. |
| * public/v3/models/metric.js: |
| (Metric.prototype.makeFormatter): Don't use SI units for unit-less metrics. |
| |
| 2016-04-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION(r199444): Perf dashboard always fetches all measurement sets |
| https://bugs.webkit.org/show_bug.cgi?id=156534 |
| |
| Reviewed by Darin Adler. |
| |
| The bug was cased by SummaryPage's constructor fetching all measurement sets. Since each page is always |
| constructed in main(), this resulted in all measurement sets being fetched on all pages. |
| |
| * public/v3/pages/summary-page.js: |
| (SummaryPage): |
| (SummaryPage.prototype.open): Fetch measurement set JSONs here. |
| (SummaryPage.prototype._createConfigurationGroup): Renamed from _createConfigurationGroupAndStartFetchingData. |
| |
| 2016-04-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a summary page to v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=156531 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Add new "Summary" page, which shows the average difference (better or worse) from the baseline across |
| multiple platforms and tests by a single number. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::generate): Include "summary" in manifest.json. |
| * public/shared/statistics.js: |
| (Statistics.mean): Added. |
| (Statistics.median): Added. |
| * public/v3/components/ratio-bar-graph.js: Added. |
| (RatioBarGraph): Shows a horizontal bar graph that visualizes the relative difference (e.g. 3% better). |
| (RatioBarGraph.prototype.update): |
| (RatioBarGraph.prototype.render): |
| (RatioBarGraph.cssTemplate): |
| (RatioBarGraph.htmlTemplate): |
| * public/v3/index.html: |
| * public/v3/main.js: |
| (main): Instantiate SummaryPage and add it to the navigation bar and the router. |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest): Let "summary" pass through from manifest.json to main(). |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet.prototype._failedToFetchJSON): Invoke the callback with an error or true in order for |
| the callback can detect a failure. |
| (MeasurementSet.prototype._invokeCallbacks): Ditto. |
| * public/v3/pages/charts-page.js: |
| (ChartsPage.createStateForConfigurationList): Added to add a hyperlink from summary page to charts page. |
| * public/v3/pages/summary-page.js: Added. |
| (SummaryPage): Added. |
| (SummaryPage.prototype.routeName): Added. |
| (SummaryPage.prototype.open): Added. |
| (SummaryPage.prototype.render): Added. |
| (SummaryPage.prototype._createConfigurationGroupAndStartFetchingData): Added. |
| (SummaryPage.prototype._constructTable): Added. |
| (SummaryPage.prototype._constructRatioGraph): Added. |
| (SummaryPage.htmlTemplate): Added. |
| (SummaryPage.cssTemplate): Added. |
| (SummaryPageConfigurationGroup): Added. Represents a set of platforms and tests shown in a single cell. |
| (SummaryPageConfigurationGroup.prototype.ratio): Added. |
| (SummaryPageConfigurationGroup.prototype.label): Added. |
| (SummaryPageConfigurationGroup.prototype.changeType): Added. |
| (SummaryPageConfigurationGroup.prototype.configurationList): Added. |
| (SummaryPageConfigurationGroup.prototype.fetchAndComputeSummary): Added. |
| (SummaryPageConfigurationGroup.prototype._computeSummary): Added. |
| (SummaryPageConfigurationGroup.prototype._fetchAndComputeRatio): Added. Invoked for each time series in |
| the set, and stores the computed ratio of the current values to the baseline in this._setToRatio. |
| The results are aggregated by _computeSummary as a single number later. |
| (SummaryPageConfigurationGroup._medianForTimeRange): Added. |
| (SummaryPageConfigurationGroup._fetchData): A thin wrapper to make MeasurementSet.fetchBetween promise |
| friendly since MeasurementSet doesn't support Promise at the moment (but it should!). |
| * server-tests/api-manifest.js: Updated a test case. |
| |
| 2016-04-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make sync-buildbot.js fault safe |
| https://bugs.webkit.org/show_bug.cgi?id=156498 |
| |
| Reviewed by Chris Dumez. |
| |
| Fixed a bug that sync-buildbot.js will continue to schedule build requests from multiple test groups |
| if multiple test groups are simultaneously in-progress on the same builder. Also fixed a bug that if |
| a build request had failed without leaving a trace (i.e. no entry on any of the builders we know of), |
| sync-buildbot.js throws an exception. |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: Added test cases. |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer.prototype.scheduleRequestInGroupIfAvailable): Renamed. Optionally takes the slave name. |
| When this parameter is specified, schedule the request only if the specified slave is available. |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype._scheduleNextRequestInGroupIfSlaveIsAvailable): Always use |
| scheduleRequestInGroupIfAvailable to schedule a new build request. Using scheduleRequest for non-first |
| build requests was problematic when there were multiple test groups with pending requests because then |
| we would schedule those pending requests without checking whether there is already a pending job or if |
| we have previously scheduled a job. Also fallback to use any syncer / builder when groupInfo.syncer is |
| not set even if the next request was not the first one in the test group since we can't determine on |
| which builder preceding requests are processed in such cases. |
| * unit-tests/buildbot-syncer-tests.js: |
| |
| 2016-04-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Replace script runner to use mocha.js tests |
| https://bugs.webkit.org/show_bug.cgi?id=156490 |
| |
| Reviewed by Chris Dumez. |
| |
| Replaced run-tests.js, which was a whole test harness for running legacy tests by tools/run-tests.py |
| which is a thin wrapper around mocha.js. |
| |
| * run-tests.js: Removed. |
| * tests: Removed. |
| * tools/run-tests.py: Added. |
| (main): |
| |
| 2016-04-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New syncing script sometimes schedules a build request on a wrong builder |
| https://bugs.webkit.org/show_bug.cgi?id=156489 |
| |
| Reviewed by Stephanie Lewis. |
| |
| The bug was caused by _scheduleNextRequestInGroupIfSlaveIsAvailable scheduling the next build request on |
| any available syncer regardless of whether the request is the first one in the test group or not because |
| BuildRequest.order was returning a string instead of a number. |
| |
| Also fixed a bug that BuildbotTriggerable.syncOnce was re-ordering test groups by their id's instead of |
| respecting the order in which the perf dashboard returned. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.order): Force the order to be a number. |
| * server-tests/api-build-requests-tests.js: Assert the order as numbers. |
| * server-tests/resources/mock-data.js: |
| (MockData.addAnotherMockTestGroup): Changed the test group id to 601, which is after the first mock data. |
| The old number was masking a bug in BuildbotTriggerable that it was re-ordering test groups by their id's |
| instead of using the order set forth by the perf dashboard. |
| (MockData.mockTestSyncConfigWithSingleBuilder): |
| * server-tests/tools-buildbot-triggerable-tests.js: Added a test case for scheduling two build requests in |
| a single call to syncOnce. Each build request should be scheduled on the same builder as the previous build |
| requests in the same test group. |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype.syncOnce): Order test groups by groupOrder, which is the index at which first |
| build request in the group appeared. |
| (BuildbotTriggerable.prototype._scheduleNextRequestInGroupIfSlaveIsAvailable): Don't re-order build requests |
| as they're already sorted on the server side. |
| (BuildbotTriggerable._testGroupMapForBuildRequests): Added groupOrder to test group info |
| |
| 2016-04-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Don't treat a build number 0 as a pending build. |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotBuildEntry.prototype.isPending): |
| |
| 2016-04-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Escape builder names in url* and pathFor* methods of BuildbotSyncer |
| https://bugs.webkit.org/show_bug.cgi?id=156427 |
| |
| Reviewed by Darin Adler. |
| |
| The build fix in r199251 breaks other usage of RemoteAPI. Fix it properly by escaping builder names in |
| various methods of BuildbotSyncer. |
| |
| Also fixed a typo in the logging and a bug that the new syncing script never updated "scheduled" to "running". |
| |
| * server-tests/resources/mock-data.js: |
| (MockData.mockTestSyncConfigWithTwoBuilders): Renamed "some-builder-2" to "some builder 2" to test the |
| new escaping behavior in tools-buildbot-triggerable-tests.js and buildbot-syncer-tests.js. |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: Added tests for status url, and added a new test case |
| for updating "scheduled" to "running". |
| |
| * tools/js/buildbot-syncer.js: |
| (BuildbotBuildEntry.buildRequestStatusIfUpdateIsNeeded): Update the status to "running" when the request's |
| status is "scheduled" and the buildbot's build is currently in progress. |
| (BuildbotSyncer.prototype.pathForPendingBuildsJSON): Escape the builder name. |
| (BuildbotSyncer.prototype.pathForBuildJSON): Ditto. |
| (BuildbotSyncer.prototype.pathForForceBuild): Ditto. |
| (BuildbotSyncer.prototype.url): Ditto. |
| (BuildbotSyncer.prototype.urlForBuildNumber): Ditto. |
| |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers): |
| (BuildbotTriggerable.prototype._scheduleNextRequestInGroupIfSlaveIsAvailable): Fixed a typo. We are |
| scheduling new build requests, not syncing them. |
| * tools/js/remote.js: |
| (RemoteAPI.sendHttpRequest): Reverted r199251. |
| * unit-tests/buildbot-syncer-tests.js: |
| |
| 2016-04-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. We need to escape the path or http.request would fail. |
| |
| * tools/js/remote.js: |
| |
| 2016-04-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix various bugs in the new syncing script |
| https://bugs.webkit.org/show_bug.cgi?id=156393 |
| |
| Reviewed by Darin Adler. |
| |
| * server-tests/resources/common-operations.js: Added. This file was supposed to be added in r199191. |
| (addBuilderForReport): |
| (addSlaveForReport): |
| (connectToDatabaseInEveryTest): |
| (submitReport): |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers): Don't log every time we pull from buildbot |
| builder as this dramatically increases the amount of log we generate. |
| * tools/js/parse-arguments.js: |
| (parseArguments): Fixed a typo. This should be parseArgument*s*, not parseArgument. |
| * tools/js/remote.js: |
| (RemoteAPI.prototype.url): Fixed a bug that portSuffix wasn't being expanded in the template literal. |
| (RemoteAPI.prototype.configure): Added more validations with nice error messages. |
| (RemoteAPI.prototype.sendHttpRequest): Falling back to port 80 isn't right when scheme is https. Compute |
| the right port in configure instead based on the scheme. |
| * tools/sync-buildbot.js: |
| (syncLoop): Fixed the bug that syncing multiple times fail because Manifest.fetch() create new Platform |
| and Test objects. This results in various references in BuildRequest objects to get outdated. Fixing this |
| properly in Manifest.fetch() because we do need to "forget" about some tests and platforms in some cases. |
| For now, delete all v3 model objects and start over in each syncing cycle. |
| * unit-tests/tools-js-remote-tests.js: Added. Unit tests for the aforementioned changes to RemoteAPI. |
| |
| 2016-04-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| sync-buildbot.js doesn't mark disappeared builds as failed |
| https://bugs.webkit.org/show_bug.cgi?id=156386 |
| |
| Reviewed by Chris Dumez. |
| |
| Fix a bug that new syncing script doesn't mark builds that it scheduled but doesn't appear when queried |
| by buildbot's JSON API. These are builds that got canceled by humans (e.g. buildbot was restarted, data |
| loss, pending build was canceled, etc...) |
| |
| * server-tests/tools-buildbot-triggerable-tests.js: Added a test case. |
| * tools/js/buildbot-triggerable.js: |
| (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers): Added a set of build requests we've matched |
| against BuildbotBuildEntry's. Mark build requests that didn't have any entry but supposed to be in either |
| 'scheduled' or 'running' status as failed. |
| |
| 2016-04-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A/B testing bots should prioritize user created test groups |
| https://bugs.webkit.org/show_bug.cgi?id=156375 |
| |
| Reviewed by Chris Dumez. |
| |
| Order build requests preferring user created ones over ones automatically created by detect-changes.js. |
| |
| Also fixed a bug in BuildbotSyncer.scheduleFirstRequestInGroupIfAvailable that it was scheduling a new |
| build request on a builder/slave even when we had previously scheduled another build request. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::fetch_incomplete_requests_for_triggerable): Order build requested based on |
| author_order which is 0 when it's created by an user and 1 when it's created by detect-changes.js. |
| Since we're using ascending order, this would put user created test groups first. |
| * server-tests/api-build-requests-tests.js: Updated an existing test case and added a new test case |
| for testing that build requests for an user created test group shows up first. |
| * server-tests/resources/mock-data.js: |
| (MockData.addAnotherMockTestGroup): Takes an extra argument to specify the author name. |
| * server-tests/tools-buildbot-triggerable-tests.js: Added a test case for testing that build requests |
| for an user created test group shows up first. |
| * tools/js/buildbot-syncer.js: |
| (BuildbotSyncer): Added _slavesWithNewRequests to keep track of build slaves on which we have already |
| scheduled new build requests. Don't schedule more requests on these slaves. |
| (BuildbotSyncer.prototype.scheduleRequest): |
| (BuildbotSyncer.prototype.scheduleFirstRequestInGroupIfAvailable): Add the specified slave name (or null |
| when slaveList is not specified) to _slavesWithNewRequests. |
| (BuildbotSyncer.prototype.pullBuildbot): Clear the set after pulling buildbot since any build request |
| we have previously scheduled should be included in one of the entires now. |
| * unit-tests/buildbot-syncer-tests.js: Added test cases for the aforementioned bug. |
| (sampleiOSConfig): Added a second slave for new test cases. |
| |
| 2016-04-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Migrate legacy perf dashboard tests to mocha.js based tests |
| https://bugs.webkit.org/show_bug.cgi?id=156335 |
| |
| Reviewed by Chris Dumez. |
| |
| Migrated all legacy run-tests.js tests to mocha.js based tests. Since the new harness uses Promise |
| for most of asynchronous operations, refactored the tests to use Promises as well, and added more |
| assertions where appropriate. |
| |
| Also consolidated common helper functions into server-tests/resources/common-operations.js. |
| Unfortunately there were multiple inconsistent implementations of addBuilder/addSlave. Some were |
| taking an array of reports while others were taking a single report. New shared implementation in |
| common-operations.js now takes a single report. |
| |
| Also decreased the timeout in most tests from 10s to 1s so that tests fail early when they timeout. |
| Most of tests are passing under 100ms on my computer so 1s should be plenty still. |
| |
| * run-tests.js: Removed. |
| * server-tests/admin-platforms-tests.js: Moved from tests/admin-platforms.js. |
| (reportsForDifferentPlatforms): |
| * server-tests/admin-reprocess-report-tests.js: Moved from tests/admin-reprocess-report.js. |
| (.addBuilder): Moved to common-operations.js. |
| * server-tests/api-build-requests-tests.js: |
| * server-tests/api-manifest.js: Use MockData.resetV3Models() instead of manually clearing maps. |
| * server-tests/api-measurement-set-tests.js: Moved from tests/api-measurement-set.js. |
| (.queryPlatformAndMetric): |
| (.format): |
| * server-tests/api-report-commits-tests.js: Moved from tests/api-report-commits.js. |
| * server-tests/api-report-tests.js: Moved from tests/api-report.js. |
| (.emptyReport): |
| (.emptySlaveReport): |
| (.reportWithSameSubtestName): |
| * server-tests/resources/common-operations.js: Added. |
| (addBuilderForReport): Extracted from tests. |
| (addSlaveForReport): Ditto. |
| (connectToDatabaseInEveryTest): Added. |
| (submitReport): Extracted from admin-platforms-tests.js. |
| * server-tests/resources/test-server.js: |
| (TestServer): Make TestServer a singleton since it doesn't make any sense for each module to start |
| its own Apache instance (that would certainly will fail). |
| * server-tests/tools-buildbot-triggerable-tests.js: |
| * tests: Removed. |
| * tools/js/database.js: |
| (Database.prototype.selectAll): Added. |
| (Database.prototype.selectFirstRow): Added. |
| (Database.prototype.selectRows): Added. Dynamically construct a query string based on arguments. |
| |
| 2016-04-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New buildbot syncing scripts that supports multiple builders and slaves |
| https://bugs.webkit.org/show_bug.cgi?id=156269 |
| |
| Reviewed by Chris Dumez. |
| |
| Add sync-buildbot.js that supports scheduling A/B testing jobs on multiple builders and slaves. |
| The old python script (sync-with-buildbot.py) could only support a single builder and slave |
| for each platform, test pair. |
| |
| The main logic is implemented in BuildbotTriggerable.syncOnce. Various helper methods are added |
| throughout the codebase and tests have been refactored. |
| |
| BuildbotSyncer has been updated to support multiple platform, test pairs. It's now responsible |
| for syncing everything on each builder (on a buildbot). |
| |
| Added more unit tests for BuildbotSyncer and server tests for BuildbotTriggerable, and refactored |
| test helpers and mocks as needed. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.status): Added. |
| (BuildRequest.prototype.isScheduled): Added. |
| * public/v3/models/metric.js: |
| (Metric.prototype.fullName): Added. |
| * public/v3/models/platform.js: |
| (Platform): Added the map based on platform name. |
| (Platform.findByName): Added. |
| * public/v3/models/test.js: |
| (Test.topLevelTests): |
| (Test.findByPath): Added. Finds a test based on an array of test names; e.g. ['A', 'B'] would |
| find the test whose name is "B" which has a parent test named "A". |
| (Test.prototype.fullName): Added. |
| * server-tests/api-build-requests-tests.js: |
| (addMockData): Moved to resources/mock-data.js. |
| (addAnotherMockTestGroup): Ditto. |
| * server-tests/resources/mock-data.js: Added. |
| (MockData.resetV3Models): Added. |
| (MockData.addMockData): Moved from api-build-requests-tests.js. |
| (MockData.addAnotherMockTestGroup): Ditto. |
| (MockData.mockTestSyncConfigWithSingleBuilder): Added. |
| (MockData.mockTestSyncConfigWithTwoBuilders): Added. |
| (MockData.pendingBuild): Added. |
| (MockData.runningBuild): Added. |
| (MockData.finishedBuild): Added. |
| * server-tests/resources/test-server.js: |
| (TestServer): |
| (TestServer.prototype.remoteAPI): |
| (TestServer.prototype._ensureTestDatabase): Don't fail even if the test database doesn't exit. |
| (TestServer.prototype._startApache): Create a RemoteAPI instance to access the test sever. |
| (TestServer.prototype._waitForPid): Increase the timeout. |
| (TestServer.prototype.inject): Replace global.RemoteAPI during the test and restore it afterwards. |
| * server-tests/tools-buildbot-triggerable-tests.js: Added. Tests BuildbotTriggerable.syncOnce. |
| (MockLogger): Added. |
| (MockLogger.prototype.log): Added. |
| (MockLogger.prototype.error): Added. |
| * tools/detect-changes.js: |
| (parseArgument): Moved to js/parse-arguments.js. |
| * tools/js/buildbot-syncer.js: |
| (BuildbotBuildEntry): |
| (BuildbotBuildEntry.prototype.syncer): Added. |
| (BuildbotBuildEntry.prototype.buildRequestStatusIfUpdateIsNeeded): Added. Returns a new status |
| for a build request (of the matching build request ID) if it needs to be updated in the server. |
| (BuildbotSyncer): This class |
| (BuildbotSyncer.prototype.addTestConfiguration): Added. |
| (BuildbotSyncer.prototype.testConfigurations): Returns the list of test configurations. |
| (BuildbotSyncer.prototype.matchesConfiguration): Returns true iff the request can be scheduled on |
| this builder. |
| (BuildbotSyncer.prototype.scheduleRequest): Added. Schedules a new job on buildbot for a request. |
| (BuildbotSyncer.prototype.scheduleFirstRequestInGroupIfAvailable): Added. Schedules a new job for |
| the specified build request on the first slave that's available. |
| (BuildbotSyncer.prototype.pullBuildbot): Return a list of BuildbotBuildEntry instead of an object. |
| Also store it on an instance variable so that scheduleFirstRequestInGroupIfAvailable could use it. |
| (BuildbotSyncer.prototype._pullRecentBuilds): |
| (BuildbotSyncer.prototype.pathForPendingBuildsJSON): Renamed from urlForPendingBuildsJSON and now |
| only returns the path instead of the full URL since RemoteAPI takes a path, not full URL. |
| (BuildbotSyncer.prototype.pathForBuildJSON): Ditto from pathForBuildJSON. |
| (BuildbotSyncer.prototype.pathForForceBuild): Added. |
| (BuildbotSyncer.prototype.url): Use RemoteAPI's url method instead of manually constructing URL. |
| (BuildbotSyncer.prototype.urlForBuildNumber): Ditto. |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): Now that each syncer can have multiple test |
| configurations associated with it, find the one matching for this request. |
| (BuildbotSyncer._loadConfig): Create a syncer per builder and add all test configurations to it. |
| (BuildbotSyncer._validateAndMergeConfig): Added the support for 'SlaveList', which is a list of |
| slave names present on this builder. |
| * tools/js/buildbot-triggerable.js: Added. |
| (BuildbotTriggerable): Added. |
| (BuildbotTriggerable.prototype.name): Added. |
| (BuildbotTriggerable.prototype.syncOnce): Added. The main logic for the syncing script. It pulls |
| existing build requests from the perf dashboard, pulls buildbot for pending and running/completed |
| builds on each builder (represented by each syncer), schedules build requests on buildbot if there |
| is any builder/slave available, and updates the status of build requests in the database. |
| (BuildbotTriggerable.prototype._validateRequests): Added. |
| (BuildbotTriggerable.prototype._pullBuildbotOnAllSyncers): Added. |
| (BuildbotTriggerable.prototype._scheduleNextRequestInGroupIfSlaveIsAvailable): Added. |
| (BuildbotTriggerable._testGroupMapForBuildRequests): Added. |
| * tools/js/database.js: |
| * tools/js/parse-arguments.js: Added. Extracted out of tools/detect-changes.js. |
| (parseArguments): |
| * tools/js/remote.js: |
| (RemoteAPI): Now optionally takes the server configuration. |
| (RemoteAPI.prototype.url): Added. |
| (RemoteAPI.prototype.getJSON): Removed the code for specifying request content. |
| (RemoteAPI.prototype.getJSONWithStatus): Ditto. |
| (RemoteAPI.prototype.postJSON): Added. |
| (RemoteAPI.prototype.postFormUrlencodedData): Added. |
| (RemoteAPI.prototype.sendHttpRequest): Fixed the code to specify auth. |
| * tools/js/v3-models.js: Don't include RemoteAPI here as they require a configuration for each host. |
| * tools/sync-buildbot.js: Added. |
| (main): Added. Parse the arguments and start the loop. |
| (syncLoop): Added. |
| * unit-tests/buildbot-syncer-tests.js: Added tests for pullBuildbot, scheduleRequest, as well as |
| scheduleFirstRequestInGroupIfAvailable. Refactored helper functions as needed. |
| (sampleiOSConfig): |
| (smallConfiguration): Added. |
| (smallPendingBuild): Added. |
| (smallInProgressBuild): Added. |
| (smallFinishedBuild): Added. |
| (createSampleBuildRequest): Create a unique build request for each platform. |
| (samplePendingBuild): Optionally specify build time and slave name. |
| (sampleInProgressBuild): Optionally specify slave name. |
| (sampleFinishedBuild): Ditto. |
| * unit-tests/resources/mock-remote-api.js: |
| (assert.notReached.assert.notReached): |
| (MockRemoteAPI.url): Added. |
| (MockRemoteAPI.postFormUrlencodedData): Added. |
| (MockRemoteAPI._addRequest): Extracted from getJSONWithStatus. |
| (MockRemoteAPI.waitForRequest): Extracted from inject. For tools-buildbot-triggerable-tests.js, we |
| need to instantiate a RemoteAPI for buildbot without replacing global.RemoteAPI. |
| (MockRemoteAPI.inject): |
| (MockRemoteAPI.reset): Added. |
| |
| 2016-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Simplify API of Test model by removing Test.setParentTest |
| https://bugs.webkit.org/show_bug.cgi?id=156055 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Removed Test.setParentTest. Keep track of the child-parent relationship using the static map instead. |
| |
| Now each test only stores parent's id and uses the ID static map in Test.parentTest(). |
| |
| * public/v3/models/manifest.js: |
| (Manifest._didFetchManifest.buildObjectsFromIdMap): Removed the code to create the map of child-parent |
| relationship and call setParentTest. |
| * public/v3/models/test.js: |
| (Test): Updated a static map by the name of "childTestMap" to store itself. We should probably sort |
| child tests using some fixed criteria in the future instead of relying on the creation order but |
| preserve the old code's ordering for now. |
| (Test.prototype.parentTest): Look up the static map by the parent test's id. |
| (Test.prototype.onlyContainsSingleMetric): |
| (Test.prototype.setParentTest): Deleted. |
| (Test.prototype.childTests): Look up the child test map. |
| |
| 2016-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| BuildRequest should have associated platform and test |
| https://bugs.webkit.org/show_bug.cgi?id=156054 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Added methods to retrieve the platform and the test associated with a build request with tests. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest): |
| (BuildRequest.prototype.platform): Added. |
| (BuildRequest.prototype.test): Added. |
| * server-tests/api-build-requests-tests.js: |
| * server-tests/api-manifest.js: Fixed a typo. This tests /api/manifest, not /api/build-requests. |
| * unit-tests/buildbot-syncer-tests.js: |
| (.createSampleBuildRequest): Now takes Platform and Test objects to avoid hitting assertions in |
| BuildRequest's constructor. |
| |
| 2016-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| BuildRequest should have a method to fetch all in-progress and pending requests for a triggerable |
| https://bugs.webkit.org/show_bug.cgi?id=156008 |
| |
| Reviewed by Darin Adler. |
| |
| Add a method to BuildRequest that fetches all pending and in-progress requests for a triggerable. |
| |
| Now, new syncing scripts must be able to figure out the build slave the first build requests in |
| a given test group had used in order to schedule subsequent build requests in the test group. |
| |
| For this purpose, /api/build-requests has been modified to return all build requests whose test |
| group had not finished yet. A test group is finished if all build requests in the test group had |
| finished (completed, failed, or canceled). |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestFetcher::fetch_incomplete_requests_for_triggerable): Return all build requests in test |
| groups that have not been finished. |
| * public/v3/models/build-request.js: |
| (BuildRequest): |
| (BuildRequest.prototype.testGroupId): Added. |
| (BuildRequest.prototype.isPending): Renamed from hasPending to fix a bad grammar. |
| (BuildRequest.fetchForTriggerable): Added. |
| (BuildRequest.constructBuildRequestsFromData): Extracted from _createModelsFromFetchedTestGroups in |
| TestGroup. |
| * public/v3/models/manifest.js: |
| (Manifest.fetch): Use the full path from root so that it works in server tests. |
| * public/v3/models/test-group.js: |
| (TestGroup.hasPending): |
| (TestGroup._createModelsFromFetchedTestGroups): |
| * server-tests/api-build-requests-tests.js: Added tests to ensure all build requests for a test group |
| is present in the response returned by /api/build-requests iff any build request in the group had not |
| finished yet. |
| (.addMockData): |
| (.addAnotherMockTestGroup): Added. |
| * unit-tests/test-groups-tests.js: |
| |
| 2016-03-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make dependency injection in unit tests more explicit |
| https://bugs.webkit.org/show_bug.cgi?id=156006 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Make the dependency injection of model objects in unit tests explicit so that server tests that create |
| "real" model objects won't create these mock objects. Now each test that uses mock model objects would call |
| MockModels.inject() to inject before / beforeEach and access each object using a property on MockModels |
| instead of them being implicitly defined on the global object. |
| |
| Similarly, MockRemoteAPI now only replaces global.RemoteAPI during each test so that server tests can use |
| real RemoteAPI to access the test Apache server. |
| |
| * unit-tests/analysis-task-tests.js: |
| * unit-tests/buildbot-syncer-tests.js: |
| (createSampleBuildRequest): |
| * unit-tests/measurement-adaptor-tests.js: |
| * unit-tests/measurement-set-tests.js: |
| * unit-tests/resources/mock-remote-api.js: |
| (MockRemoteAPI.getJSONWithStatus): |
| (MockRemoteAPI.inject): Added. Override RemoteAPI on the global object during each test. |
| * unit-tests/resources/mock-v3-models.js: |
| (MockModels.inject): Added. Create mock model objects before each test, and clear all static maps of |
| various v3 model classes (to remove all singleton objects for those model classes). |
| * unit-tests/test-groups-tests.js: |
| |
| 2016-03-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| BuildbotSyncer should be able to fetch JSON from buildbot |
| https://bugs.webkit.org/show_bug.cgi?id=155921 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Added BuildbotSyncer.pullBuildbot which fetches pending, in-progress, and finished builds from buildbot |
| with lots of unit tests as this has historically been a source of subtle bugs in the old script. |
| |
| New implementation fixes a subtle bug in the old pythons script which overlooked the possibility that |
| the state of some builds may change between each HTTP request. In the old script, we fetched the list |
| of the pending builds, and requested -1, -2, etc... builds for N times. But between each request, |
| a pending build may start running or an in-progress build finish and shift the offset by one. The new |
| script avoids this problem by first requesting all pending builds, then all in-progress and finished |
| builds in a single HTTP request. The results are then merged so that entries for in-progress and |
| finished builds would override the entries for pending builds if they overlap. |
| |
| Also renamed RemoteAPI.fetchJSON to RemoteAPI.getJSON to match v3 UI's RemoteAPI. This change makes |
| the class interchangeable between frontend (public/v3/remote.js) and backend (tools/js/remote.js). |
| |
| * server-tests/api-build-requests-tests.js: |
| * server-tests/api-manifest.js: |
| * tools/js/buildbot-syncer.js: |
| (BuildbotBuildEntry): Removed the unused argument "type". Store the syncer as an instance variable as |
| we'd need to query for the buildbot URL. Also fixed a bug that _isInProgress was true for finished |
| builds as 'currentStep' is always defined but null in those builds. |
| (BuildbotBuildEntry.prototype.buildNumber): Added. |
| (BuildbotBuildEntry.prototype.isPending): Added. |
| (BuildbotBuildEntry.prototype.hasFinished): Added. |
| (BuildbotSyncer.prototype.pullBuildbot): Added. Fetches pending builds first and then finished builds. |
| (BuildbotSyncer.prototype._pullRecentBuilds): Added. Fetches in-progress and finished builds. |
| (BuildbotSyncer.prototype.urlForPendingBuildsJSON): Added. |
| (BuildbotSyncer.prototype.urlForBuildJSON): Added. |
| (BuildbotSyncer.prototype.url): Added. |
| (BuildbotSyncer.prototype.urlForBuildNumber): Added. |
| * tools/js/remote.js: |
| (RemoteAPI.prototype.getJSON): Renamed from fetchJSON. |
| (RemoteAPI.prototype.getJSONWithStatus): Renamed from fetchJSONWithStatus. |
| * tools/js/v3-models.js: Load tools/js/remote.js instead of public/v3/remote.js inside node. |
| * unit-tests/buildbot-syncer-tests.js: Added a lot of unit tests for BuildbotSyncer.pullBuildbot |
| (samplePendingBuild): |
| (sampleInProgressBuild): Added. |
| (sampleFinishedBuild): Added. |
| * unit-tests/resources/mock-remote-api.js: |
| (global.RemoteAPI.getJSON): Use the same mock as getJSONWithStatus. |
| |
| 2016-03-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Migrate admin-regenerate-manifest.js to mocha.js and test v3 UI code |
| https://bugs.webkit.org/show_bug.cgi?id=155863 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Replaced admin-regenerate-manifest.js by a new mocha.js tests using the new server testing capability |
| added in r198642 and tested v3 UI code (parsing manifest.json and creating models). Also removed |
| /admin/regenerate-manifest since it has been superseded by /api/manifest. |
| |
| This patch also extracts manifest.js out of main.js so that it could be used and tested without the |
| DOM support in node. |
| |
| * public/admin/regenerate-manifest.php: Deleted. |
| * public/include/db.php: Fixed a regression from r198642 since CONFIG_DIR now doesn't end with |
| a trailing backslash. |
| * public/include/manifest.php: |
| (ManifestGenerator::bug_trackers): Avoid a warning message when there are no repositories. |
| * public/v3/index.html: |
| * public/v3/main.js: |
| (main): |
| * public/v3/models/bug-tracker.js: |
| (BugTracker.prototype.newBugUrl): Added. |
| (BugTracker.prototype.repositories): Added. |
| * public/v3/models/manifest.js: Added. Extracted from main.js. |
| (Manifest.fetch): Moved from main.js' fetchManifest. |
| (Manifest._didFetchManifest): Moved from main.js' didFetchManifest. |
| * public/v3/models/platform.js: |
| (Platform.prototype.hasTest): Fixed the bug that "test" here was shadowing the function parameter of |
| the same name. This is tested by the newly added test cases. |
| * server-tests/api-build-requests-tests.js: |
| * server-tests/api-manifest.js: Added. Migrated test cases from tests/admin-regenerate-manifest.js |
| with additional assertions for v3 UI model objects. |
| * server-tests/resources/test-server.js: |
| (TestServer.prototype.start): |
| (TestServer.prototype.testConfig): Renamed from _constructTestConfig now that this is a public API. |
| Also no longer takes dataDirectory as an argument since it's always the same. |
| (TestServer.prototype._ensureDataDirectory): Fixed a bug that we weren't making public/data. |
| (TestServer.prototype.cleanDataDirectory): Added. Remove all files inside public/data between tests. |
| (TestServer.prototype.inject): Added. Calls before, etc... because always calling before had an |
| unintended side effect of slowing down unit tests even through they don't need Postgres or Apache. |
| * tests/admin-regenerate-manifest.js: Removed. |
| * tools/js/database.js: |
| * tools/js/v3-models.js: |
| |
| 2016-03-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add mocha server tests for /api/build-requests |
| https://bugs.webkit.org/show_bug.cgi?id=155831 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the new mocha.js based server-tests for /api/build-requests. The new harness automatically: |
| - starts a new Apache instance |
| - switches the database during testing via setting an environmental variable |
| - backups and restores public/data directory during testing |
| |
| As a result, developer no longer has to manually setup Apache, edit config.json manually to use |
| a testing database, or run /api/manifest.php to re-generate the manifest file after testing. |
| |
| This patch also makes ID resolution optional on /api/build-requests so that v3 model based syncing |
| scripts can re-use the same code as the v3 UI to process the JSON. tools/sync-with-buildbot.py has |
| been modified to use this option (useLegacyIdResolution). |
| |
| * config.json: Added configurations for the test httpd server. |
| * init-database.sql: Don't error when tables and types don't exist (when database is empty). |
| * public/api/build-requests.php: |
| (main): Made the ID resolution optional with useLegacyIdResolution. Also removed "updates" from the |
| results JSON since it's never used. |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::__construct): |
| (BuildRequestsFetcher::fetch_roots_for_set_if_needed): Fixed the bug that we would include the same |
| commit multiple times for each root set. |
| * public/include/db.php: |
| (config): If present, use ORG_WEBKIT_PERF_CONFIG_PATH instead of Websites/perf.webkit.org/config.json. |
| * server-tests: Added. |
| * server-tests/api-build-requests-tests.js: Added. Tests for /api/build-requests. |
| (.addMockData): |
| * server-tests/resources: Added. |
| * server-tests/resources/test-server.conf: Added. Apache configuration file for testing. |
| * server-tests/resources/test-server.js: Added. |
| (TestSever): Added. |
| (TestSever.prototype.start): Added. |
| (TestSever.prototype.stop): Added. |
| (TestSever.prototype.remoteAPI): Added. Configures RemoteAPI to be used with the test sever. |
| (TestSever.prototype.database): Added. Returns Database configured to use the test database. |
| (TestSever.prototype._constructTestConfig): Creates config.json for testing. The file is generated by |
| _start and db.php's config() reads it from the environmental variable: ORG_WEBKIT_PERF_CONFIG_PATH. |
| (TestSever.prototype._ensureDataDirectory): Renames public/data to public/original-data if exists, |
| and creates a new empty public/data. |
| (TestSever.prototype._restoreDataDirectory): Deletes public/data and renames public/original-data |
| back to public/data. |
| (TestSever.prototype._ensureTestDatabase): Drops the test database if exists and creates a new one. |
| (TestSever.prototype.initDatabase): Run init-database.sql to start each test with a consistent state. |
| (TestSever.prototype._executePgsqlCommand): Executes a postgres command line tool such as psql. |
| (TestSever.prototype._determinePgsqlDirectory): Finds the directory that contains psql. |
| (TestSever.prototype._startApache): Starts an Apache instance for testing. |
| (TestSever.prototype._stopApache): Stops the Apache instance for testing. |
| (TestSever.prototype._waitForPid): Waits for the Apache pid file to appear or disappear. |
| (before): Start the test server at the beginning. |
| (beforeEach): Re-initialize all tables before each test. |
| (after): Stop the test server at the end. |
| * tools/js/config.js: |
| (Config.prototype.path): |
| (Config.prototype.serverRoot): Added. The path to Websites/perf.webkit.org/public/. |
| (Config.prototype.pathFromRoot): Added. Resolves a path from Websites/perf.webkit.org. |
| * tools/js/database.js: |
| (Database): Now optionally takes the database name to use a different database during testing. |
| (Database.prototype.connect): |
| (Database.prototype.query): Added. |
| (Database.prototype.insert): Added. |
| (tableToPrefixMap): Maps table name to its prefix. Used by Database.insert. |
| * tools/js/remote.js: Added. |
| (RemoteAPI): Added. This is node.js equivalent of RemoteAPI in public/v3/remote.js. |
| (RemoteAPI.prototype.configure): Added. |
| (RemoteAPI.prototype.fetchJSON): Added. |
| (RemoteAPI.prototype.fetchJSONWithStatus): Added. |
| (RemoteAPI.prototype.sendHttpRequest): Added. |
| * tools/sync-with-buildbot.py: |
| (main): Use useLegacyIdResolution as this script relies on the legacy behavior. |
| * unit-tests/checkconfig.js: pg was never directly used in this test. |
| |
| 2016-03-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Delete a file that was supposed to be removed in r198614 for real. |
| |
| * unit-tests/resources/v3-models.js: Removed. |
| |
| 2016-03-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a model for parsing buildbot JSON with unit tests |
| https://bugs.webkit.org/show_bug.cgi?id=155814 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Added BuildbotSyncer and BuildbotBuildEntry classes to parse buildbot JSON files with unit tests. |
| They will be used in the new syncing scripts to improve A/B testing. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest): |
| * tools/js/buildbot-syncer.js: Added. |
| (BuildbotBuildEntry): Added. |
| (BuildbotBuildEntry.prototype.slaveName): Added. |
| (BuildbotBuildEntry.prototype.buildRequestId): Added. |
| (BuildbotBuildEntry.prototype.isInProgress): Added. |
| (BuildbotSyncer): Added. |
| (BuildbotSyncer.prototype.testPath): Added. |
| (BuildbotSyncer.prototype.builderName): Added. |
| (BuildbotSyncer.prototype.platformName): Added. |
| (BuildbotSyncer.prototype.fetchPendingRequests): Added. |
| (BuildbotSyncer.prototype._propertiesForBuildRequest): Added. |
| (BuildbotSyncer.prototype._revisionSetFromRootSetWithExclusionList): Added. |
| (BuildbotSyncer._loadConfig): Added. |
| (BuildbotSyncer._validateAndMergeConfig): Added. |
| (BuildbotSyncer._validateAndMergeProperties): Added. |
| * tools/js/v3-models.js: Copied from unit-tests/resources/v3-models.js. |
| (beforeEach): Deleted since this only defined inside mocha. |
| * unit-tests/analysis-task-tests.js: |
| * unit-tests/buildbot-syncer-tests.js: Added. |
| (sampleiOSConfig): |
| (createSampleBuildRequest): |
| (.smallConfiguration): |
| * unit-tests/measurement-adaptor-tests.js: |
| * unit-tests/measurement-set-tests.js: |
| * unit-tests/resources/mock-v3-models.js: Renamed from unit-tests/resources/v3-models.js. |
| (beforeEach): |
| * unit-tests/test-groups-tests.js: |
| (sampleTestGroup): |
| |
| 2016-03-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add unit tests for test-group.js |
| https://bugs.webkit.org/show_bug.cgi?id=155781 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Added unit tests for test-group.js that would have caught regressions fixed in r198503. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype._renderAnnotations): Added a forgotten break statement. |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.setResult): |
| (BuildRequest): |
| * public/v3/models/test-group.js: |
| * unit-tests/measurement-set-tests.js: Use ./resources/v3-models.js to reduce the code duplication. |
| * unit-tests/resources/v3-models.js: Import more stuff from v3 models. |
| (beforeEach): |
| * unit-tests/test-groups-tests.js: Added. Added some unit tests for TestGroup. |
| (sampleTestGroup): |
| (.testGroupWithStatusList): |
| |
| 2016-03-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo. |
| |
| * config.json: |
| |
| 2016-03-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit log viewer repaints too frequently after r198499 |
| https://bugs.webkit.org/show_bug.cgi?id=155732 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| The bug was caused by InteractiveTimeSeriesChart invoking onchange callback whenever mouse moved even |
| if the current point didn't change. Fixed the bug by avoiding the work if the indicator hadn't changed |
| and avoiding work in the commit log viewer when the requested repository and the revision range were |
| the same as those of the last request. |
| |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer): |
| (CommitLogViewer.prototype.currentRepository): Exit early when repository and the revision range are |
| identical to the one we already have to avoid repaints and issuing multiple network requests. |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype._mouseMove): Don't invoke _notifyIndicatorChanged if the current |
| indicator hadn't changed. |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype._indicatorDidChange): Fixed the bug that unlocking the indicator wouldn't update |
| the URL. We need to check whether the lock state had changed. The old condition was also redundant |
| since _mainChartIndicatorWasLocked is always identically equal to isLocked per the prior assignment. |
| |
| 2016-03-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix A/B testing after r198503. |
| |
| * public/include/build-requests-fetcher.php: |
| |
| 2016-03-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task page is broken after r198479 |
| https://bugs.webkit.org/show_bug.cgi?id=155735 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| * public/api/measurement-set.php: |
| (AnalysisResultsFetcher::fetch_commits): We need to emit the commit ID as done for regular data. |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::fetch_roots_for_set_if_needed): Ditto. Don't use a fake ID after r198479. |
| * public/v3/models/commit-log.js: |
| (CommitLog): Assert that all commit log IDs are integers to catch regressions like this in future. |
| * public/v3/models/root-set.js: |
| (RootSet): Don't resolve Repository here as doing so would modify the shared "root" entry in the JSON |
| we fetched, and subsequent construction of RootSet would fail since this line would blow up trying to |
| find the repository with "[object]" as the ID. |
| * public/v3/models/test-group.js: |
| (TestGroup._createModelsFromFetchedTestGroups): Resolve Repository here. |
| |
| 2016-03-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI sometimes don't update the list of revisions on the commit log viewer |
| https://bugs.webkit.org/show_bug.cgi?id=155729 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Fixed multiple bugs that were affecting the list of blame range and commit logs for the range weren't |
| updated in some cases on v3 UI. Also, the commit log viewer state is now a part of the URL state so |
| opening and closing the commit log viewer will persist across page loads. |
| |
| Also fixed a regression from r198479 that Test object can't be created for a top level test. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.configure): |
| (ChartPaneBase.prototype._mainSelectionDidChange): Fixed the bug that the list of blame range nor the |
| commit log viewer don't get updated when the selected range changes. |
| (ChartPaneBase.prototype._indicatorDidChange): |
| (ChartPaneBase.prototype._didFetchData): |
| (ChartPaneBase.prototype._updateStatus): Extracted from _indicatorDidChange and _didFetchData. |
| (ChartPaneBase.prototype._requestOpeningCommitViewer): Renamed from _openCommitViewer. |
| |
| * public/v3/components/chart-status-view.js: |
| (ChartStatusView.prototype.updateStatusIfNeeded): Fixed the bug that the blame range doesn't get set |
| on the initial page load when the selection range is set but the chart data hadn't been fetched yet. |
| |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer.prototype.view): Fixed the bug that we don't clear out the old list of commits while |
| loading the next set of commits to show as it looked as if the list was never updated. |
| (CommitLogViewer.prototype.render): Fixed the bug that the view always show the last repository name |
| even if there were nothing being fetched or commits to show. |
| |
| * public/v3/components/pane-selector.js: |
| (PaneSelector.prototype.focus): Removed superfluous call to console.log. |
| |
| * public/v3/models/data-model.js: |
| (DataModelObject.listForStaticMap): Generalized the code for all to fix the bug in Test. |
| (DataModelObject.all): |
| |
| * public/v3/models/test.js: |
| (Test): Fixed the bug that this code was relying on the static map to be an array. |
| (Test.topLevelTests): Use newly added listForStaticMap to convert the dictionary to an array. |
| |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView): Always initialize _usedRevisionRange as a triple to simplify code elsewhere. |
| (ChartPaneStatusView.prototype.render): Invoke _revisionCallback when user clicks on a repository |
| expansion mark (>>). Also fixed click handler from the row since this made selecting revision range |
| on the view cumbersome. Now user has to explicitly click on the expansion mark (>>). |
| (ChartPaneStatusView.prototype._setRevisionRange): Now takes shouldNotify, from, and to as arguments |
| as this function must not invoke_revisionCallback inside _updateRevisionListForNewCurrentRepository. |
| (ChartPaneStatusView.prototype.moveRepositoryWithNotification): Use newly added setCurrentRepository |
| instead of manually invoking setCurrentRepository and updateRevisionListWithNotification. |
| (ChartPaneStatusView.prototype.setCurrentRepository): Fixed the bug that we weren't updating the |
| blame list here. |
| (ChartPaneStatusView.prototype.updateRevisionList): Renamed from updateRevisionListWithNotification |
| since we no longer call _revisionCallback. In general, callbacks are only meant to communicate user |
| initiated actions, and not program induced updates like this API so this was a bad pattern anyway. |
| ChartPane now explicitly updates the commit log viewer instead of relying on this function calling |
| _requestOpeningCommitViewer implicitly. |
| (ChartPaneStatusView.prototype._updateRevisionListForNewCurrentRepository): Extracted from |
| updateRevisionListWithNotification so that setCurrentRepository can also call this function. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype._requestOpeningCommitViewer): Overrides ChartPaneBase's method. Open the same |
| repository in other panes via ChartsPage.setOpenRepository. |
| (ChartPane.prototype.setOpenRepository): This method is called when the user selected a repository in |
| another pane. Open the same repository in this pane if it wasn't already open. |
| |
| * public/v3/pages/charts-page.js: |
| (ChartsPage): Added this._currentRepositoryId. |
| (ChartsPage.prototype.serializeState): Serialize _currentRepositoryId. |
| (ChartsPage.prototype.updateFromSerializedState): Set the commit log viewer's |
| (ChartsPage.prototype.setOpenRepository): Added. |
| |
| * tests/api-measurement-set.js: Fixed a test after r198479. |
| |
| 2016-03-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| V3 Perf Dashboard should automatically select initial range when creating a new task |
| https://bugs.webkit.org/show_bug.cgi?id=155677 |
| |
| Reviewed by Joseph Pecoraro. |
| |
| Select the entire range of points for which the analysis task is created by default so that creating |
| a test group to confirm the regression / progression is easy. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): Added a boolean flag which indicates the user had modified main chart's selection. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype.render): Set the main chart's selection to the entire range of points in |
| the analysis task if the user had never modified selection. |
| (AnalysisTaskPage.prototype._chartSelectionDidChange): This callback is invoked only when the user had |
| modified the selection so set _selectionWasModifiedByUser true here unconditionally. |
| |
| 2016-03-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Associated commits don't immediately show up on an analysis task page |
| https://bugs.webkit.org/show_bug.cgi?id=155692 |
| |
| Reviewed by Darin Adler. |
| |
| The bug was caused by resolveCommits in AnalysisTask._constructAnalysisTasksFromRawData not being |
| able to find the matching commit log if the commit log had been created by the charts which don't |
| set the remote identifiers on each CommitLog objects. |
| |
| Fixed the bug by modifying /api/measurement-set to include the commit ID, and making CommitLog |
| use the real database ID as its ID instead of a fake ID we create from repository and revision. |
| |
| Also added a bunch of Mocha unit tests for AnalysisTask.fetchAll. |
| |
| * public/api/measurement-set.php: |
| (MeasurementSetFetcher::execute_query): Fetch commit_id. |
| (MeasurementSetFetcher::format_run): Use pass-by-reference to avoid making a copy of the row. |
| (MeasurementSetFetcher::parse_revisions_array): Include commit_id as the first item in the result. |
| * public/v3/instrumentation.js: |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask): Fixed a bug that _buildRequestCount and _finishedBuildRequestCount could be kept |
| as strings and hasPendingRequests() could return a wrong result because it would perform string |
| inequality instead of numerical inequality. |
| (AnalysisTask.prototype.updateSingleton): Ditto. |
| (AnalysisTask.prototype.dissociateCommit): |
| (AnalysisTask._constructAnalysisTasksFromRawData): |
| (AnalysisTask._constructAnalysisTasksFromRawData.resolveCommits): Use findById now that CommitLog |
| objects all use the same id as the database id. |
| * public/v3/models/commit-log.js: |
| (CommitLog): |
| (CommitLog.prototype.remoteId): Deleted since we no longer create a fake id for commit logs for |
| measurement sets. |
| (CommitLog.findByRemoteId): Deleted. |
| (CommitLog.ensureSingleton): Deleted. |
| (CommitLog.fetchBetweenRevisions): |
| |
| * public/v3/models/data-model.js: |
| (DataModelObject.clearStaticMap): Added to aid unit testing. |
| (DataModelObject.ensureNamedStaticMap): Fixed a typo. Each map is a dictionary, not an array. |
| * public/v3/models/metric.js: |
| * public/v3/models/platform.js: |
| * public/v3/models/root-set.js: |
| (RootSet): Updated per the interface change in CommitLog.ensureSingleton. |
| (MeasurementRootSet): Updated per /api/measurement-set change. Use the first value as the id. |
| * public/v3/models/test.js: |
| * unit-tests/analysis-task-tests.js: Added. |
| (sampleAnalysisTask): |
| (measurementCluster): |
| * unit-tests/checkconfig.js: Added some assertion message to help aid diagnosing the failure. |
| * unit-tests/measurement-adaptor-tests.js: Updated the sample data per the API change in |
| /api/measurement-set and also added assertions for commit log ids. |
| * unit-tests/measurement-set-tests.js: |
| (beforeEach): |
| * unit-tests/resources: Added. |
| * unit-tests/resources/mock-remote-api.js: Added. Extracted from measurement-set-tests.js to be |
| used in analysis-task-tests.js. |
| (assert.notReached.assert.notReached): |
| (global.RemoteAPI.getJSON): |
| (global.RemoteAPI.getJSONWithStatus): |
| (beforeEach): |
| * unit-tests/resources/v3-models.js: Added. Extracted from measurement-set-tests.js to be used in |
| analysis-task-tests.js and added more imports as needed. |
| (importFromV3): |
| (beforeEach): |
| |
| 2016-03-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r198464. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): |
| |
| 2016-03-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r198234. |
| |
| * public/api/commits.php: |
| (main): Typo: fetch_latest_reported -> fetch_last_reported. |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::format_single_commit): commits should be an array. |
| |
| 2016-03-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf Dashboard v3 confuses better and worse on A/B task page |
| https://bugs.webkit.org/show_bug.cgi?id=155675 |
| <rdar://problem/25208723> |
| |
| Reviewed by Joseph Pecoraro. |
| |
| The analysis results viewer on v3 UI sometimes treats regressions as progressions and vice versa when |
| the first set (i.e. set A) of the revisions used in an A/B testing never appears in the original graph, |
| and its latest commit time matches that of the second set, which appears in the original graph. |
| |
| Because the analysis results viewer compares results in the increasing row number, this results in |
| B to be compared to A instead of A to be compared to B. Fixed the bug by preventing the wrong ordering |
| to occur in _buildRowsForPointsAndTestGroups by always inserting a root set A before B when B appears |
| and A doesn't appear in the original graph. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype._collectRootSetsInTestGroups): Remember the succeeding root set B |
| when creating an entry for root set A. |
| (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): Fixed the bug. Also un-duplicated |
| the code to create a new row. |
| (AnalysisResultsViewer.RootSetInTestGroup): Now takes a succeeding root set. e.g. it's B for A and |
| undefined for B in A/B testing. |
| (AnalysisResultsViewer.RootSetInTestGroup.prototype.succeedingRootSet): Added. |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.computeTimeGrid): Fixed the bug that we would end up showing 0 AM instead of dates |
| when both dates and months change. |
| |
| 2016-03-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add unit tests for measurement-set.js and measurement-adapter.js |
| https://bugs.webkit.org/show_bug.cgi?id=155673 |
| |
| Reviewed by Daniel Bates. |
| |
| Add tests which were supposed to be added in r198462. |
| |
| * unit-tests/measurement-adaptor-tests.js: Added. |
| * unit-tests/measurement-set-tests.js: Added. |
| (assert.notReached): Added. |
| (global.RemoteAPI.getJSON): Added. |
| (global.RemoteAPI.getJSONWithStatus): Added. A mock. |
| |
| 2016-03-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add unit tests for measurement-set.js and measurement-adapter.js |
| https://bugs.webkit.org/show_bug.cgi?id=155673 |
| |
| Reviewed by Darin Adler. |
| |
| Added mocha unit tests for MeasurementSet and MeasurementAdapter classes along with the necessary |
| refactoring to run these tests in node. |
| |
| getJSON and getJSONStatus are now under RemoteAPI so that unit tests can mock them. |
| |
| Removed the dependency on v2 UI's TimeSeries and Measurement class by adding a new implementation |
| of TimeSeries in v3 and removing the dependency on Measurement in chart-pane-status-view.js with |
| new helper methods on Build and CommitLog. |
| |
| Many js files now use 'use strict' (node doesn't support class syntax in non-strict mode) and |
| module.exports to export symbols in node's require function. |
| |
| * public/v3/index.html: |
| * public/v3/main.js: |
| * public/v3/models/analysis-results.js: |
| (AnalysisResults.fetch): |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.fetchAll): |
| * public/v3/models/builder.js: |
| (Build): |
| (Build.prototype.builder): Added. Used by ChartPaneStatusView. |
| (Build.prototype.buildNumber): Ditto. |
| (Build.prototype.buildTime): Ditto. |
| * public/v3/models/commit-log.js: |
| (CommitLog.prototype.diff): Ditto. |
| (CommitLog.fetchBetweenRevisions): |
| * public/v3/models/data-model.js: |
| (DataModelObject.cachedFetch): |
| * public/v3/models/measurement-adaptor.js: |
| (MeasurementAdaptor.prototype.applyToAnalysisResults): Renamed from adoptToAnalysisResults. |
| (MeasurementAdaptor.prototype.applyTo): Renamed from adoptToSeries. Now shares a lot more |
| code with applyToAnalysisResults. The code to set 'series' and 'seriesIndex' has been moved |
| to TimeSeries.append. 'measurement' is no longer needed as this patch removes its only use |
| in ChartPaneStatusView. |
| * public/v3/models/measurement-cluster.js: |
| (MeasurementCluster.prototype.addToSeries): Use TimeSeries.append instead of directly mutating |
| series._series. |
| * public/v3/models/measurement-set.js: |
| (Array.prototype.includes): Added a polyfill for node. |
| (MeasurementSet.prototype._fetchSecondaryClusters): Removed a bogus assertion. When fetchBetween |
| is called with a mixture of clusters that have been fetched and not fetched, this assertion fails. |
| (MeasurementSet.prototype._fetch): |
| (TimeSeries.prototype.findById): Moved to time-series.js. |
| (TimeSeries.prototype.dataBetweenPoints): Ditto. |
| (TimeSeries.prototype.firstPoint): Ditto. |
| (TimeSeries.prototype.fetchedTimeSeries): Moved the code to extend the last point to TimeSeries' |
| extendToFuture. |
| * public/v3/models/repository.js: |
| * public/v3/models/root-set.js: |
| (MeasurementRootSet): Ignore repositories that had not been defined (e.g. it could be added after |
| manifest.json had been downloaded but before a given root set is created for an A/B testing). |
| * public/v3/models/time-series.js: |
| (TimeSeries): Added. |
| (TimeSeries.prototype.append): Added. |
| (TimeSeries.prototype.extendToFuture): Added. |
| (TimeSeries.prototype.firstPoint): Moved from measurement-set.js. |
| (TimeSeries.prototype.lastPoint): Added. |
| (TimeSeries.prototype.previousPoint): Added. |
| (TimeSeries.prototype.nextPoint): Added. |
| (TimeSeries.prototype.findPointByIndex): Added. |
| (TimeSeries.prototype.findById): Moved from measurement-set.js. |
| (TimeSeries.prototype.findPointAfterTime): Added. |
| (TimeSeries.prototype.dataBetweenPoints): Moved from measurement-set.js. |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView.prototype.render): Use newly added helper functions on Build. |
| (ChartPaneStatusView.prototype._formatTime): Added. |
| (ChartPaneStatusView.prototype.setCurrentRepository): |
| (ChartPaneStatusView.prototype.computeChartStatusLabels): Rewrote the code using RootSet object on |
| currentPoint and previousPoint instead of Measurement class from v2 UI. Also sort the results using |
| sortByNamePreferringOnesWithURL. |
| * public/v3/remote.js: |
| (RemoteAPI.getJSON): Moved under RemoteAPI. |
| (RemoteAPI.getJSONWithStatus): Ditto. |
| (PrivilegedAPI): |
| (PrivilegedAPI.requestCSRFToken): |
| |
| 2016-03-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add unit tests for config.json and statistics.js |
| https://bugs.webkit.org/show_bug.cgi?id=155626 |
| |
| Reviewed by Darin Adler. |
| |
| Added mocha unit tests for statistics.js and validating config.json. For segmentations, I've extracted |
| real data from our internal perf dashboard. |
| |
| Also fixed some bugs covered by these new tests. |
| |
| * public/shared/statistics.js: |
| (Statistics.movingAverage): Fixed a bug that forwardWindowSize was never used. |
| (Statistics.exponentialMovingAverage): Fixed the bug that the moving average starts at 0. It should |
| start at the first value instead. |
| (.splitIntoSegmentsUntilGoodEnough): Fixed the bug that we may try to segment a time series into |
| more parts than there are data points. Clearly, that doesn't make any sense. |
| (.findOptimalSegmentation): Renamed local variables so that they're more descriptive, and rewrote |
| the debugging code was the old code was emitting some useless data. Also fixed the bug that the length |
| of "segmentation" was off by one (we need segmentCount + 1 elements in the array sine we always |
| include the start of the first segment = 0 and the end of the last segment = values.length). |
| (.SampleVarianceUpperTriangularMatrix): |
| (Statistics): Modernized the export code. |
| * tools/js: Added. |
| * tools/js/config.js: Added. |
| (Config): Added. |
| (Config.prototype.configFilePath): Added. |
| (Config.prototype.value): Added. |
| (Config.prototype.path): Added. |
| * tools/js/database.js: Added. |
| (Database): Added. |
| (Database.prototype.connect): Added. |
| (Database.prototype.disconnect): Added. |
| * unit-tests: Added. |
| * unit-tests/checkconfig.js: Added. Validates config.json. This is useful while setting up |
| a local instance of the perf dashboard. |
| * unit-tests/statistics-tests.js: Added. |
| (assert.almostEqual): Added. Asserts that two floating values are within a given significant digits. |
| (.stdev): |
| (.delta): |
| (.computeWelchsT): |
| |
| 2016-03-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo which was supposed to be fixed in r198351. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype.render): |
| |
| 2016-03-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| An analysis task should be closed if a progression cause is identified |
| https://bugs.webkit.org/show_bug.cgi?id=155549 |
| |
| Reviewed by Chris Dumez. |
| |
| Since a progression is desirable, we should close an analysis task once its cause is identified. |
| |
| Also fix some typos. |
| |
| * init-database.sql: Fixed a typo. |
| * public/api/analysis-tasks.php: |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.prototype.dissociateBug): Renamed from dissociateBug. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype.render): |
| (AnalysisTaskPage.prototype._dissociateBug): Renamed from _dissociateBug. |
| (AnalysisTaskPage.prototype._dissociateCommit): Fixed the typo in the alert. |
| |
| 2016-03-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task page should allow specifying commits that caused or fixed a regression or a progression |
| https://bugs.webkit.org/show_bug.cgi?id=155529 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the capability to associate revisions that caused or fixed a progression or a regression for which |
| an analysis task was created. Added task_commits that stores this relationship and added the backend |
| support to retrieve this table in /api/analysis-tasks and an privileged API to update this table at |
| /privileged-api/associate-commit. |
| |
| Also extracted a new component, MutableListView, out of AnalysisTaskPage to render and manipulate a list |
| of mutable items, and used it to render the list of associated bugs and commits. The view takes a list of |
| kinds (e.g. repositories or bug trackers), and accepts a pair of a kind and arbitrary text as a new item |
| value. |
| |
| * init-database.sql: Added task_commits table. |
| |
| * public/api/analysis-tasks.php: |
| (main): |
| (fetch_associated_data_for_tasks): Renamed from fetch_and_push_bugs_to_tasks now that it also fetches |
| the list of commits associated with each analysis task by calling CommitLogFetcher::fetch_for_tasks. |
| Also fixe the bug that we were not taking |
| (format_task): No longer sets 'category' since the computation of category now depends on the list of |
| commits associated with this analysis task which aren't available until fetch_associated_data_for_tasks. |
| (determine_category): Added. Categorize any analysis tasks with "fixes" commits as "closed" and "causes" |
| commits as "identified". |
| |
| * public/include/commit-log-fetcher.php: |
| (CommitLogFetcher::__construct): Remove the unused instance variable. |
| (CommitLogFetcher::fetch_for_tasks): Added. Fetches all commits associated with a list of analysis tasks. |
| Assumes the caller (fetch_associated_data_for_tasks) had setup "fixes" and "causes" fields on each task. |
| |
| * public/privileged-api/associate-commit.php: Added. Updates task_commits table to associate or disassociate |
| a commit with an analysis task. When the specified analysis task and the specified commit are already |
| associated, we simply update the table instead of adding a duplicating entry or error. For dissociation, |
| the front-end specifies the commit ID. |
| (main): Added. |
| |
| * public/v3/index.html: |
| * public/v3/components/mutable-list-view.js: Added. Used by the list associated bugs and commits. |
| (MutableListView): Added. |
| (MutableListView.prototype.setList): Added. |
| (MutableListView.prototype.setKindList): Added. |
| (MutableListView.prototype.setAddCallback): Added. This callback is invoked when the user tries to add |
| a new item to the list. |
| (MutableListView.prototype.render): Added. |
| (MutableListView.prototype._submitted): Added. |
| (MutableListView.cssTemplate): |
| (MutableListView.htmlTemplate): |
| (MutableListItem): Added. RemovalLink could be a hyperlink or a callback and gets involved when the user |
| tries to delete this item. |
| (MutableListItem.prototype.content): |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask): Added the support of the list of commits that fixed and caused changes. |
| (AnalysisTask.prototype.updateSingleton): Ditto. |
| (AnalysisTask.prototype.causes): Added. |
| (AnalysisTask.prototype.fixes): Added. |
| (AnalysisTask.prototype.associateCommit): Added. Use the API added at /privileged-api/associate-commit |
| to associate a new commit with this analysis task. Each commit has either caused or fixed the change. |
| (AnalysisTask.prototype.dissociateCommit): Added. Use the same API to disassociate each commit. |
| (AnalysisTask._constructAnalysisTasksFromRawData): Find all commits associated with each analysis task. |
| Because commit log objects use a fake ID fdue to /api/measurement-set not providing commit IDs, we must |
| use CommitLog.findByRemoteId to find each commit instead of usual CommitLog.findById. |
| (AnalysisTask._constructAnalysisTasksFromRawData.resolveCommits): Added. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.hasFinished): Renamed from hasCompleted since it was confusing for this._status |
| being "completed" wasn't a necessary condition for this function to return true. |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog): Added the static map for actual commit ID instead of a fake ID created in ensureSingleton. |
| (CommitLog.prototype.remoteId): Added. Returns the real commit ID. |
| (CommitLog.findByRemoteId): Added. Finds an CommitLog object using the real ID. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.hasFinished): Renamed from hasCompleted to match the rename in BuildRequest. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): Added lists for the commits that fixed and caused the change using MutableListView. |
| Also adopted MutableListView for the list of associated bugs. |
| (AnalysisTaskPage.prototype.render): Added the code to populate the newly added lists. |
| (AnalysisTaskPage.prototype._makeCommitListItem): Added. |
| (AnalysisTaskPage.prototype._associateBug): Now this is a callback from MutableListView. |
| (AnalysisTaskPage.prototype._associateCommit): Added. |
| (AnalysisTaskPage.prototype._dissociateCommit): Added. |
| (AnalysisTaskPage.htmlTemplate): |
| (AnalysisTaskPage.cssTemplate): |
| |
| * public/v3/remote.js: |
| (getJSON): Spit out the entire responseText when JSON failed to parse to make debugging easier. |
| |
| 2016-03-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Extract the code to format commit logs into its own PHP file |
| https://bugs.webkit.org/show_bug.cgi?id=155514 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Extracted CommitLogFetcher out of /api/commits so that it could be used in analysis-tasks.php |
| in the future to support associating cause/fix for each analysis task. |
| |
| * public/api/commits.php: |
| * public/include/commit-log-fetcher.php: Added. |
| (CommitLogFetcher) |
| (CommitLogFetcher::__construct): Added. |
| (CommitLogFetcher::repository_id_from_name): Added. |
| (CommitLogFetcher::fetch_between): Added. |
| (CommitLogFetcher::fetch_oldest): Added. |
| (CommitLogFetcher::fetch_latest): Added. |
| (CommitLogFetcher::fetch_last_reported): Added. |
| (CommitLogFetcher::fetch_revision): Added. |
| (CommitLogFetcher::commit_for_revision): Added. |
| (CommitLogFetcher::format_single_commit): Added. |
| (CommitLogFetcher::format_commit): Added. |
| |
| 2016-03-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r196870. |
| |
| * public/include/report-processor.php: |
| |
| 2016-03-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add Size metric to perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=155266 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the "Size" metric and use bytes as its unit. |
| |
| * public/js/helper-classes.js: |
| (PerfTestRuns): |
| * public/v2/data.js: |
| (RunsData.unitFromMetricName): |
| |
| 2016-02-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the support for universal slave password |
| https://bugs.webkit.org/show_bug.cgi?id=154476 |
| |
| Reviewed by David Kilzer. |
| |
| Added the support for universalSlavePassword. |
| |
| * config.json: |
| * public/include/report-processor.php: |
| (ReportProcessor::process): |
| (ReportProcessor::authenticate_and_construct_build_data): Extracted from process(). |
| |
| 2016-02-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis tasks page complains about missing repository but with a wrong name |
| https://bugs.webkit.org/show_bug.cgi?id=154468 |
| |
| Reviewed by Chris Dumez. |
| |
| Fixed the bug by using the right variable in the template literal. |
| |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm.prototype._computeRootSetMap): Use querySelector here since Chrome doesn't have |
| getElementsByClassName on ShadowRoot. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingRootSetList): Use name which is the name of |
| repository here. |
| |
| 2016-02-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Revert an unintended change made in the previous commit. |
| |
| * init-database.sql: |
| |
| 2016-02-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should let user cancel pending A/B testing and hide failed ones |
| https://bugs.webkit.org/show_bug.cgi?id=154433 |
| |
| Reviewed by Chris Dumez. |
| |
| Added a button to hide a test group in the details view (the bottom table) in the analysis task page, and |
| "Show hidden tests" link to show the hidden test groups on demand. When a test group is hidden, all pending |
| requests in the group will also be canceled since a common scenario of using this feature is that the user |
| had triggered an useless A/B testing; e.g. all builds will fail, wrong, etc... We can revisit and add the |
| capability to just cancel the pending requests and leaving the group visible later if necessary. |
| |
| Run `ALTER TYPE build_request_status_type ADD VALUE 'canceled';` to add the new type. |
| |
| * init-database.sql: Added testgroup_hidden column to analysis_test_groups table and added 'canceled' |
| as a value to build_request_status_type table. |
| * public/api/test-groups.php: |
| (format_test_group): Added 'hidden' field in the JSON result. |
| * public/privileged-api/update-test-group.php: |
| (main): Added the support for updating testgroup_hidden column. When this column is set to true, also |
| cancel all pending build requests (by setting its request_status to 'canceled' which will be ignore by |
| the syncing script). |
| * public/v3/components/test-group-results-table.js: |
| (TestGroupResultsTable.prototype.setTestGroup): Reset _renderedTestGroup here so that the next call to |
| render() will update the table; e.g. when build requests' status change from 'Pending' to 'Canceled'. |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.hasCompleted): A build request is considered complete/finished if it's canceled. |
| (BuildRequest.prototype.hasPending): Added. |
| (BuildRequest.prototype.statusLabel): Handle 'canceled' status. |
| * public/v3/models/test-group.js: |
| (TestGroup): |
| (TestGroup.prototype.updateSingleton): Added to update 'hidden' field. |
| (TestGroup.prototype.isHidden): Added. |
| (TestGroup.prototype.hasPending): Added. |
| (TestGroup.prototype.hasPending): Added. |
| (TestGroup.prototype.updateHiddenFlag): Added. Uses the privileged API to update testgroup_hidden column. |
| The JSON API also updates the status of the 'pending' build requests in the group to 'canceled'. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): Added _showHiddenTestGroups and _filteredTestGroups as instance variables. |
| (AnalysisTaskPage.prototype._didFetchTestGroups): |
| (AnalysisTaskPage.prototype._showAllTestGroups): Added. |
| (AnalysisTaskPage.prototype._didUpdateTestGroupHiddenState): Extracted from _didFetchTestGroups. |
| (AnalysisTaskPage.prototype._renderTestGroupList): Use the filtered list of test groups to show the list |
| of test groups. When all test groups are shown, we would first show the hidden ones after the regular ones. |
| (AnalysisTaskPage.prototype._createTestGroupListItem): Extracted from _renderTestGroupList. |
| (AnalysisTaskPage.prototype._renderTestGroupDetails): Update the text inside the button to hide the test |
| group. Also show a warning text that the pending requests will be canceled if there are any. |
| (AnalysisTaskPage.prototype._hideCurrentTestGroup): Added. |
| (AnalysisTaskPage.cssTemplate): Updated the style. |
| |
| 2016-02-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The rows in the analysis results table should be expandable |
| https://bugs.webkit.org/show_bug.cgi?id=154427 |
| |
| Reviewed by Chris Dumez. |
| |
| Added "(Expand)" link between rows that have hidden points. Upon click it inserts the hidden rows. |
| |
| We insert around five rows at a time when there are hundreds of hidden points but we also avoid leaving |
| behind expandable rows of less than two rows. |
| |
| Also fixed a bug in CustomizableTestGroupForm that getElementsById would throw in the shipping Safari |
| because getElementsById doesn't exist on Element.prototype by using class name instead. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer): |
| (AnalysisResultsViewer.prototype.setCurrentTestGroup): Removed superfluous call to render(). |
| (AnalysisResultsViewer.prototype.setPoints): Always show the start and the end points. |
| (AnalysisResultsViewer.prototype.buildRowGroups): |
| (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): Add an instance of ExpandableRow which |
| shows a "(Expand)" link to show hidden rows here. |
| (AnalysisResultsViewer.prototype._expandBetween): Added. Expands rows between two points. |
| (AnalysisResultsViewer.cssTemplate): Added rules for "(Expand)" links. |
| (AnalysisResultsViewer.ExpandableRow): Added. |
| (AnalysisResultsViewer.ExpandableRow.prototype.resultContent): Added. Overrides what's in the results column. |
| (AnalysisResultsViewer.ExpandableRow.prototype.heading): Added. Generates "(Expand)" link. |
| |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm.prototype._computeRootSetMap): Use getElementsByClassName instead of |
| getElementById. |
| (CustomizableTestGroupForm.prototype._classForLabelAndRepository): Renamed from _idForLabelAndRepository. |
| (CustomizableTestGroupForm._constructRevisionRadioButtons): Set class name instead of id. |
| |
| * public/v3/components/results-table.js: |
| (ResultsTable.prototype.render): Don't generate radio buttons to select a row when root set is missing; |
| e.g. for rows that show "(Expand)" links. |
| |
| 2016-02-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Statistically significant A/B testing results should be color coded in details view |
| https://bugs.webkit.org/show_bug.cgi?id=154414 |
| |
| Reviewed by Chris Dumez. |
| |
| Color code the statistically significant comparisions in TestGroupResultsTable as done in the analysis |
| results viewer. |
| |
| * public/v3/components/customizable-test-group-form.js: |
| (CustomizableTestGroupForm.cssTemplate): Build fix after r196768. |
| * public/v3/components/test-group-results-table.js: |
| (TestGroupResultsTable.prototype.buildRowGroups): Add the status as a class name. |
| (TestGroupResultsTable.cssTemplate): Added styles to color-code statistically significant results. |
| |
| 2016-02-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI should allow custom revisions for A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=154379 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the capability to customize revisions selected in the overview chart and the results viewer. |
| |
| Newly added CustomizableTestGroupForm is responsible for allowing users to modify the set of revisions in |
| a new A/B testing group. Unlike TestGroupForm which doesn't know anything about which revisions are selected |
| for each project/repository, CustomizableTestGroupForm is aware of the list of revisions used in each set. |
| |
| The list of revisions used in each set is represented by RootSet if users had not customized them, and |
| CustomRootSet otherwise; the latter was added since regular RootSet object requires CommitLog and other |
| DataModelObjects which are hard to create without corresponding database entries. |
| |
| * public/v3/components/customizable-test-group-form.js: Added. |
| (CustomizableTestGroupForm): Added. |
| (CustomizableTestGroupForm.prototype.setRootSetMap): Added. |
| (CustomizableTestGroupForm.prototype._submitted): Overrides the superclass' method. |
| (CustomizableTestGroupForm.prototype._customize): Ditto. Unlike TestGroupForm's callback, this class' |
| callback passes in a root set map as the third argument. |
| (CustomizableTestGroupForm.prototype._computeRootSetMap): Added. Returns this._rootSetMap, which is set by |
| AnalysisTaskPage if user had not customized the root sets. Otherwise return a new map with CustomRootSet's. |
| (CustomizableTestGroupForm.prototype.render): Added. Creates a table to allow customization of root sets. |
| (CustomizableTestGroupForm._constructRevisionRadioButtons): Added. |
| (CustomizableTestGroupForm._createRadioButton): Added. |
| (CustomizableTestGroupForm.cssTemplate): Added. |
| (CustomizableTestGroupForm.formContent): Added. This method is called by TestGroupForm.htmlTemplate. |
| * public/v3/components/test-group-form.js: |
| (TestGroupForm): Updated the various methods to not directly mutate DOM. Store the state in instance |
| variables and update DOM in render() as done elsewhere. |
| (TestGroupForm.prototype.setNeedsName): Deleted. We no longer need this flag since TestGroupForm which is |
| used for retries never needs a name and CustomizableTestGroupForm which is used to create a new test group |
| always requires a name. |
| (TestGroupForm.prototype.setDisabled): |
| (TestGroupForm.prototype.setLabel): |
| (TestGroupForm.prototype.setRepetitionCount): |
| (TestGroupForm.prototype.render): Added. |
| (TestGroupForm.prototype._submitted): Moved the code to prevent the default action has been moved to the |
| constructor since this method is overridden by CustomizableTestGroupForm. |
| (TestGroupForm.cssTemplate): Added. |
| (TestGroupForm.htmlTemplate): |
| (TestGroupForm.formContent): Extracted from htmlTemplate. |
| * public/v3/index.html: |
| * public/v3/models/repository.js: |
| (Repository.sortByNamePreferringOnesWithURL): Added. |
| * public/v3/models/root-set.js: |
| (RootSet.prototype.revisionForRepository): Added so that _createTestGroupAfterVerifyingRootSetList can retrieve |
| the revision information from CustomRootSet without going through CommitLog objects since CustomRootSet doesn't |
| have associated CommitLog objects. |
| (CustomRootSet): Added. Used by CustomizableTestGroupForm to create a custom root map since regular RootSet |
| requires CommitLog and other related objects which are hard to create without database entries. |
| (CustomRootSet.prototype.setRevisionForRepository): Added. |
| (CustomRootSet.prototype.repositories): Added. |
| (CustomRootSet.prototype.revisionForRepository): Added. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): |
| (AnalysisTaskPage.prototype.render): Removed the reference to v2 UI since v3 UI is now strictly more powerful |
| than v2 UI. Also update the root set maps in each form here. |
| (AnalysisTaskPage.prototype._retryCurrentTestGroup): No longer takes unused name argument as it got removed |
| from TestGroupForm. |
| (AnalysisTaskPage.prototype._chartSelectionDidChange): No longer updates the disabled-ness here since it's now |
| done in render() via setRootSetMap(). |
| (AnalysisTaskPage.prototype._createNewTestGroupFromChart): Now takes rootSetMap as an argument. |
| (AnalysisTaskPage.prototype._selectedRowInAnalysisResultsViewer): No longer updates the disabled-ness here |
| since it's now done in render() via setRootSetMap(). |
| (AnalysisTaskPage.prototype._createNewTestGroupFromViewer): Now takes rootSetMap as an argument. |
| (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingRootSetList): Take a dictionary of root set labels |
| such as A and B, which maps to a RootSet or a newly-added CustomRootSet. |
| (AnalysisTaskPage.htmlTemplate): Use customizable-test-group-form for creating a new A/B testing group. Retry |
| form will continue to use TestGroupForm since customizing revisions is non-sensical in retries. |
| (AnalysisTaskPage.cssTemplate): Updated the style. |
| |
| 2016-02-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI has the capability to schedule an A/B testing in a specific range |
| https://bugs.webkit.org/show_bug.cgi?id=154329 |
| |
| Reviewed by Chris Dumez. |
| |
| Extended AnalysisTaskChartPane and ResultsTable so that users can select a range of points in either |
| the overview chart pane and the results viewer table. Extracted TestGroupForm out of the analysis task |
| page and used right below those two components in the analysis task page. |
| |
| * public/v3/components/results-table.js: |
| (ResultsTable): |
| (ResultsTable.prototype.setRangeSelectorLabels): Added. |
| (ResultsTable.prototype.setRangeSelectorCallback): Added. |
| (ResultsTable.prototype.selectedRange): Added. |
| (ResultsTable.prototype._rangeSelectorClicked): Added. |
| (ResultsTable.prototype.render): Generate radio boxes to select a range. |
| |
| * public/v3/components/test-group-form.js: |
| (TestGroupForm): |
| (TestGroupForm.prototype.setStartCallback): Added. |
| (TestGroupForm.prototype.setNeedsName): Added. |
| (TestGroupForm.prototype.setDisabled): Added. |
| (TestGroupForm.prototype.setLabel): Added. |
| (TestGroupForm.prototype.setRepetitionCount): Added. |
| (TestGroupForm.prototype._submitted): Added. |
| (TestGroupForm.htmlTemplate): Extracted from AnalysisTaskPage.htmlTemplate. |
| |
| * public/v3/index.html: |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane.prototype._mainSelectionDidChange): Added. Delegates the work to AnalysisTaskPage. |
| (AnalysisTaskChartPane.prototype.selectedPoints): Added. |
| (AnalysisTaskPage): |
| (AnalysisTaskPage.prototype.title): |
| (AnalysisTaskPage.prototype.render): |
| (AnalysisTaskPage.prototype._renderTestGroupDetails): Use TestGroupForm's methods instead of mutating DOM. |
| (AnalysisTaskPage.prototype._retryCurrentTestGroup): |
| (AnalysisTaskPage.prototype._chartSelectionDidChange): Added. |
| (AnalysisTaskPage.prototype._createNewTestGroupFromChart): Added. |
| (AnalysisTaskPage.prototype._selectedRowInAnalysisResultsViewer): Added. |
| (AnalysisTaskPage.prototype._createNewTestGroupFromViewer): Added. |
| (AnalysisTaskPage.prototype._createRetryNameForTestGroup): |
| (AnalysisTaskPage.prototype._createTestGroupAfterVerifyingRootSetList): Extracted from _retryCurrentTestGroup |
| so that we can call it in _createNewTestGroupFromChart and _createNewTestGroupFromViewer. |
| (AnalysisTaskPage.htmlTemplate): |
| |
| 2016-02-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Extract the code specific to v2 UI out of shared statistics.js |
| https://bugs.webkit.org/show_bug.cgi?id=154277 |
| |
| Reviewed by Chris Dumez. |
| |
| Extracted statistics-strategies.js out of statistics.js for v2 UI and detect-changes.js. The intent is to |
| deprecate this file once we implement refined statistics tools in v3 UI and adopt it in detect-changes.js. |
| |
| * public/shared/statistics.js: |
| (Statistics.movingAverage): Extracted from the "Simple Moving Average" strategy. |
| (Statistics.cumultaiveMovingAverage): Extracted from the "Cumulative Moving Average" strategy. |
| (Statistics.exponentialMovingAverage): Extracted from the "Exponential Moving Average" strategy. |
| Use a temporary "movingAverage" to keep the last moving average instead of relying on the previous |
| entry in "averages" array to avoid special casing an array of length 1 and starting the loop at i = 1. |
| (Statistics.segmentTimeSeriesGreedyWithStudentsTTest): Extracted from "Segmentation: Recursive t-test" |
| strategy. Don't create the list of averages to match segmentTimeSeriesByMaximizingSchwarzCriterion here. |
| It's done in newly added averagesFromSegments. |
| (Statistics.segmentTimeSeriesByMaximizingSchwarzCriterion): Extracted from |
| "Segmentation: Schwarz criterion" strategy. |
| (.recursivelySplitIntoTwoSegmentsAtMaxTIfSignificantlyDifferent): Just store the start index to match |
| * public/v2/app.js: |
| (App.Pane.updateStatisticsTools): |
| (App.Pane._computeMovingAverageAndOutliers): |
| * public/v2/data.js: |
| * public/v2/index.html: |
| * public/v2/statistics-strategies.js: Added. |
| (StatisticsStrategies.MovingAverageStrategies): Added. |
| (averagesFromSegments): Extracted from "Segmentation: Schwarz criterion" strategy. Now used by both |
| "Segmentation: Recursive t-test" and "Segmentation: Schwarz criterion" strategies. |
| (StatisticsStrategies.EnvelopingStrategies): Moved from Statistics.EnvelopingStrategies. |
| (StatisticsStrategies.TestRangeSelectionStrategies): Moved from Statistics.TestRangeSelectionStrategies. |
| (createWesternElectricRule): Moved from statistics.js. |
| (countValuesOnSameSide): Ditto. |
| (StatisticsStrategies.executeStrategy): Moved from Statistics.executeStrategy. |
| * tools/detect-changes.js: |
| (computeRangesForTesting): |
| |
| 2016-02-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v1 UI and v2 UI should share statistics.js |
| https://bugs.webkit.org/show_bug.cgi?id=154262 |
| |
| Reviewed by Chris Dumez. |
| |
| Share statistics.js between v1 and v2 UI. |
| |
| * public/index.html: |
| * public/js/shared.js: Deleted. |
| * public/js/statistics.js: Removed. |
| * public/shared: Added. |
| * public/shared/statistics.js: Moved from Websites/perf.webkit.org/public/v2/js/statistics.js. |
| * public/v2/index.html: |
| * public/v2/js/statistics.js: Removed. |
| * public/v3/index.html: |
| * tools/detect-changes.js: |
| |
| 2016-02-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI sometimes shows same dates twice on the x-axis of time series charts |
| https://bugs.webkit.org/show_bug.cgi?id=154210 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by the label generation code in TimeSeriesChart.computeTimeGrid never emitting hours. |
| |
| Use hours instead of dates as labels when the current time's date is same as the previous label's date. |
| Always include dates before entering this mode to avoid just having hours as labels on the entire x-axis. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype._renderXAxis): Slightly increase the "average" width of x-axis label. |
| (TimeSeriesChart.computeTimeGrid): See above. Also assert that the number of labels we generate never |
| exceeds maxLabels as a sanity check. |
| (TimeSeriesChart._timeIterators): Added an iterator that increments by two hours for zoomed graphs. |
| |
| 2016-02-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI should show status and associated bugs on analysis task pages |
| https://bugs.webkit.org/show_bug.cgi?id=154212 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the capability to see and modify the status and the list of associated of bugs on analysis task pages. |
| |
| Also added the list of related tasks, which are analysis tasks associated with the same bug or have |
| overlapping time ranges with the same test metric but on a potentially different platform. |
| |
| In addition, categorize analysis tasks with the status of "no change" or "inconclusive" as "closed" as no |
| further action can be taken (users can bring them back to non-closed state without any restrictions). |
| |
| * public/api/analysis-tasks.php: |
| (format_task): Categorize 'unchanged' and 'inconclusive' analysis tasks as closed. |
| |
| * public/privileged-api/associate-bug.php: |
| (main): Added shouldDelete as a new mechanism to disassociate a bug since v3 UI shares a single Bug object |
| between multiple analysis tasks (as it should have been in the first place). |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase): |
| (ChartPaneBase.prototype._fetchAnalysisTasks): Since each analysis task's change type (status/result) could |
| change, we need to create annotation objects during each render() call. |
| (ChartPaneBase.prototype.render): |
| (ChartPaneBase.prototype._renderAnnotations): Extracted from ChartPaneBase.prototype._fetchAnalysisTasks to |
| do that. I was afraid of the perf impact of this but it doesn't seem to be an issue in my testing. |
| (ChartPaneBase.cssTemplate): Removed superfluous margins (moved to ChartPane.cssTemplate) around the charts |
| since they are only useful in the charts page. |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask): |
| (AnalysisTask.prototype.updateSingleton): Added a comment as to why object.result cannot be renamed to |
| object.changeType in the JSON API. |
| (AnalysisTask.prototype.updateName): Added. |
| (AnalysisTask.prototype.updateChangeType): Added. |
| (AnalysisTask.prototype._updateRemoteState): Added. |
| (AnalysisTask.prototype.associateBug): Added. |
| (AnalysisTask.prototype.disassociateBug): Added. |
| (AnalysisTask.fetchRelatedTasks): Added. See above for the criteria of related-ness. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): |
| (AnalysisTaskPage.prototype.updateFromSerializedState): |
| (AnalysisTaskPage.prototype._fetchRelatedInfoForTaskId): Extracted from updateFromSerializedState. |
| (AnalysisTaskPage.prototype._didFetchRelatedAnalysisTasks): Added. |
| (AnalysisTaskPage.prototype.render): Render the list of associated bugs, the list of bug trackers (so that |
| users can use it to associate with a new bug), and the list of related analysis tasks. |
| (AnalysisTaskPage.prototype._renderTestGroupList): Extracted from render since it was getting too long. |
| (AnalysisTaskPage.prototype._renderTestGroupDetails): Ditto. |
| (AnalysisTaskPage.prototype._updateChangeType): Added. |
| (AnalysisTaskPage.prototype._associateBug): Added. |
| (AnalysisTaskPage.prototype._disassociateBug): Added. |
| (AnalysisTaskPage.htmlTemplate): Added various elements to show and modify the status, associate bugs, |
| and a list of related analysis tasks. |
| (AnalysisTaskPage.cssTemplate): Added various styles for those form controls. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.cssTemplate): Moved the margins from ChartPaneBase.cssTemplate. |
| |
| 2016-02-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should allow renaming analysis tasks and test groups |
| https://bugs.webkit.org/show_bug.cgi?id=154200 |
| |
| Reviewed by Chris Dumez. |
| |
| Allow editing names of analysis tasks and A/B testing groups in the v3 UI. |
| |
| Added the support for updating the name to the privileged API at /privileged-api/update-analysis-task |
| and added a new prevailed API to update A/B testing groups at /privileged-api/update-test-group. |
| |
| * public/privileged-api/update-analysis-task.php: Added the support for renaming the analysis task. |
| (main): |
| |
| * public/privileged-api/update-test-group.php: Added. Supports updating the test group's name. |
| (main): |
| |
| * public/v3/components/editable-text.js: Added. |
| (EditableText): Added. A new editable text label control. It looks like a text node with "(Edit)" link |
| at the end which allow users to go into the "editing mode", which reveals an input element. |
| The user can exit the editing mode by either moving the focus away from the control or clicking on |
| "(Save)" at the end. It calls _updateCallback in the latter case. |
| (EditableText.prototype.editedText): Returns the current value of the input element user. |
| (EditableText.prototype.setText): Sets the label. This does not live-update the input element until |
| the user exists the current editing mode and re-enters it. |
| (EditableText.prototype.setStartedEditingCallback): Sets a callback which gets called when the user |
| requested to enter the editing mode. Since EditableText relies on AnalysisTaskPage to render, this |
| callback only exits to call EditableText.render() in AnalysisTask._didStartEditingTaskName. |
| (EditableText.prototype.setUpdateCallback): Sets a callback which gets called when the user exits |
| the editing mode by activating the "(Save)" link. This callback MUST return a promise upon resolution |
| of which the control gets out of the editing mode. While the promise is in flight, the input element |
| becomes readonly. |
| (EditableText.prototype.render): Updates various states of the elements. When _updatingPromise is not |
| falsy, we make the input element readonly and show '(...)' on the link. Don't show the action link |
| if the label is empty (e.g. analysis task or test group is still being fetched). |
| (EditableText.prototype._didClick): Called when the user clicked on the action link. Enter the editing |
| mode or save the edited label via _updateCallback. |
| (EditableText.prototype._didBlur): Exit the editing mode without saving if the input element is not |
| focused, there is no inflight promise returned by _updateCallback, and the action link "(Save)" does |
| not have the focus. |
| (EditableText.prototype._didUpdate): Called when exiting the editing mode. |
| (EditableText.htmlTemplate): |
| (EditableText.cssTemplate): |
| |
| * public/v3/index.html: Include newly added editable-text.js. |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.prototype.updateSingleton): Added. |
| (AnalysisTask.prototype.updateName): Added. Uses PrivilegedAPI to update the name and re-fetches |
| the analysis task from the sever. |
| (AnalysisTask._constructAnalysisTasksFromRawData): Use ensureSingleton instead of manually calling |
| findById since we need to update the name of the singleton object we found (via updateSingleton). |
| |
| * public/v3/models/bug.js: |
| (Bug.ensureSingleton): Moved the code to compute the synthetic id from AnalysisTask's |
| _constructAnalysisTasksFromRawData. |
| (Bug.prototype.updateSingleton): Added. Just assert that nothing changes. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.updateSingleton): Added. Assert that the intrinsic values of a build request |
| doesn't change and update status text, status url, and build id as they could change. |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog): Made the constructor argument conform to the convention of id, object pair so that we can |
| use DataModelObject.ensureSingleton. |
| (CommitLog.ensureSingleton): |
| (CommitLog.prototype.updateSingleton): Extracted from CommitLog.ensureSingleton. |
| |
| * public/v3/models/data-model.js: |
| (DataModelObject.ensureSingleton): Call newly added updateSingleton. |
| (DataModelObject.prototype.updateSingleton): |
| (LabeledObject): Removed the name map since it's never used (findByName is never called anywhere). |
| (LabeledObject.prototype.updateSingleton): Added. Updates _name. |
| (LabeledObject.findByName): Deleted. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.updateName): Added. Uses PrivilegedAPI to update the name and re-fetches |
| the test group from the sever. |
| (TestGroup._createModelsFromFetchedTestGroups): Removed bogus code. A root set doesn't have a test |
| group associated with it since multiple test groups can share a single root set (this property doesn't |
| even exist). |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): Removed useless _taskId and added this._testGroupLabelMap and this._taskNameLabel. |
| (AnalysisTaskPage.prototype.updateFromSerializedState): Cleanup. |
| (AnalysisTaskPage.prototype._didFetchTask): Assert that this function is called exactly once. |
| (AnalysisTaskPage.prototype.render): Use this._task.id() to show the v2 link. Use EditableText to show |
| the names of the analysis task and the associated test groups. Hide the overview chart and the list of |
| test groups (along with the retry/confirm button) when the analysis task failed to fetch. We always |
| update the names of the analysis task and the associated test groups since they could be updated by |
| the server. |
| (AnalysisTaskPage.prototype._didStartEditingTaskName): Added. |
| (AnalysisTaskPage.prototype._updateTaskName): Added. |
| (AnalysisTaskPage.prototype._updateTestGroupName): Added. |
| (AnalysisTaskPage.htmlTemplate): Updated the style. |
| |
| 2016-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Land the change that was supposed to be the part of r196463. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._didFetchTestGroups): Select the latest test group by default. |
| |
| 2016-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Refine v3 UI's analysis task page |
| https://bugs.webkit.org/show_bug.cgi?id=154152 |
| |
| Reviewed by Chris Dumez. |
| |
| This patch makes the following refinements to the analysis task page: |
| - Always show the relative different of in-progress A/B testing. |
| - Make the annotations (colored bars) in the chart open other analysis tasks. |
| - Order the A/B testing groups in the reverse chronological order. |
| - Select the time range corresponding to the current test group. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.cssTemplate): Fixed the bug that pending and running testing groups are no longer |
| colored after r196440. Use a slightly more opaque color for currently running groups compared to pending ones. |
| |
| * public/v3/components/chart-pane-base.js: |
| (ChartPaneBase.prototype.setMainSelection): Added. |
| (ChartPaneBase.prototype._openAnalysisTask): Moved the code from ChartPane._openAnalysisTask so that it can be |
| reused in both AnalysisTaskChartPane and ChartPane (in charts page). |
| (ChartPaneBase.prototype.router): Added. Overridden by each subclass. |
| |
| * public/v3/components/test-group-results-table.js: |
| (TestGroupResultsTable.prototype.buildRowGroups): Always show the summary (relative difference of A to B) as |
| long as there are some results in each set. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.compareTestResults): Always set .label and .fullLabel with the relative change as long as |
| there are some values. Keep using "pending" and "running" in .status since that would determine the color of |
| stacking blocks representing those A/B testing groups. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane): |
| (AnalysisTaskChartPane.prototype.setPage): Added. |
| (AnalysisTaskChartPane.prototype.router): Added. |
| (AnalysisTaskPage): |
| (AnalysisTaskPage.prototype.render): Show the list of A/B testing groups in the reverse chronological order. |
| Also set the main chart's selection to the time range of the current test group. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.prototype.router): Added. |
| (ChartPane.prototype._openAnalysisTask): Moved to ChartPaneBase.prototype._openAnalysisTask. |
| |
| 2016-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a script to process backlogs created while perf dashboard was in the maintenance mode |
| https://bugs.webkit.org/show_bug.cgi?id=154140 |
| |
| Reviewed by Chris Dumez. |
| |
| Added a script to process the backlog JSONs created while the perf dashboard was put in the maintenance mode. |
| It re-submits each JSON file to the perf dashboard using the same server config file used by syncing scripts. |
| |
| * public/include/report-processor.php: |
| (TestRunsGenerator::test_value_list_to_values_by_iterations): Fixed a bug in the error message code. It was |
| referencing an undeclared variable. |
| * tools/process-maintenance-backlog.py: Added. |
| |
| 2016-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| AnalysisResultsViewer never uses this._smallerIsBetter |
| https://bugs.webkit.org/show_bug.cgi?id=154134 |
| |
| Reviewed by Chris Dumez. |
| |
| Removed the unused instance variable _smallerIsBetter from AnalysisResultsViewer and TestGroupStackingBlock. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer): Removed the unused _smallerIsBetter. |
| (AnalysisResultsViewer.prototype.setSmallerIsBetter): Deleted. |
| (AnalysisResultsViewer.prototype.buildRowGroups): |
| (AnalysisResultsViewer.TestGroupStackingBlock): Removed the unused _smallerIsBetter. |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.prototype._didFetchTask): |
| |
| 2016-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r196440. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.addBuildRequest): Clear the map instead of setting the property to null. |
| |
| 2016-02-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have UI to retry A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=154090 |
| |
| Reviewed by Chris Dumez. |
| |
| Added a button to re-try an existing A/B testing group with a custom repetition count. The same button functions |
| as a way of confirming the progression/regression when there have been no A/B testing scheduled in the task. |
| |
| Also fixed the bug that A/B testing groups that have been waiting for other test groups will be shown as "running". |
| |
| * public/v3/components/results-table.js: |
| (ResultsTable.cssTemplate): Don't pad the list of extra repositories when it's empty. |
| |
| * public/v3/components/test-group-results-table.js: |
| (TestGroupResultsTable.prototype.buildRowGroups): Use TestGroup.labelForRootSet instead of manually |
| computing the letter for each configuration set. |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.hasStarted): Added. |
| |
| * public/v3/models/data-model.js: |
| (DataModelObject.ensureSingleton): Added. |
| (DataModelObject.cachedFetch): Added noCache option. This is used when re-fetching the test groups after |
| creating one. |
| |
| * public/v3/models/measurement-cluster.js: |
| (MeasurementCluster.prototype.startTime): Added. |
| |
| * public/v3/models/measurement-set.js: |
| (MeasurementSet.prototype.hasFetchedRange): Added. Returns true only if there are no "holes" (cluster |
| yet to be fetched) between the specified time range. This was added to fix a bug in AnalysisTaskPage's |
| _didFetchMeasurement. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup): Added this._rootSetToLabel. |
| (TestGroup.prototype.addBuildRequest): Reset this._rootSetToLabel along with this._requestedRootSets. |
| (TestGroup.prototype.repetitionCount): Added. Returns the number of iterations executed per set. We assume that |
| every root set in the test group shares a single repetition count. |
| (TestGroup.prototype.requestedRootSets): Now populates this._rootSetToLabel for labelForRootSet. |
| (TestGroup.prototype.labelForRootSet): Added. |
| (TestGroup.prototype.hasStarted): Added. |
| (TestGroup.prototype.compareTestResults): Use 'running' and 'pending' to differentiate test groups that are waiting |
| for other groups to finish running from the ones that are actually running ('incomplete' before this patch). |
| (TestGroup.fetchByTask): |
| (TestGroup.createAndRefetchTestGroups): Added. Creates a new test group using the privileged-api/create-test-group |
| and fetches the list of test groups for the specified analysis task. |
| (TestGroup._createModelsFromFetchedTestGroups): Extracted from TestGroup.fetchByTask. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): Initialize _renderedCurrentTestGroup to undefined so that we'd always can differentiate |
| the initial call to AnalysisTaskPage.render and subsequent calls in which it's identical to _currentTestGroup. |
| (AnalysisTaskPage.prototype._didFetchMeasurement): Fixed a bug that we don't exit early even when some |
| clusters in between startPoint and endPoint are still being fetched via newly added hasFetchedRange. |
| (AnalysisTaskPage.prototype.render): Update the default repetition count based on the current test group. |
| Also update the label of the button to "Confirm the change" if there is no A/B testing in this task. |
| (AnalysisTaskPage.prototype._retryCurrentTestGroup): Added. Re-triggers an existing A/B testing group or creates |
| the A/B testing for the entire range of the analysis task. |
| (AnalysisTaskPage.prototype._hasDuplicateTestGroupName): Added. |
| (AnalysisTaskPage.prototype._createRetryNameForTestGroup): Added. |
| (AnalysisTaskPage.htmlTemplate): Added form controls to re-trigger A/B testing. |
| (AnalysisTaskPage.cssTemplate): Updated the style. |
| |
| 2016-02-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Removed the duplicated definition of ChartPaneBase. |
| |
| * public/v3/components/chart-pane-base.js: |
| |
| 2016-02-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task page on v3 UI should show charts |
| https://bugs.webkit.org/show_bug.cgi?id=154057 |
| |
| Reviewed by Chris Dumez. |
| |
| Extracted ChartPaneBase out of ChartPane and added an instance of its new subclass, AnalysisTaskChartPane, |
| to the analysis task page. The main difference is that ChartPaneBase doesn't depend on the presence of |
| this._chartsPage unlike ChartPane. It also doesn't have the header with toolbar (to show breakdown, etc...). |
| |
| * public/v3/components/base.js: |
| (ComponentBase.prototype._constructShadowTree): Call htmlTemplate() and cssTemplate() with the right "this". |
| |
| * public/v3/components/chart-pane-base.js: Added. |
| (ChartPaneBase): Extracted from ChartPane. |
| (ChartPaneBase.prototype.configure): Extracted from the constructor. Separating this function allows the |
| component to be instantiated inside a HTML template. |
| (ChartPaneBase.prototype._fetchAnalysisTasks): Moved from ChartPane._fetchAnalysisTasks. |
| (ChartPaneBase.prototype.platformId): Ditto. |
| (ChartPaneBase.prototype.metricId): Ditto. |
| (ChartPaneBase.prototype.setOverviewDomain): Ditto. |
| (ChartPaneBase.prototype.setMainDomain): Ditto. |
| (ChartPaneBase.prototype._overviewSelectionDidChange): Extracted from the constructor. This is overridden in |
| ChartPane and unused in AnalysisTaskChartPane. |
| (ChartPaneBase.prototype._mainSelectionDidChange): Extracted from ChartPane._mainSelectionDidChange. |
| (ChartPaneBase.prototype._mainSelectionDidZoom): Extracted from ChartPane._mainSelectionDidZoom. |
| (ChartPaneBase.prototype._indicatorDidChange): Extracted from ChartPane._indicatorDidChange. |
| (ChartPaneBase.prototype._didFetchData): Moved from ChartPane._fetchAnalysisTasks. |
| (ChartPaneBase.prototype._openAnalysisTask): Ditto. |
| (ChartPaneBase.prototype._openCommitViewer): Ditto. Also fixed a bug that we don't show the spinner while |
| waiting for the data to be fetched by calling this.render() here. |
| (ChartPaneBase.prototype._keyup): Moved from ChartPane._keyup. Also fixed the bug that the revisions list |
| doesn't update by calling this.render() here. |
| (ChartPaneBase.prototype.render): Extracted from ChartPane.render. |
| (ChartPaneBase.htmlTemplate): Extracted from ChartPane.htmlTemplate. |
| (ChartPaneBase.paneHeaderTemplate): Added. This is overridden in ChartPane and unused in AnalysisTaskChartPane. |
| (ChartPaneBase.cssTemplate): Extracted from ChartPane.htmlTemplate. |
| |
| * public/v3/components/chart-styles.js: Renamed from public/v3/pages/page-with-charts.js. |
| (PageWithCharts): Renamed from PageWithCharts since it no longer extends PageWithHeading. |
| (ChartStyles.createChartSourceList): |
| |
| * public/v3/components/commit-log-viewer.js: |
| (CommitLogViewer.prototype.view): Set this._repository right away instead of waiting for the fetched data |
| so that spinner will be shown while the data is being fetched. |
| |
| * public/v3/index.html: |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskChartPane): Added extends ChartPaneBase. |
| (AnalysisTaskPage): Added. this._chartPane. |
| (AnalysisTaskPage.prototype._didFetchTask): Initialize this._chartPane with a domain. |
| (AnalysisTaskPage.prototype.render): Render this._chartPane. |
| (AnalysisTaskPage.htmlTemplate): |
| |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView): Removed the unused router from the argument list. |
| (ChartPaneStatusView.prototype.pointsRangeForAnalysis): Renamed from analyzeData() since it was ambiguous. |
| (ChartPaneStatusView.prototype.moveRepositoryWithNotification): Fixed the bug that we don't update the list |
| of the revisions here. |
| (ChartPaneStatusView.prototype.computeChartStatusLabels): |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane): Now extends ChartPaneBase. |
| (ChartPane.prototype._overviewSelectionDidChange): Extracted from the constructor. |
| (ChartPane.prototype._mainSelectionDidChange): |
| (ChartPane.prototype._mainSelectionDidZoom): |
| (ChartPane.prototype._indicatorDidChange): |
| (ChartPane.prototype.render): |
| (ChartPane.prototype._renderActionToolbar): |
| (ChartPane.paneHeaderTemplate): Extracted from htmlTemplate. |
| (ChartPane.cssTemplate): |
| (ChartPane.overviewOptions.selection.onchange): Deleted. |
| (ChartPane.prototype._fetchAnalysisTasks): Deleted. |
| (ChartPane.prototype.platformId): Deleted. |
| (ChartPane.prototype.metricId): Deleted. |
| (ChartPane.prototype.setOverviewDomain): Deleted. |
| (ChartPane.prototype.setMainDomain): Deleted. |
| (ChartPane.prototype._openCommitViewer): Deleted. |
| (ChartPane.prototype._didFetchData): Deleted. |
| (ChartPane.prototype._keyup): Deleted. |
| |
| * public/v3/pages/charts-page.js: |
| (ChartsPage): |
| (ChartsPage.createDomainForAnalysisTask): Extracted by createDomainForAnalysisTask; used to set the domain |
| of the charts in the analysis task page. |
| (ChartsPage.createStateForAnalysisTask): |
| |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage): |
| (DashboardPage.prototype._createChartForCell): |
| |
| 2016-02-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add the support for maintenance mode |
| https://bugs.webkit.org/show_bug.cgi?id=154072 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the crude support for maintenance mode whereby which the reports are stored in the filesystem |
| instead of the database. |
| |
| * config.json: Added maintenanceMode and maintenanceDirectory as well as forgotten siteTitle and |
| remoteServer.httpdMutexDir. |
| * public/api/report.php: |
| (main): Don't connect to the database or modify database when maintenanceMode is set. |
| * public/include/json-header.php: |
| (ensure_privileged_api_data): Exit with InMaintenanceMode when maintenanceMode is set. This prevents |
| privileged API such as creating analysis tasks and new A/B testing groups from modifying the database. |
| |
| 2016-02-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task page on v3 show progression as regressions |
| https://bugs.webkit.org/show_bug.cgi?id=154045 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by TestGroup.compareTestResults referring to undefined _smallerIsBetter. |
| Retrieve it from the associated metric object via the owner analysis task. |
| |
| * public/v3/models/test-group.js: |
| |
| 2016-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Testing with remote server cache is unusably slow |
| https://bugs.webkit.org/show_bug.cgi?id=153928 |
| |
| Reviewed by Chris Dumez. |
| |
| Don't use the single process mode of httpd as it's way too slow even for testing. |
| Also we'll hit a null pointer crash (http://svn.apache.org/viewvc?view=revision&revision=1711479) |
| |
| Since httpd exits immediately when launched in multi-process mode, remote-cache-server.py (renamed from |
| run-with-remote-server.py) now has "start" and "stop" commands to start/stop the Apache. Also added |
| "reset" command to reset the cache for convenience. |
| |
| * Install.md: Updated the instruction. |
| * config.json: Fixed a typo: httpdErro*r*Log. |
| * tools/remote-cache-server.py: Copied from Websites/perf.webkit.org/tools/run-with-remote-server.py. |
| Now takes one of the following commands: "start", "stop", and "reset". |
| (main): |
| (start_httpd): Extracted from main. |
| (stop_httpd): Added. |
| * tools/remote-server-relay.conf: Removed redundant (duplicate) LoadModule's. |
| * tools/run-with-remote-server.py: Removed. |
| |
| 2016-02-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have a script to setup database |
| https://bugs.webkit.org/show_bug.cgi?id=153906 |
| |
| Reviewed by Chris Dumez. |
| |
| Added tools/setup-database.py to setup the database. It retrieves the database name, username, password |
| and initializes a database at the specified location. |
| |
| * Install.md: Updated instruction to setup postgres to use setup-database.py. |
| * tools/setup-database.py: Added. |
| (main): |
| (load_database_config): |
| (determine_psql_dir): |
| (start_or_stop_database): |
| (execute_psql_command): |
| |
| 2016-01-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| buildbot syncing scripts sometimes schedule more than one requests per builder |
| https://bugs.webkit.org/show_bug.cgi?id=153047 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by the check for singularity of scheduledRequests being conducted per configuration |
| instead of per builder. So if there were multiple test configurations (e.g. Speedometer and Octane) that |
| both used the same builder, then we may end up scheduling both at once. |
| |
| Fixed the bug by sharing a single set to keep track of the scheduled requests for all configurations per |
| builder. |
| |
| * tools/sync-with-buildbot.py: |
| (load_config): Share a set amongst test configurations for each builder. |
| (find_request_updates): Instead of creating a new set for each configuration, reuse the existing sets to |
| share a single set agmonst test configurations for each builder. |
| |
| 2016-01-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis results viewer sometimes doesn't show the correct relative difference |
| https://bugs.webkit.org/show_bug.cgi?id=152930 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by single A/B testing result associated with multiple rows when there are multiple data |
| points with the same root set which matches that of an A/B testing. |
| |
| Fixed the bug by detecting such a case, and only associating each A/B testing result with the row created |
| for the first matching point. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): |
| |
| 2016-01-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make v3 UI analysis task page is hard to understand |
| https://bugs.webkit.org/show_bug.cgi?id=152917 |
| |
| Reviewed by Antti Koivisto. |
| |
| Add a dark gray border around the selected block in the analysis results viewer instead of using darker |
| shades since that looks as if they were bigger regression/progression. |
| |
| Explicitly show "Failed" as the label instead of omitting with "-" when all build requests in an A/B |
| testing group fails. |
| |
| * public/v3/components/analysis-results-viewer.js: |
| (AnalysisResultsViewer.cssTemplate): Tweaked the style to underline text in the hovered blocks and the |
| selected blocks and show a dark gray border around the selected blocks. |
| (AnalysisResultsViewer.TestGroupStackingBlock): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.createStackingCell): Use this._title for title. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus): |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._valuesForRootSet): Deleted. |
| |
| * public/v3/components/results-table.js: |
| (ResultsTable.prototype.render): |
| (ResultsTable.prototype._createRevisionListCells): Extracted from ResultsTable.prototype.render. |
| (ResultsTable.cssTemplate): Tweaked the style. |
| (ResultsTableRow): |
| (ResultsTableRow.prototype.constructor): Added _labelForWholeRow to store the label for the entire row. |
| This is used to show the comparison result of two root sets (e.g. A vs B). |
| (ResultsTableRow.prototype.setLabelForWholeRow): Added. |
| (ResultsTableRow.prototype.labelForWholeRow): Added. |
| (ResultsTableRow.prototype.resultContent): Extracted from buildHeading. Creates a hyperlinked bar graph |
| used for each A/B testing result. |
| (ResultsTableRow.prototype.buildHeading): Deleted since we need to set colspan on the second table cell |
| when we're creating a row with _labelForWholeRow. |
| |
| * public/v3/components/test-group-results-table.js: |
| (TestGroupResultsTable.prototype.buildRowGroups): Added rows to show relative differences and statistical |
| significance between root sets (e.g. A vs B). |
| |
| * public/v3/models/build-request.js: |
| (BuildRequest.prototype.hasCompleted): Added. |
| |
| * public/v3/models/test-group.js: |
| (TestGroup.prototype.compareTestResults): Extracted from AnalysisResultsViewer.TestGroupStackingBlock's |
| _computeTestGroupStatus and generalized to be reused in TestGroupResultsTable. |
| (TestGroup.prototype._valuesForRootSet): Moved from AnalysisResultsViewer.TestGroupStackingBlock. |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage.cssTemplate): Tweaked the style. |
| |
| 2016-01-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should automatically add aggregators |
| https://bugs.webkit.org/show_bug.cgi?id=152818 |
| |
| Reviewed by Chris Dumez. |
| |
| When an aggregator entry is missing in aggregators table, automatically insert it in /api/report. |
| |
| In a very early version of the perf dashboard, we had the ability to define a custom aggregator |
| in an admin page. In practice, nobody used or needed this feature so we got rid of it even before |
| the dashboard was landed into WebKit repository. This patch cleans up that mess. |
| |
| * run-tests.js: |
| (main): Added the filtering capability. |
| (TestEnvironment): Expose the config JSON in the test environment. |
| |
| * public/include/report-processor.php: |
| (ReportProcessor): Renamed name_to_aggregator now that it only contains ID. |
| (ReportProcessor::__construct): No longer fetches the aggregator table. An equivalent work is done |
| in newly added ensure_aggregators. |
| (ReportProcessor::process): Calls ensure_aggregators which populates name_to_aggregator_id. |
| (ReportProcessor::ensure_aggregators): Added. Add the builtin aggregators: Arithmetic, Geometric, |
| Harmonic, and Total. |
| (TestRunsGenerator): Renamed name_to_aggregator now that it only contains ID. |
| (TestRunsGenerator::__construct): |
| (TestRunsGenerator::add_aggregated_metric): Don't include aggregator_definition here since it's |
| never used now that all the aggregations are done natively in PHP. |
| (TestRunsGenerator::$aggregators): Added. We don't include SquareSum since it's only used for |
| computing run_square_sum_cache in test_runs table and it's useless elsewhere. |
| (TestRunsGenerator::aggregate_values): Add a comment about that. |
| |
| * tests/api-report.js: Updated a test case to reflect the change. |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard JSON API should fail gracefully when postgres is down |
| https://bugs.webkit.org/show_bug.cgi?id=152812 |
| |
| Reviewed by Chris Dumez. |
| |
| Even though all JSON APIs returned DatabaseConnectionFailure as the status when Database::connect |
| returned a falsy value, PHP was spitting out warnings and producing HTTP responses that cannot be |
| parsed as a JSON when pg_connect failed. |
| |
| Fixed the bug by suppressing warning messages in pg_connect. |
| |
| * public/include/db.php: |
| (Database::connect): Use '@' prefix to suppress warning messages. |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should auto-generate manifest file when one is missing |
| https://bugs.webkit.org/show_bug.cgi?id=152813 |
| |
| Reviewed by Chris Dumez. |
| |
| When /data/manifest.json is missing, fall back to newly added /api/manifest instead of |
| silently failing to show the UI. This will make the initial setup easier. |
| |
| * public/api/manifest.php: Added. |
| (main): |
| * public/include/manifest.php: |
| (Manifest::manifest): Added. |
| * public/v3/main.js: |
| (fetchManifest): |
| (didFetchManifest): Extracted from fetchManifest. |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit another forgotten change, this time, for r194653. |
| |
| * public/v3/models/measurement-set.js: |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The sampling of time series on v3 UI is too aggressive |
| https://bugs.webkit.org/show_bug.cgi?id=152804 |
| |
| Reviewed by Chris Dumez. |
| |
| Fixed a bug that we were always halving the number of data points in _sampleTimeSeries |
| and increased the number of data points allowed to make the sampling less aggressive. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype._ensureSampledTimeSeries): Increase the number of maximum points |
| to 2x the number of pixels divided by the radius of each point. |
| (TimeSeriesChart.prototype._sampleTimeSeries.findMedian): Changed the semantics of endIndex |
| to mean the index after the last point and renamed it to indexAfterEnd. |
| (TimeSeriesChart.prototype._sampleTimeSeries): Fixed a bug that this code always coerced two |
| data points into one sampled data point despite of the fact i and j are sufficiently apart |
| since data[j].time - data[i].time > timePerSample by definition. |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit the forgotten change for r194651. |
| |
| * public/v3/pages/domain-control-toolbar.js: |
| (DomainControlToolbar.prototype.setStartTime): |
| |
| 2016-01-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The right hand side of main chart appears to be cut off as you zoom out on v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152778 |
| |
| Reviewed by Antti Koivisto. |
| |
| Add a padding on x-axis after the end time to make the main chart more easily interactive. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype._computeHorizontalRenderingMetrics): |
| |
| * public/v3/pages/page-with-charts.js: |
| (PageWithCharts.mainChartOptions): Add a padding of 5px at the end of x-axis. |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI should use four sig-figs to label y-axis of the main charts |
| https://bugs.webkit.org/show_bug.cgi?id=152779 |
| |
| Reviewed by Antti Koivisto. |
| |
| Increase the number of significant figures used in the main charts to four as done in v2 UI. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane.constructor): Create a formatter with four significant figures. |
| * public/v3/pages/page-with-charts.js: |
| (PageWithCharts.mainChartOptions): Increase the width of y-axis labels. |
| |
| 2016-01-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI's time range slider is harder to use than that of v2 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152780 |
| |
| Reviewed by Antti Koivisto. |
| |
| Improved the time range slider by using a cubic mapping to time range and providing a text field |
| to directly edit the number of days to show. |
| |
| Now an user can enter the text mode to directly edit the number of days to show by clicking on |
| the number of days (text field is always there with opacity=0). |
| |
| * public/v3/pages/charts-toolbar.js: |
| (ChartsToolbar): Store the minimum and maximum number of days allowed. Also rename _inputElement |
| to _slider and added a new type=number text field as _editor. |
| (ChartsToolbar.prototype.render): |
| (ChartsToolbar.prototype.setStartTime): Exit the text mode when the number of days is changed by |
| an URL state transition (i.e. back/forward navigation). |
| (ChartsToolbar.prototype._setInputElementValue): Added. Updates the values of _slider and _editor. |
| (ChartsToolbar.prototype._enterTextMode): Added. Hide the elements used by the slider mode and |
| show the text field. |
| (ChartsToolbar.prototype._exitTextMode): Added. Does the opposite. |
| (ChartsToolbar.prototype._sliderValueMayHaveChanged): Renamed from _inputValueMayHaveChanged. |
| (ChartsToolbar.prototype._editorValueMayHaveChanged): Added. Similar to _sliderValueMayHaveChanged |
| but also corrects the value of _editor if needed. |
| (ChartsToolbar.prototype._callNumberOfDaysCallback): Extracted from _inputValueMayHaveChanged. |
| Also fixed a bug that we didn't update the URL state when the change event was fired without |
| modifying the effective number of days. |
| (ChartsToolbar.cssTemplate): Tweaked the style to support the new mode. Also set a fixed width on |
| the span showing the number of days in the slider mode. |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Zooming button is broken on v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152777 |
| |
| Reviewed by Chris Dumez. |
| |
| Bring up the zoom button in z-index so that users can click it. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.cssTemplate): |
| |
| 2016-01-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI doesn't preserve the time range when charts page is opened from a dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=152776 |
| |
| Reviewed by Chris Dumez. |
| |
| Fixed the bug by moving the construction of charts URL from DashboardPage.prototype.open to |
| DashboardPage.prototype.render and re-rendering the entire page upon an URL state transition. |
| |
| * public/v3/pages/charts-page.js: |
| (ChartsPage.createStateForDashboardItem): Takes the start time for the charts page. |
| |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype.updateFromSerializedState): Merged _numberOfDaysDidChange and |
| _updateChartsDomainFromToolbar into this function since they're not used elsewhere. Also re-render |
| the entire page when transition between different number of days to show. |
| (DashboardPage.prototype._numberOfDaysDidChange): Deleted. |
| (DashboardPage.prototype._updateChartsDomainFromToolbar): Deleted. |
| (DashboardPage.prototype.render): Construct URL for each charts here. |
| (DashboardPage.prototype._createChartForCell): Don't construct URL here since this function is |
| called once when the dashboard page is opened, and not when the time range is changed. |
| |
| 2016-01-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix for an old version of PHP after r194618. |
| |
| * public/api/measurement-set.php: |
| |
| 2016-01-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A/B testing results should be visualized intuitively on v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152496 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Add the "stacking block" view of A/B testing results to the analysis task page on v3 UI. |
| |
| The patch enhances JSON APIs at /api/analysis-task /api/measurement-set/ to reduce the number of |
| HTTP requests, and adds two UI components: TestGroupResultsTable and AnalysisResultsViewer both |
| of which inherits from an abstract superclass: ResultsTable. |
| |
| ResultsTable provides a tabular presentation of measured values in regular measurement sets and |
| A/B testing results using groups of bar graphs created by BarGraphGroup. TestGroupResultsTable |
| inherits from this class to display A/B testing configurations and the averaged results for each |
| configuration, and AnalysisResultsViewer inherits from it to provide an intuitive visualization |
| of the outcomes of all A/B testing results associated with a given analysis task. |
| |
| * public/api/analysis-tasks.php: |
| (main): Add the capability to find the analysis task based on its build request. |
| This allows /v3/#/analysis/task/?buildRequest=<id> to be hyperlinked on buildbot page. |
| |
| * public/api/measurement-set.php: |
| (main): Removed the unused startTime and endTime, and added "analysisTask" to query parameters. |
| (AnalysisResultsFetcher): Added. Used to fetch measured data associated with every build request |
| on an analysis task. |
| (AnalysisResultsFetcher::__construct): |
| (AnalysisResultsFetcher::fetch): Unlike MeasurementSetFetcher, we fetch the list of commits and |
| list of measurements separately since there will be a lot less builds and commits than measured |
| data (since we're fetching measured values for all tests and their metrics). |
| (AnalysisResultsFetcher::fetch_commits): Fetches commits. |
| (AnalysisResultsFetcher::format_measurement): Like MeasurementSetFetcher::format_measurement but |
| with config_type and config_metric since we're returning measured data for all metrics and test |
| configurations. |
| (AnalysisResultsFetcher::format_map): Similar to MeasurementSetFetcher::format_map. |
| |
| * public/v3/components/analysis-results-viewer.js: Added. |
| (AnalysisResultsViewer): Added. |
| (AnalysisResultsViewer.prototype.didUpdateResults): This callback is called by AnalysisTaskPage |
| when A/B testing results become available. |
| (AnalysisResultsViewer.prototype.render): Overrides ResultsTable's render to highlight the block |
| representing the currently selected test group. |
| |
| (AnalysisResultsViewer.prototype.buildRowGroups): Creates a list of rows with "stacking blocks" |
| that visualizes A/B testing results. The algorithm works as follows: 1. Create all table rows. |
| 2. Find which row is associated with each set in each test group. 3. Layout "blocks". |
| |
| (AnalysisResultsViewer.prototype._collectRootSetsInTestGroups): Collects root sets from all data |
| in the measurement set as well as A/B testing **requests** (results may contain more repositories |
| than requested but they aren't interesting for the purpose of visualizing results for the entire |
| analysis task). |
| |
| (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): Create table rows. First, |
| create table rows for measurement set points that have a matching test group (i.e. either set A |
| or set B of an A/B testing uses the same root set as a point). Second, insert a new row for each |
| root set in each test group which didn't find a matching measurement set point. There is a little |
| subtlety that some A/B testing may specify revisions for a subset of repositories and/or some A/B |
| testing results may appear as if it goes back in time with respect to other A/B testing results. |
| For example, consider creating two A/B test groups for WebKit changes and OS changes separately. |
| There could be no coherent linearization of those two A/B testing in which both WebKit and OS |
| versions move forward. |
| |
| (AnalysisResultsViewer.RootSetInTestGroup): Added. Represents a pair (test group, root set) since |
| a root set could be shared by multiple test groups. |
| (AnalysisResultsViewer.TestGroupStackingBlock): Added. A stacked block representing a test group. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.addRowIndex): Associates a row number with |
| either set A or set B. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.createStackingCell): Creates a table cell |
| for this block. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype.isThin): Returns true if this test group |
| has failed and this block should look "thin" without any label. |
| (AnalysisResultsViewer.TestGroupStackingBlock.prototype._computeTestGroupStatus): Computes the |
| status for this test group. |
| |
| (AnalysisResultsViewer.TestGroupStackingGrid): Added. AnalysisResultsViewer uses this class to |
| layout blocks representing test groups. |
| (AnalysisResultsViewer.TestGroupStackingGrid.prototype.insertBlockToColumn): Inserts a new block |
| to layout. We keep all test groups doing the same A/B test next to each other. |
| (AnalysisResultsViewer.TestGroupStackingGrid.prototype.layout): Layouts each block / test group |
| in the order they are created. |
| (AnalysisResultsViewer.TestGroupStackingGrid.prototype._layoutBlock): Places the block in the |
| left-most column that can accommodate it while avoiding columns of a different thin-ness. A column |
| is thin if its A/B testing has failed, and not thin otherwise. |
| (AnalysisResultsViewer.TestGroupStackingGrid.prototype.createCellsForRow): Creates table cells for |
| a given row. For each column, generate a table cell if we're in the first row and the first block |
| starts in a later row, a block starts in the current row, or the last block ended in the previous |
| row and the next block or the last row appears later. |
| |
| * public/v3/components/bar-graph-group.js: Added. A component for showing a group of bar graphs. |
| (BarGraphGroup): Added. Creates a group of bar graphs with the same value range. It's used by |
| AnalysisResultsViewer and ResultsTable to show bar graphs to compare values. |
| (SingleBarGraph): A component created and collectively controlled by BarGraphGroup. |
| |
| * public/v3/components/results-table.js: Added. |
| (ResultsTable): An abstract superclass for TestGroupResultsTable and AnalysisResultsViewer. |
| |
| (ResultsTable.prototype.render): Renders the table. 1. Call "buildRowGroups()" implemented by |
| a subclass to obtain the list of rows. 2. Compute the list of repositories to show. 3. For each |
| cell in the table, compute the number of rows to show the same value (for rowspan). 4. Render the |
| table with an extra list of repositories if exists. |
| |
| (ResultsTable.prototype._computeRepositoryList): Compute the list of repositories to list |
| revisions in the table. Omit repositories not present in any row or for which all rows have the |
| same revision. In the latter case, include it in the extra repositories listed below the table. |
| This minimizes the amount of redundant information presented to the user. |
| |
| (ResultsTableRow): Added. Represents a single row in the table. ResultsTable constructs necessary |
| table cells to tabulate the associated root sets, and shows the associated result using a grouped |
| bar graph. Additional columns are used by AnalysisResultsViewer to show stacked blocks for A/B |
| testing groups. |
| |
| * public/v3/components/test-group-results-table.js: Added. |
| (TestGroupResultsTable): |
| (TestGroupResultsTable.prototype.didUpdateResults): |
| (TestGroupResultsTable.prototype.setTestGroup): |
| (TestGroupResultsTable.prototype.heading): |
| (TestGroupResultsTable.prototype.render): |
| (TestGroupResultsTable.prototype.buildRowGroups): |
| |
| * public/v3/index.html: |
| * public/v3/models/analysis-results.js: Added. |
| (AnalysisResults): Added. Like MeasurementSet, this class represents a set of measured values |
| associated with a given analysis task. |
| (AnalysisResults.prototype.find): Returns a measured valued for a given build and metric. |
| (AnalysisResults.prototype.add): Adds a new measured value. Used by AnalysisResults.fetch. |
| (AnalysisResults.fetch): Fetches data and creates AnalysisResults for a given analysis task. |
| |
| * public/v3/models/analysis-task.js: |
| (AnalysisTask.prototype.startMeasurementId): Added. |
| (AnalysisTask.prototype.endMeasurementId): Added. |
| (AnalysisTask.fetchByBuildRequestId): Added. |
| (AnalysisTask._fetchSubset): Uses DataModelObject.cachedFetch. |
| |
| * public/v3/models/build-request.js: Added. |
| (BuildRequest): Added. Represents a single A/B testing request associated with a test group. |
| |
| * public/v3/models/builder.js: |
| (Build): Added. Represents a build associated with a given A/B testing result. |
| |
| * public/v3/models/commit-log.js: |
| (CommitLog): Made this class inherit from DataModelObject. |
| (CommitLog.ensureSingleton): Added. Finds the singleton object created for a given revision |
| in the specified repository. This helps RootSet and other classes compare commits fast. |
| (CommitLog.prototype.repository): Added. |
| (CommitLog.fetchBetweenRevisions): Uses CommitLog.ensureSingleton. |
| |
| * public/v3/models/data-model.js: |
| (DataModelObject): |
| (DataModelObject.namedStaticMap): Added. |
| (DataModelObject.ensureNamedStaticMap): Renamed from namedStaticMap instead of implicitly |
| assuming that the non-static version always creates the map. |
| (DataModelObject.prototype.namedStaticMap): Added. |
| (DataModelObject.cachedFetch): Extracted from AnalysisTask._fetchSubset so that TestGroup's |
| fetchByTask could also use it. |
| (LabeledObject): |
| |
| * public/v3/models/measurement-adaptor.js: Added. |
| (MeasurementAdaptor): Extracted from MeasurementCluster. This class is responsible for |
| re-formatting the data received via /api/measurement-set JSON API inside the v3 UI. |
| (MeasurementAdaptor.prototype.extractId): Added. |
| (MeasurementAdaptor.prototype.adoptToAnalysisResults): Added. Used by AnalysisResults. |
| (MeasurementAdaptor.aggregateAnalysisResults): Added. Used by TestGroupResultsTable to |
| aggregate results for each test configuration; e.g. computing the average for set A. |
| (MeasurementAdaptor.prototype.adoptToSeries): Extracted from MeasurementCluster.addToSeries. |
| Added rootSet() to each point. This allows AnalysisResultsViewer to compare them against root |
| sets associated with A/B testing results. |
| (MeasurementAdaptor.computeConfidenceInterval): Moved from MeasurementCluster. |
| |
| * public/v3/models/measurement-cluster.js: |
| (MeasurementCluster): |
| (MeasurementCluster.prototype.addToSeries): |
| |
| * public/v3/models/repository.js: |
| (Repository.prototype.hasUrlForRevision): Added. |
| |
| * public/v3/models/root-set.js: Added. |
| (RootSet): Added. Represents a set of commits in measured results. |
| (MeasurementRootSet): Added. Ditto for results associated with A/B testing. |
| |
| * public/v3/models/test-group.js: Added. |
| (TestGroup): Added. Represents a A/B testing on analysis task. |
| (TestGroup.prototype.createdAt): Added. |
| (TestGroup.prototype.buildRequests): Returns the list of build requests associated with this |
| A/B testing. |
| (TestGroup.prototype.addBuildRequest): Added. Used by BuildRequest's constructor to associate |
| itself with this group. |
| (TestGroup.prototype.didSetResult): Added. Called by BuildRequest.setResult when measured |
| values are fetched and associated with a build request in this group. |
| |
| * public/v3/models/test.js: |
| (Test): |
| |
| * public/v3/pages/analysis-task-page.js: |
| (AnalysisTaskPage): |
| (AnalysisTaskPage.prototype.updateFromSerializedState): Fetch the analysis task, test groups |
| associated with it, and all A/B testing results based on the task id or the build request id |
| specified in the URL. |
| (AnalysisTaskPage.prototype._didFetchTask): Added. Start fetching the measured data. This is |
| the data on charts page for which this analysis task was created, not results of A/B testing. |
| (AnalysisTaskPage.prototype._didFetchMeasurement): Added. Display the fetched data in a table |
| inside AnalysisResultsViewer. |
| (AnalysisTaskPage.prototype._didFetchTestGroups): Added. Display the list of A/B test groups |
| as well as the results of the first A/B testing. |
| (AnalysisTaskPage.prototype._didFetchAnalysisResults): Added. |
| (AnalysisTaskPage.prototype._assignTestResultsIfPossible): Added. Once both the analysis task, |
| A/B test groups as well as their results are fetched, update build requests in each test group |
| with their results. |
| (AnalysisTaskPage.prototype.render): Show the list of test groups and highlight the currently |
| selected one. |
| (AnalysisTaskPage.prototype._showTestGroup): Added. A callback used by AnalysisResultsViewer |
| and TestGroupResultsTable to notify this class when the user selects a new test group. |
| (AnalysisTaskPage.htmlTemplate): Updated the template. |
| (AnalysisTaskPage.cssTemplate): Ditto. |
| |
| * public/v3/pages/charts-page.js: |
| (ChartsPage.createStateForAnalysisTask): Added. Creates a URL state object for opening a chart |
| associated with an analysis task. |
| |
| 2015-12-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task page is slow to load |
| https://bugs.webkit.org/show_bug.cgi?id=152517 |
| |
| Reviewed by Andreas Kling. |
| |
| The slowness comes from r194130 which made the JSON API at /api/analysis-tasks to report the start |
| and the end of each analysis task. This query was adding ~2s to the total JSON generation time. |
| |
| Cache these values on analysis_task table since they never change once an analysis task is created. |
| |
| * init-database.sql: Added columns task_start_run_time and task_end_run_time to analysis_task table. |
| Also added the missing drop statements at the top. |
| |
| * public/api/analysis-tasks.php: |
| (fetch_and_push_bugs_to_tasks): Don't fetch the latest commit time of the start and the end. |
| (format_task): Report task_start_run_time and task_end_run_time as startRunTime and endRunTime. |
| |
| * public/privileged-api/create-analysis-task.php: |
| (main): Set start_run_time and end_run_time when creating an analysis task. |
| (time_for_run): Added. |
| |
| 2015-12-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI shouldn't open/close pane selector by mouseenter/leave |
| https://bugs.webkit.org/show_bug.cgi?id=152399 |
| |
| Reviewed by Andreas Kling. |
| |
| Removed the code to open and close the pane selector by mouseenter and mouseleave |
| since multiple people have complained about the behavior. |
| |
| * public/v3/pages/charts-toolbar.js: |
| (ChartsToolbar): Removed the event listeners. |
| (ChartsToolbar.prototype._addPane): Don't close the pane selector when adding a new pane |
| to better support the use case of adding multiple panes. |
| (ChartsToolbar.cssTemplate): Tweaked CSS. |
| |
| 2015-12-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Popover for analysis tasks shows up at the left edge of annotation bars in the v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152389 |
| |
| Reviewed by Darin Adler. |
| |
| Compute the x coordinate of the popover from the center of each annotation bar. |
| |
| Also adjust the x coordinate to keep the popover within the charts. |
| |
| * public/v3/components/interactive-time-series-chart.js: |
| (InteractiveTimeSeriesChart.prototype._renderChartContent): |
| |
| 2015-12-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Dashboard charts should have uniform widths on v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152395 |
| |
| Reviewed by Chris Dumez. |
| |
| Fix the bug by applying table-layout: fixed on the dashboard table. |
| |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.prototype.render): Added header-column as a class name to explicitly set the header column with. |
| (DashboardPage.cssTemplate): Adjusted CSS accordingly. |
| |
| 2015-12-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Closing a pane on v3 UI always closes the last pane |
| https://bugs.webkit.org/show_bug.cgi?id=152388 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by closePane being called without arguments. (The first argument to bind is "this" value.) |
| Fixed it by passing in "this" pane object to the first argument. |
| |
| * public/v3/pages/chart-pane.js: |
| (ChartPane): |
| |
| 2015-12-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf Dashboard v3 UI doesn't show recent data points on v2 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152368 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by the last modified date in measurement set JSON being a string instead of a POSIX timestamp, |
| which prevented the v3 UI from invalidating the cache. Specifically, the following boolean logic always evaluated |
| to false because +data['lastModified'] was NaN in MeasurementSet.prototype._fetch (/v3/models/measurement-set.js): |
| |
| !clusterEndTime && useCache && +data['lastModified'] < self._lastModified |
| |
| Fixed the bug by calling Database::to_js_time on the last modified date fetched from the database. |
| |
| * public/api/measurement-set.php: |
| (MeasurementSetFetcher::fetch_config_list): Convert the string returned by the database to a POSIX timestamp. |
| * tests/api-measurement-set.js: Added a test to ensure the last modified date in JSON is numeric. Since the value |
| of the last modified date depends on when tests run, we can't assert it to be a certain value. |
| |
| 2015-12-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 UI should show and link the build number on charts page |
| https://bugs.webkit.org/show_bug.cgi?id=152359 |
| |
| Reviewed by Chris Dumez. |
| |
| Show the hyperlinked build number in the v3 UI. |
| |
| * public/v3/models/builder.js: |
| (Builder): Renamed _buildURL to _buildUrlTemplate. |
| (Builder.prototype.urlForBuild): Added. |
| * public/v3/pages/chart-pane-status-view.js: |
| (ChartPaneStatusView): |
| (ChartPaneStatusView.prototype.render): Added the code to render hyperlinked build number when one is available. |
| (ChartPaneStatusView.prototype.computeChartStatusLabels): Store currentPoint's measurement object as _buildInfo |
| if the current point is set by an indicator (not by a selection). |
| |
| 2015-12-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v3 dashboard doesn't stretch charts to fill the screen |
| https://bugs.webkit.org/show_bug.cgi?id=152354 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by a workaround to avoid canvas stretching table cell too much. |
| |
| Fix the problem instead by making the canvas absolutely positioned inside the "time-series-chart" element |
| so that it does not contribute to the intrinsic/natural width of the cell. |
| |
| * public/v3/components/time-series-chart.js: |
| (TimeSeriesChart.prototype._ensureCanvas): Make the canvas absolutely positioned inside the shadow root. |
| (TimeSeriesChart.prototype._updateCanvasSizeIfClientSizeChanged): Use the container element's size now that |
| the canvas does not resize with it. |
| * public/v3/pages/dashboard-page.js: |
| (DashboardPage.cssTemplate): Updated the CSS so that the chart stretches all the way. |
| |
| 2015-12-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The chart status on v3 UI sometimes show wrong revision ranges |
| https://bugs.webkit.org/show_bug.cgi?id=152331 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by the status view not taking the data sampling that happens in TimeSeriesChart into account |
| when finding the previous point. Take this into account by using InteractiveTimeSeries.currentPoint(-1) which |
| finds the sampled data point immediately preceding the current point (at which the indicator is shown). |
| |
| * public/v3/components/chart-status-view.js: |
| (ChartStatusView.prototype.updateStatusIfNeeded): |
| |
| 2015-12-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard's cycler page should use v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152324 |
| |
| Reviewed by Chris Dumez. |
| |
| Use the v3 UI in cycler.html after r194130. |
| |
| * public/cycler.html: |
| * public/v3/index.html: Removed the reference to a non-existent platform-selector.js. |
| |
| 2015-12-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add v3 UI to perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=152311 |
| |
| Reviewed by Chris Dumez. |
| |
| Add the third iteration of the perf dashboard UI. UI for viewing and modifying analysis tasks is coming soon. |
| The v3 UI is focused on speed, and removes all third-party script dependencies including jQuery, d3, and Ember. |
| Both the DOM-based UI and graphing are implemented manually. |
| |
| |
| The entire app is structured using new component library implemented in components/base.js. Each component is |
| an instance of a subclass of ComponentBase which owns a single DOM element. Each subclass may supply static |
| methods named htmlTemplate and cssTemplate as the template for a component instance. ComponentBase automatically |
| clones the templates inside the associated element (or its shadow root on the supported browsers). Each subclass |
| must supply a method called "render()" which constructs and updates the DOM as needed. |
| |
| There is a special component called Page, which represents an entire page. Each Page is opened by PageRouter's |
| "route()" function. Each subclass of Page supplies "open()" for initialization and "updateFromSerializedState()" |
| for a hash URL transition. |
| |
| |
| The key feature of the v3 UI is the split of time series into chunks called clusters (see r194120). On an internal |
| instance of the dashboard, the v2 UI downloads 27MB of data whereas the same page loads only 3MB of data in the v3. |
| The key logic for fetching time series in chunks is implemented by MeasurementSet in /v3/models/measurement-set.js. |
| We first fetch the cached primary cluster (the cluster that contains the newest data) at: |
| /data/measurement-set-<platform-id>-<metric-id>.json |
| |
| If that's outdated according to lastModified in manifest.json, then we immediately re-fetch the primary cluster at: |
| /api/measurement-set/?platform=<platform-id>&metric=<metric-id> |
| |
| Once the up-to-date primary cluster is fetched, we fetch all "secondary" clusters. For each cluster being fetched, |
| including the primary, we invoke registered callbacks. |
| |
| |
| In addition, the v3 UI reduces the initial page load time by loading a single bundled JS file generated by |
| tools/bundle-v3-scripts.py. index.html has a fallback to load all 44 JS files individually during development. |
| |
| * public/api/analysis-tasks.php: |
| (fetch_and_push_bugs_to_tasks): Added the code to fetch start and end run times. This is necessary in V3 UI |
| because no longer fetch the entire time series. See r194120 for the new measurement set JSON API. |
| (format_task): Compute the category of an analysis task based on "result" value. This will be re-vamped once |
| I add the UI for the analysis task page in v3. |
| |
| * public/include/json-header.php: |
| (require_format): CamelCase the name. |
| (require_match_one_of_values): Ditto. |
| (validate_arguments): Renamed from require_existence_of and used in measurement-set.php landed in r194120. |
| |
| * public/v3: Added. |
| * public/v3/components: Added. |
| |
| * public/v3/components/base.js: Added. |
| (ComponentBase): The base component class. |
| (ComponentBase.prototype.element): Returns the DOM element associated with the DOM element. |
| (ComponentBase.prototype.content): Returns the shadow root if one exists and the associated element otherwise. |
| (ComponentBase.prototype.render): To be implemented by a subclass. |
| (ComponentBase.prototype.renderReplace): A helper function to "render" DOM contents. |
| (ComponentBase.prototype._constructShadowTree): Called inside the constructor to instantiate the templates. |
| (ComponentBase.prototype._recursivelyReplaceUnknownElementsByComponents): Instantiates components referred by |
| its element name inside the instantiated content. |
| (ComponentBase.isElementInViewport): A helper function. Returns true if the element is in the viewport and it has |
| non-zero width and height. |
| (ComponentBase.defineElement): Defines a custom element that can be automatically instantiated from htmlTemplate. |
| (ComponentBase.createElement): A helper function to create DOM tree to be used in "render()" method. |
| (ComponentBase._addContentToElement): A helper for "createElement". |
| (ComponentBase.createLink): A helper function to create a hyperlink or another clickable element (via callback). |
| (ComponentBase.createActionHandler): A helper function to create an event listener that prevents the default action |
| and stops the event propagation. |
| |
| * public/v3/components/button-base.js: Added. |
| |
| * public/v3/components/chart-status-view.js: Added. |
| (ChartStatusView): A component that reports the current status of time-series-chart. It's subclasses by |
| ChartPaneStatusView to provide additional information in the charts page's panes. |
| |
| * public/v3/components/close-button.js: Added. |
| (CloseButton): |
| * public/v3/components/commit-log-viewer.js: Added. |
| (CommitLogViewer): A component that lists commit revisions along with commit messages for a range of data points. |
| |
| * public/v3/components/interactive-time-series-chart.js: Added. |
| (InteractiveTimeSeriesChart): A subclass of InteractiveTimeSeriesChart with interactivity (selection & indicator). |
| Selection and indicator are mutually exclusive. |
| |
| * public/v3/components/pane-selector.js: Added. |
| (PaneSelector): A component for selecting (platform, metric) pair to add in the charts page. |
| |
| * public/v3/components/spinner-icon.js: Added. |
| |
| * public/v3/components/time-series-chart.js: Added. |
| (TimeSeriesChart): A canvas-based chart component without interactivity. It takes a source list and options as |
| the constructor arguments. A source list is a list of measurement sets (measurement-set.js) with drawing options. |
| This component fetches data via MeasurementSet.fetchBetween inside TimeSeriesChart.prototype.setDomain and |
| progressively updates the charts as more data arrives. The canvas is updated on animation frame via rAF and all |
| layout and rendering metrics are lazily computed in _layout. In addition, this component samples data before |
| rendering the chart when there are more data points per pixel in _ensureSampledTimeSeries. |
| |
| * public/v3/index.html: Added. Loads bundled-scripts.js if it exists, or individual script files otherwise. |
| |
| * public/v3/instrumentation.js: Added. This class is used to gather runtime statistics of v3 UI. (It measures |
| the performance of the perf dashboard UI). |
| |
| * public/v3/main.js: Added. Bootstraps the app. |
| (main): |
| (fetchManifest): |
| |
| * public/v3/models: Added. |
| * public/v3/models/analysis-task.js: Added. |
| * public/v3/models/bug-tracker.js: Added. |
| * public/v3/models/bug.js: Added. |
| * public/v3/models/builder.js: Added. |
| * public/v3/models/commit-log.js: Added. |
| * public/v3/models/data-model.js: Added. |
| (DataModelObject): The base class for various data objects that correspond to database tables. It supplies static |
| hash map to find entries by id as well as other keys. |
| (LabeledObject): A subclass of DataModelObject with the capability to find an object via its name. |
| |
| * public/v3/models/measurement-cluster.js: Added. |
| (MeasurementCluster): Represents a single cluster or a chunk of data in a measurement set. |
| |
| * public/v3/models/measurement-set.js: Added. |
| (MeasurementSet): Represents a measurement set. |
| (MeasurementSet.findSet): Returns the singleton set given (metric, platform). We use singleton to avoid issuing |
| multiple HTTP requests for the same JSON when there are multiple TimeSeriesChart that show the same graph (e.g. on |
| charts page with overview and main charts). |
| (MeasurementSet.prototype.findClusters): Finds the list of clusters to fetch in a given time range. |
| (MeasurementSet.prototype.fetchBetween): Fetch clusters for a given time range and calls callback whenever new data |
| arrives. The number of callbacks depends on the how many clusters need to be newly fetched. |
| (MeasurementSet.prototype._fetchSecondaryClusters): Fetches non-primary (non-latest) clusters. |
| (MeasurementSet.prototype._fetch): Issues a HTTP request to fetch a cluster. |
| (MeasurementSet.prototype._didFetchJSON): Called when a cluster is fetched. |
| (MeasurementSet.prototype._failedToFetchJSON): Called when the fetching of a cluster has failed. |
| (MeasurementSet.prototype._invokeCallbacks): Invokes callbacks upon an approval of a new cluster. |
| (MeasurementSet.prototype._addFetchedCluster): Adds the newly fetched cluster in the order. |
| (MeasurementSet.prototype.fetchedTimeSeries): Returns a time series that contains data from all clusters that have |
| been fetched. |
| (TimeSeries.prototype.findById): Additions to TimeSeries defined in /v2/data.js. |
| (TimeSeries.prototype.dataBetweenPoints): Ditto. |
| (TimeSeries.prototype.firstPoint): Ditto. |
| |
| * public/v3/models/metric.js: Added. |
| * public/v3/models/platform.js: Added. |
| * public/v3/models/repository.js: Added. |
| * public/v3/models/test.js: Added. |
| |
| * public/v3/pages: Added. |
| * public/v3/pages/analysis-category-page.js: Added. The "Analysis" page that lists the analysis tasks. |
| * public/v3/pages/analysis-category-toolbar.js: Added. The toolbar to filter analysis tasks based on its category |
| (unconfirmed, bisecting, identified, closed) and a keyword. |
| |
| * public/v3/pages/analysis-task-page.js: Added. Not implemented yet. It just has the hyperlink to the v2 UI. |
| |
| * public/v3/pages/chart-pane-status-view.js: Added. |
| (ChartPaneStatusView): A subclass of ChartStatusView used in the charts page. In addition to the current value, |
| comparison to baseline/target, it shows the list of repository revisions (e.g. WebKit revision, OS version). |
| |
| * public/v3/pages/chart-pane.js: Added. |
| (ChartPane): A component a pane in the charts page. Each pane has the overview chart and the main chart. The zooming |
| is synced across all panes in the charts page. |
| |
| * public/v3/pages/charts-page.js: Added. Charts page. |
| * public/v3/pages/charts-toolbar.js: Added. The toolbar to set the number of days to show. This affects the overview |
| chart's domain in each pane. |
| |
| * public/v3/pages/create-analysis-task-page.js: Added. |
| (CreateAnalysisTaskPage): A page that gets shown momentarily while creating a new analysis task. |
| |
| * public/v3/pages/dashboard-page.js: Added. A dashboard page. |
| * public/v3/pages/dashboard-toolbar.js: Added. Its toolbar with buttons to select the number of days to show. |
| * public/v3/pages/domain-control-toolbar.js: Added. An abstract superclass of charts and dashboard toolbars. |
| |
| * public/v3/pages/heading.js: Added. A component for displaying the header and toolbar, if exists, on each page. |
| * public/v3/pages/page-router.js: Added. This class is responsible for updating the URL hashes as well as opening |
| and updating each page when the hash changes (via back/forward navigation). |
| * public/v3/pages/page-with-charts.js: Added. An abstract subclass of page used by dashboards and charts page. |
| Supplies helper functions for creating TimeSeriesChart options. |
| * public/v3/pages/page-with-heading.js: Added. An abstract subclass of page that uses the heading component. |
| * public/v3/pages/page.js: Added. The Page component. |
| * public/v3/pages/toolbar.js: Added. An abstract toolbar component. |
| |
| * public/v3/remote.js: Added. |
| (getJSON): Fetches JSON from the remote server. |
| (getJSONWithStatus): Ditto. Rejects the response if the status is not "OK". |
| (PrivilegedAPI.sendRequest): Posts a HTTP request to a privileged API in /privileged-api/. |
| (PrivilegedAPI.requestCSRFToken): Creates a new CSRF token to request a privileged API post. |
| |
| * tools/bundle-v3-scripts.py: Added. |
| (main): Bundles js files together and minifies them by jsmin.py for the v3 UI. Without this script, we're forced to |
| download 44 JS files or making each JS file contain multiple classes. |
| |
| * tools/jsmin.py: Copied from WebInspector / JavaScriptCore code. |
| |
| 2015-12-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix v2 UI after r194093. |
| |
| * public/v2/data.js: |
| |
| 2015-12-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add /api/measurement-set for v3 UI |
| https://bugs.webkit.org/show_bug.cgi?id=152312 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| The new API JSON allows the front end to fetch measured data in chunks called a "cluster" as specified |
| in config.json for each measurement set specified by the pair of a platform and a metric. |
| |
| When the front end needs measured data in a given time range (t_0, t_1) for a measurement set, it first |
| fetches the primary cluster by /api/measurement-set/?platform=<platform-id>&metric=<metric-id>. |
| The primary cluster is the last cluster in the set (returning the first cluster here is not useful |
| since we don't typically show very old data), and provides the information needed to fetch other clusters. |
| |
| Fetching the primary cluster also creates JSON files at: |
| /data/measurement-set-<platform-id>-<metric-id>-<cluster-end-time>.json |
| to allow latency free access for secondary clusters. The front end code can also fetch the cache of |
| the primary cluster at: /data/measurement-set-<platform-id>-<metric-id>.json. |
| |
| Because the front end code has to behave as if all data is fetched, each cluster contains one data point |
| immediately before the first data point and one immediately after the last data point. This avoids having |
| to fetch multiple empty clusters for manually specified baseline data. To support this behavior, we generate |
| all clusters for a given measurement set at once when the primary cluster is requested. |
| |
| Furthermore, all measurement sets are divided at the same time into clusters so that the boundary of clusters |
| won't shift as more data are reported to the server. |
| |
| * config.json: Added clusterStart and clusterSize as options. |
| * public/api/measurement-set.php: Added. |
| (main): |
| (MeasurementSetFetcher::__construct): |
| (MeasurementSetFetcher::fetch_config_list): Finds configurations that belongs to this (platform, metric) pair. |
| (MeasurementSetFetcher::at_end): Returns true if we've reached the end of all clusters for this set. |
| (MeasurementSetFetcher::fetch_next_cluster): Generates the JSON data for the next cluster. We generate clusters |
| in increasing chronological order (the oldest first and the newest last). |
| (MeasurementSetFetcher::execute_query): Executes the main query. |
| (MeasurementSetFetcher::format_map): Returns the mapping of a measurement field to an array index. This removes |
| the need to have key names for each measurement and reduces the JSON size by ~10%. |
| (MeasurementSetFetcher::format_run): Creates an array that contains data for a single measurement. The order |
| matches that of keys in format_map. |
| (MeasurementSetFetcher::parse_revisions_array): Added. Copied from runs.php. |
| * tests/api-measurement-set.js: Added. Added tests for /api/measurement-set. |
| |
| 2015-12-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Using fake timestamp in OS version make some results invisible |
| https://bugs.webkit.org/show_bug.cgi?id=152289 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Fix various bugs after r194088. |
| |
| * public/api/commits.php: |
| (format_commit): Include the commit order. |
| * public/v2/data.js: |
| (CommitLogs._cacheConsecutiveCommits): Sort by commit order when commit time is missing. |
| * tools/pull-os-versions.py: |
| (OSBuildFetcher._assign_order): Use integer instead of fake time for commit order. |
| (available_builds_from_command): Exit early when an exception is thrown. |
| |
| 2015-12-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo in the previous commit. |
| |
| * public/include/report-processor.php: |
| |
| 2015-12-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r192965. Suppress a warning about log being referred to as a closure variable. |
| |
| * public/include/report-processor.php: |
| |
| 2015-12-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Using fake timestamp in OS version make some results invisible |
| https://bugs.webkit.org/show_bug.cgi?id=152289 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Added commit_order column to explicitly order OS versions. This fixes the bug whereby which |
| baseline results reported with only OS versions are shown with x coordinate set to 10 years ago. |
| |
| To migrate the existing database, run: |
| ALTER TABLE commits ADD COLUMN commit_order integer; |
| CREATE INDEX commit_order_index ON commits(commit_order); |
| |
| Then for each repository $1, |
| UPDATE commits SET (commit_time, commit_order) = (NULL, CAST(EXTRACT(epoch from commit_time) as integer)) |
| WHERE commit_repository = $1; |
| |
| |
| * init-database.sql: Added the column. |
| * public/api/commits.php: |
| (fetch_commits_between): Use commit_order to order commits when commit_time is missing. |
| * public/api/report-commits.php: |
| (main): Set commit_order. |
| * tools/pull-os-versions.py: |
| (OSBuildFetcher.fetch_and_report_new_builds): |
| (OSBuildFetcher._assign_order): Renamed from _assign_fake_timestamps. Set the order instead of a fake timestmap. |
| |
| 2015-12-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard can't merge when the destination platform is missing baseline/target |
| https://bugs.webkit.org/show_bug.cgi?id=152286 |
| |
| Reviewed by Stephanie Lewis. |
| |
| The bug was caused by the query to migrate test configurations to new platform checking |
| configuration type and metric separately; that is, it assumes the configuration exists |
| only if either the same type or the same metric exists in the destination. |
| |
| Fixed the bug by checking both conditions simultaneously for each configuration. |
| |
| * public/admin/platforms.php: |
| * tests/admin-platforms.js: Added a test. |
| |
| 2015-12-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard's buildbot sync config JSON duplicates too much information |
| https://bugs.webkit.org/show_bug.cgi?id=152196 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Added shared, per-builder, and per-test (called type) configurations. |
| |
| * tools/sync-with-buildbot.py: |
| (load_config): |
| (load_config.merge): |
| |
| 2015-12-02 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should avoid overflow during geometric mean computation |
| https://bugs.webkit.org/show_bug.cgi?id=151773 |
| |
| Reviewed by Chris Dumez. |
| |
| * public/include/report-processor.php: |
| |
| 2015-11-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should extend baseline and target to the future |
| https://bugs.webkit.org/show_bug.cgi?id=151511 |
| |
| Reviewed by Darin Adler. |
| |
| * public/v2/data.js: |
| (RunsData.prototype.timeSeriesByCommitTime): Added extendToFuture as an argument. |
| (RunsData.prototype.timeSeriesByBuildTime): Ditto. |
| (RunsData.prototype._timeSeriesByTimeInternal): Ditto. |
| (TimeSeries): Add a new point to the end if extendToFuture is set and the series is not empty. |
| * public/v2/manifest.js: |
| (App.Manifest._formatFetchedData): Set extendToFuture to true for baselines and targets. |
| |
| 2015-11-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should always show comparison to baseline and target even if one is missing |
| https://bugs.webkit.org/show_bug.cgi?id=151510 |
| |
| Reviewed by Darin Adler. |
| |
| Show the comparison status against the baseline when baseline is present but target is missing. |
| |
| To make the code more readable, this patch splits the logic into three cases: |
| 1. Both baseline and target are present |
| 2. Only baseline is present |
| 3. Only target is present |
| |
| Also extracted a helper function to construct the label. |
| |
| * public/v2/app.js: |
| (.labelForDiff): Added. |
| (App.Pane.computeStatus): |
| |
| 2015-11-23 Commit Queue <commit-queue@webkit.org> |
| |
| Unreviewed, rolling out r192716 and r192717. |
| https://bugs.webkit.org/show_bug.cgi?id=151582 |
| |
| The patch was incorrect. We always need at least one data |
| point in each configuration (Requested by rniwa on #webkit). |
| |
| Reverted changesets: |
| |
| "Perf dashboard's should not include results more than 366 |
| days old in JSON" |
| https://bugs.webkit.org/show_bug.cgi?id=151529 |
| http://trac.webkit.org/changeset/192716 |
| |
| "Build fix for old version of PHP." |
| http://trac.webkit.org/changeset/192717 |
| |
| 2015-11-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix for old version of PHP. |
| |
| * public/api/runs.php: |
| |
| 2015-11-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard's should not include results more than 366 days old in JSON |
| https://bugs.webkit.org/show_bug.cgi?id=151529 |
| |
| Reviewed by Timothy Hatcher. |
| |
| Don't return results more than 366 days old in /api/runs/ JSON API. |
| This is a ~5% runtime improvement and reduces the JSON file size by 20-50% in the internal perf dashboard. |
| |
| * public/api/runs.php: |
| (main): Added the support for "?noResults" to avoid echoing results. This is useful for debugging. |
| Also instantiate RunsGenerator before issuing the query to find all configurations so that the runtime cost |
| of doing so will be included in elapsedTime. |
| (RunsGenerator::fetch_runs): Skip a row when its build and commit times are more than 366 days old. |
| (RunsGenerator::format_run): Takes build_time and revisions as arguments since fetch_runs uses them now. |
| (RunsGenerator::parse_revisions_array): Compute the max of commit times. |
| |
| 2015-11-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove chartPointRadius from interactive chart component |
| https://bugs.webkit.org/show_bug.cgi?id=151480 |
| |
| Reviewed by Darin Adler. |
| |
| Replaced the parameter by CSS rules. |
| |
| * public/v2/chart-pane.css: |
| (.chart .dot): |
| (.chart .dot.foreground): |
| (.chart .highlight): |
| (.chart .extent): |
| * public/v2/index.html: |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent.Ember.Component.extend._constructGraphIfPossible): |
| (App.InteractiveChartComponent.Ember.Component.extend._highlightedItemsChanged): |
| |
| 2015-11-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard's runs API uses more than 128MB of memory |
| https://bugs.webkit.org/show_bug.cgi?id=151478 |
| |
| Reviewed by Andreas Kling. |
| |
| Don't fetch all query results at once to avoid using twice as much memory as needed. |
| Use iterative API to format each result at a time. |
| |
| This change is also a 5% runtime performance gain. |
| |
| * public/api/runs.php: |
| (RunsGenerator::__construct): Takes a Database instance instead of a list of configurations. The latter is |
| no longer needed as we pass in each configuration type explicitly to fetch_runs. |
| (RunsGenerator::fetch_runs): Renamed from add_runs since it now executes the database query via execute_query. |
| Also moved the logic to compute the last modified time here. |
| (RunsGenerator::execute_query): Moved from fetch_runs_for_config. Use Database::query instead of query_and_fetch_all. |
| (RunsGeneratorForTestGroup): |
| (RunsGeneratorForTestGroup::__construct): |
| (RunsGeneratorForTestGroup::execute_query): Moved from fetch_runs_for_config_and_test_group. |
| |
| * public/include/db.php: |
| (generate_data_file): Lock the file to avoid corruption. |
| |
| 2015-11-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard always fetches charts JSON twice |
| https://bugs.webkit.org/show_bug.cgi?id=151483 |
| |
| Reviewed by Andreas Kling. |
| |
| Only re-generate "runs" JSON via /api/runs/ when the cache doesn't exist in /data/ or the cached JSON is |
| obsolete (shouldRefetch is set true) or corrupt (the second closure). |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): |
| |
| 2015-11-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Internal perf dashboard takes forever to load |
| https://bugs.webkit.org/show_bug.cgi?id=151430 |
| |
| Rubber-stamped by Antti Koivisto. |
| |
| Fix a few performance problems with the perf dashboard v2 UI. |
| |
| * public/v2/app.js: |
| (App.DashboardRow._createPane): Set "inDashboard" to true. |
| (App.Pane._fetch): Immediately show the cached chart instead of waiting for the refetched data which invokes |
| a PHP JSON API. Also don't fetch the analysis tasks when the chart is shown in the dashboard since we don't |
| show annotate charts in the dashboard. |
| |
| 2015-10-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed fix of a test after r190687. |
| |
| * tests/admin-regenerate-manifest.js: |
| |
| 2015-10-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard tools shouldn't require server credentials in multiple configuration files |
| https://bugs.webkit.org/show_bug.cgi?id=149994 |
| |
| Reviewed by Chris Dumez. |
| |
| Made detect-changes.js and pull-svn.py pull username and passwords from the server config JSON to reduce |
| the number of JSON files that need to include credentials. |
| |
| Also made each script reload the server config after sleep to allow dynamic credential updates. |
| |
| In addition, change the server config JSON's format to include scheme, host, and port numbers separately |
| instead of a url since detect-changes.js needs each value separately. |
| |
| This reduces the number of JSONs with credentials to two for our internal dashboard. |
| |
| * tools/detect-changes.js: |
| (main): Added a property argument parsing. Now takes --server-config-json, --change-detection-config-json, |
| and --seconds-to-sleep like other scripts. |
| (parseArgument): Added. |
| (fetchManifestAndAnalyzeData): Reload the server config JSON. |
| (loadServerConfig): Added. Set settings.perfserver and settings.slave from the server config JSON. Also |
| add settings.perfserver.host to match the old format. |
| (configurationsForTesting): Fixed a bug that we throw an exception when a dashboard contains an empty cell. |
| |
| * tools/pull-os-versions.py: |
| (main): Use load_server_config after each sleep. |
| |
| * tools/pull-svn.py: |
| (main): Use load_server_config after each sleep. |
| (fetch_commits_and_submit): Use the perf dashboard's auth as subversion credential when useServerAuth is set. |
| |
| * tools/sync-with-buildbot.py: |
| (main): Use load_server_config after each sleep. |
| |
| * tools/util.py: |
| (load_server_config): Extracted from python scripts. Computes server's url from scheme, host, and port number |
| to match the old format python scripts except. |
| |
| 2015-10-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r190817. Now that pull-os-versions store fake timestamps, we need to bypass timestamp |
| checks for OS versions when bots try to report new results. Otherwise, we fail to process the reports |
| with a MismatchingCommitTime error. |
| |
| * public/include/report-processor.php: |
| (ReportProcessor::resolve_build_id): |
| |
| 2015-10-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard erroneously shows an old OS build in A/B testing range |
| https://bugs.webkit.org/show_bug.cgi?id=149942 |
| |
| Reviewed by Darin Adler. |
| |
| Ordering OS builds lexicologically turned out be a bad idea since 15A25 falls between 15A242 and 15A251. |
| Use a fake/synthetic timestamp to force the commonly understood total order instead. |
| |
| Refactored pull-os-versions.py to share the server config JSON with other scripts. Also made the script |
| support pulling multiple sources; e.g. both OS X and iOS. |
| |
| Also removed superfluous feature to submit results in chunks. The perf dashboard can handle thousands of |
| revisions being submitted at once just fine. |
| |
| * public/api/commits.php: |
| (main): A partial revert of r185574 since we no longer need to order builds lexicologically. |
| |
| * tools/pull-os-versions.py: |
| (main): Takes --os-config-json, --server-config-json, and --seconds-to-sleep as arguments instead of |
| a single --config argument to share the server config JSON with other scripts. |
| (OSBuildFetcher): Extracted out of main. This class is instantiated for each OS kind (e.g. OS X). |
| (OSBuildFetcher.__init__): Added. |
| (OSBuildFetcher._fetch_available_builds): Extracted out of main. Fetches available builds from a website |
| or custom commands. |
| (OSBuildFetcher.fetch_and_report_new_builds): Extracted out of main. Submits the fetched builds after |
| filtering out the ones we've already reported. |
| (OSBuildFetcher._assign_fake_timestamps): Creates a fake timestamp to establish a total order amongst each |
| OS X / iOS style build number such as 12A3456b. |
| |
| 2015-10-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| pull-svn.py fails to sync revisions when SVN credentials is not setup |
| https://bugs.webkit.org/show_bug.cgi?id=149941 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the support for specifying subversion credentials. |
| |
| Also added the support for pulling from multiple subversion servers. Subversion servers are specified |
| in a JSON configuration file specified by --svn-config formatted as follows: |
| |
| [ |
| { |
| "name": "WebKit", |
| "url": "http://svn.webkit.org/repository/webkit", |
| "username": "webkitten", |
| "password": "webkitten's password", |
| "trustCertificate": true, |
| "accountNameFinderScript": |
| ["python", "/Volumes/Data/WebKit/Tools/Scripts/webkit-patch", "find-users"] |
| }, |
| ... |
| ] |
| |
| In addition, refactored it to use the shared server config JSON for the dashboard access. |
| |
| * tools/pull-svn.py: |
| (main): Now takes --svn-config-json, --server-config-json, --seconds-to-sleep and --max-fetch-count |
| as required options instead of seven unnamed arguments. |
| (fetch_commits_and_submit): Extracted from main. Fetches at most max_fetch_count new revisions from |
| the subversion server, and submits them in accordance with server_config. |
| (fetch_commit_and_resolve_author): Now takes a single repository dictionary instead of two separate |
| arguments for name and URL to pass down the repository's authentication info to fetch_commit. |
| (fetch_commit): Ditto. Add appropriate arguments when username and passwords are specified. |
| (resolve_author_name_from_account): Use a list argument instead of a single string argument now that |
| the argument comes from a JSON instead of sys.argv. |
| |
| 2015-10-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed race condition fix. Exit early when xScale or yScale is not defined. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._updateRangeBarRects): |
| |
| 2015-10-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a page that cycles through v2 dashboards |
| https://bugs.webkit.org/show_bug.cgi?id=149907 |
| |
| Reviewed by Chris Dumez. |
| |
| Add cycler.html that goes through each dashboard on v2 UI. |
| |
| This allows the dashboards to be cycled through on a TV screen. |
| |
| * public/cycler.html: Added. |
| (loadURLAt): Appends a new iframe to load the next URL (i is the index of the dashboard to be shown) |
| at the end of body. We don't immediately show the new iframe since it might take a while to load. |
| (showNewFrameIfLoaded): Remove the current iframe and show the next iframe if the next dashboard has |
| finished loading. We can't rely on DOMContentLoaded or load events because we use asynchronous XHR to |
| load each chart's data. Instead, wait until some chart becomes available or fails to load and none of |
| charts are still in progress to be shown. |
| |
| 2015-10-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Allow custom revisions to be specified in A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=149905 |
| |
| Reviewed by Chris Dumez. |
| |
| Allow custom revision number on each "repository" when creating a test group. |
| |
| * public/v2/app.css: |
| (form .analysis-group [name=customValue]): Added. |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController._createConfiguration): Added "Custom" as a revision option. |
| Also added point labels such as (point 3) on "None" for when some points are missing revision info. |
| (App.AnalysisTaskController._labelForPoints): Extracted from _createConfiguration. |
| (App.AnalysisTaskController.actions.createTestGroup): Respect the custom revision number when custom |
| revision option is selected. |
| |
| * public/v2/index.html: Added a text field for specifying a custom revision number. |
| |
| 2015-10-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make the site name configurable in perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=149894 |
| |
| Reviewed by Chris Dumez. |
| |
| Added "siteTitle" as a new configuration key to specify the site name. |
| |
| * public/include/db.php: |
| (config): Now takes the default value as an argument. |
| * public/include/manifest.php: |
| (ManifestGenerator::generate): Include siteTitle in the manifest. |
| * public/index.html: Update the title and the heading when the manifest is loaded. |
| * public/v2/index.html: Use App.Manifest.siteTitle as the heading. document.title needs to be updated manually. |
| * public/v2/manifest.js: |
| (App.MetricSerializer.normalizePayload): Update document.title and App.Manifest.siteTitle. |
| |
| 2015-10-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard doesn't show analysis tasks anchored at outliers |
| https://bugs.webkit.org/show_bug.cgi?id=149870 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by the computation of start and end times of analysis tasks being dependent on |
| time series provided to the interactive chart component even though they are already filtered. |
| |
| Since the interactive chart component shouldn't be messing with the underlying data models, moved |
| the code to compute start and end times to App.Pane, to where it belongs, and made the moved code use |
| the unfiltered time series newly exposed on ChartData. |
| |
| Also fixed a bug in fetch-from-remote.php which resulted in Ember endlessly fetching same JSON files. |
| |
| * public/admin/fetch-from-remote.php: |
| (.): Use the full request URI for HTTP requests and caching. Otherwise, we're going to mix up caches |
| and Ember can start hanging browsers (took me three hours to debug this). |
| |
| * public/v2/app.js: |
| (App.Pane._showOutlierChanged): Added. Resets chartData when showOutlier flag has been changed. |
| (App.Pane.fetchAnalyticRanges): The old code wasn't filtering analysis tasks by platforms and metrics |
| at all since it relied on the server-side REST API to do the filtering, which I haven't implemented yet. |
| Filter the results manually instead. |
| (App.Pane.ranges): Moved the logic to compute startTime and endTime here from InteractiveChartComponent. |
| (App.PaneController.toggleShowOutlier): Now that App.Pane responds to showOutlier changes, we don't |
| need to call a private method on it. |
| (App.AnalysisTaskController._chartDataChanged): When end points are not found, try showing outliers. |
| This will cause chartData to be modified so just exit early and wait for getting called again. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._rangesChanged): The code to compute start and end time has been moved |
| to App.Pane.ranges. |
| |
| * public/v2/manifest.js: |
| (App.Manifest._formatFetchedData): Added unfiltered time series as new properties as they are now used |
| to compute the end points of analysis tasks when their end points are outliers. |
| |
| 2015-10-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Fix a typo in r190645. |
| |
| * public/include/db.php: |
| |
| 2015-10-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| V2 UI shouldn't sort dashboards lexicologically |
| https://bugs.webkit.org/show_bug.cgi?id=149856 |
| |
| Reviewed by Chris Dumez. |
| |
| Don't sort the dashboards by name in App.Manifest. |
| |
| * public/v2/app.js: |
| (App.IndexRoute.beforeModel): Don't transition to "undefined" (string) dashboard. |
| * public/v2/manifest.js: |
| (App.Manifest.._fetchedManifest): |
| |
| 2015-10-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| V2 UI fails to show the data for the very first point in charts |
| https://bugs.webkit.org/show_bug.cgi?id=149857 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by seriesBetweenPoints returning null for when point.seriesIndex is 0. |
| Explicitly check the type of this property instead. |
| |
| * public/v2/data.js: |
| (TimeSeries.prototype.seriesBetweenPoints): |
| |
| 2015-10-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have the capability to test local UI with production data |
| https://bugs.webkit.org/show_bug.cgi?id=149834 |
| |
| Reviewed by Chris Dumez. |
| |
| Added tools/run-with-remote-server.py which runs a local httpd server and pulls data from a remote server. |
| |
| * Install.md: Added the instruction on how to use the script. Also updated the remaining instructions |
| for El Capitan. |
| * config.json: Added remote server configurations. |
| * public/admin/fetch-from-remote.php: Added. This script fetches JSON from the remote server specified in |
| config.json and caches the results in the location specified as "cacheDirectory" in config.json. |
| (main): |
| (fetch_remote): |
| * public/include/db.php: |
| (config_path): Extracted from generate_data_file. |
| (generate_data_file): |
| * tools/remote-server-relay.conf: Added. Apache 2.4 configuration file for a local http server launched by |
| run-with-remote-server.py. |
| * tools/run-with-remote-server.py: Added. Launches Apache with the right set of directives. |
| (main): |
| (abspath_from_root): |
| |
| 2015-07-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo. |
| |
| * public/js/helper-classes.js: |
| |
| 2015-06-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| build-requests should use conform to JSON API format |
| https://bugs.webkit.org/show_bug.cgi?id=146375 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Instead of returning single dictionary that maps root set id to a dictionary of repository names |
| to revisions, timestamps, simply return root sets and roots "rows" or "objects" as defined in |
| JSON API (http://jsonapi.org/). This API change makes it easier to resolve the bug 146374 and |
| matches what we do in /api/test-groups. |
| |
| Also add the support for /api/build-requests/?id=<id> to fetch the build request with <id>. |
| This is useful for debugging purposes. |
| |
| * public/api/build-requests.php: |
| (main): Added the support for $_GET['id']. Also return "rootSets" and "roots". |
| (update_builds): Extracted from main. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestFetcher::fetch_request): Added. Used for /api/build-requests/?id=<id>. |
| (BuildRequestFetcher::results_internal): Always call fetch_roots_for_set_if_needed. |
| (BuildRequestFetcher::fetch_roots_for_set_if_needed): Renamed from fetch_roots_for_set. |
| Moved the logic to exit early when the root set had already been fetched here. |
| |
| * public/v2/analysis.js: |
| (App.TestGroup._fetchTestResults): Fixed the bug that test groups without any successful results |
| won't be shown. |
| |
| * tools/pull-os-versions.py: |
| (main): |
| (setup_auth): Moved to util.py |
| |
| * tools/sync-with-buildbot.py: |
| (main): Replaced a bunch of perf dashboard related options by --server-config-json. |
| (update_and_fetch_build_requests): No longer takes build_request_auth since that's now taken care |
| of by setup_auth. |
| (organize_root_sets_by_id_and_repository_names): Added. Builds the old rootsSets directory based |
| on "roots" and "rootSets" dictionaries returned by /api/build-requests. |
| (config_for_request): Fixed a bug that the script blows up when the build request is missing |
| the repository specified in the configuration. This tolerance is necessary when a new repository |
| dependency is added but we want to run A/B tests for old builds without the dependency. |
| (fetch_json): No longer takes auth. |
| |
| * tools/util.py: |
| (setup_auth): Moved from pull-os-versions.py to be shared with sync-with-buildbot.py. |
| |
| 2015-06-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. A/B testing is broken when continuous builders report revisions out of order. |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController.Ember.Controller.extend.): |
| |
| 2015-06-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A/B testing results should be shown even if they were submitted to different platforms |
| https://bugs.webkit.org/show_bug.cgi?id=146219 |
| |
| Reviewed by Andreas Kling. |
| |
| Fetch A/B testing results regardless of the platform to which results are submitted |
| by providing the platform ID to which the results were submitted for each test group. |
| |
| * public/api/test-groups.php: |
| (main): Include the platform id in the test groups. |
| * public/v2/analysis.js: |
| (App.TestGroup._fetchTestResults): Fetch results from the platform associated with the group. |
| |
| 2015-06-19 Csaba Osztrogonác <ossy@webkit.org> |
| |
| Remove unnecessary svn:executable flags |
| https://bugs.webkit.org/show_bug.cgi?id=146107 |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| * public/js/helper-classes.js: Removed property svn:executable. |
| * public/js/jquery.flot.plugins.js: Removed property svn:executable. |
| * public/v2/app.css: Removed property svn:executable. |
| * public/v2/app.js: Removed property svn:executable. |
| * public/v2/chart-pane.css: Removed property svn:executable. |
| * public/v2/data.js: Removed property svn:executable. |
| * public/v2/index.html: Removed property svn:executable. |
| * public/v2/js/d3/LICENSE: Removed property svn:executable. |
| * public/v2/js/d3/d3.js: Removed property svn:executable. |
| * public/v2/js/d3/d3.min.js: Removed property svn:executable. |
| * public/v2/js/ember-data.js: Removed property svn:executable. |
| * public/v2/js/ember.js: Removed property svn:executable. |
| * public/v2/js/handlebars.js: Removed property svn:executable. |
| * public/v2/js/jquery.min.js: Removed property svn:executable. |
| * public/v2/js/statistics.js: Removed property svn:executable. |
| * public/v2/manifest.js: Removed property svn:executable. |
| * public/v2/popup.js: Removed property svn:executable. |
| |
| 2015-06-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Reading the list of analysis tasks is extremely slow |
| https://bugs.webkit.org/show_bug.cgi?id=146086 |
| |
| Reviewed by Darin Adler. |
| |
| The bug was caused by Ember data requesting manifest.js hundreds of times. |
| Fetch it ahead of time in each route instead. |
| |
| * public/v2/app.js: |
| (App.AnalysisRoute.model): |
| (App.AnalysisTaskRoute.model): |
| |
| 2015-06-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update ReadMe.md and Install.md per database changes |
| https://bugs.webkit.org/show_bug.cgi?id=146076 |
| |
| Reviewed by Darin Adler. |
| |
| Updated. |
| |
| * Install.md: |
| * ReadMe.md: |
| |
| 2015-06-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Increase the popup dismissal time from 100ms to 500ms |
| https://bugs.webkit.org/show_bug.cgi?id=146077 |
| |
| Rubber-stamped by Andreas Kling. |
| |
| * public/v2/popup.js: |
| (App.PopupView.scheduleHiding): |
| |
| 2015-06-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v2 UI should have buttons to breakdown a test |
| https://bugs.webkit.org/show_bug.cgi?id=146010 |
| |
| Reviewed by Chris Dumez. |
| |
| Added buttons beneath each chart pane to add "alternative panes". By default, it shows every platform |
| as well as "Breakdown" to add all subtests' metrics. |
| |
| Also removed the metric submenu from tests that had exactly one metric. When a test only measures Time |
| for example, we make the test itself clickable instead of showing a submenu that only contains one item. |
| |
| * public/v2/app.js: |
| (App.ChartsController.addAlternativePanes): Added. |
| (App.TestProxyForPopup.children): Calls _updateChildren and returns this._children. |
| (App.TestProxyForPopup.actionName): Added. |
| (App.TestProxyForPopup.actionArgument): Added. |
| (App.TestProxyForPopup._updateChildren): Extracted from children. Now also sets _actionName and |
| _actionArgument in the case there was exactly one metric so that showing submenu is unnecessary. |
| (App.PaneController.alternativePanes): Added. Returns the list of alternative panes. The platform list |
| excludes ones that don't have this metric (e.g. iOS doesn't have desktop PLT results) as well as ones |
| that are already present in the list of panes. |
| * public/v2/chart-pane.css: Added CSS rules for alternative pane buttons beneath the chart panes. |
| * public/v2/index.html: |
| * public/v2/manifest.js: |
| (App.Metric.childMetrics): Added. |
| |
| 2015-06-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r185574. |
| |
| * public/v2/app.js: |
| (set get App.Pane.Ember.Object.extend.): |
| |
| 2015-06-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a typo. |
| |
| * tools/pull-os-versions.py: |
| (main): |
| |
| 2015-06-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should be able to list iOS versions as well as OS X versions |
| https://bugs.webkit.org/show_bug.cgi?id=146003 |
| |
| Reviewed by Stephanie Lewis. |
| |
| Generalized pull-osx.py so that it can run an arbitrary shell command to fetch OS versions based on |
| information specified in config.json. |
| |
| * tools/pull-os-versions.py: Renamed from pull-osx.py. |
| (main): Use available_builds_from_command when 'customCommands' is specified. |
| (available_builds_from_command): Added. Executes a shell command to fetch a list of available builds. |
| (fetch_available_builds): Now takes the repository name. |
| |
| 2015-06-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Removed a superfluous console.log per Chris's comment. |
| |
| * public/v2/app.js: |
| |
| 2015-06-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task should show all possible revisions for A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=145996 |
| |
| Reviewed by Chris Dumez. |
| |
| * public/api/commits.php: |
| (fetch_commits_between): When the time stamp is not available for commits, use revision numbers |
| to find revisions between two ranges. This is necessary for OS X and iOS versions since they don't |
| have a "commit time". |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController.updateRootConfigurations): Fetch commits between two end points. |
| (App.AnalysisTaskController._createConfiguration): Extracted from updateRootConfigurations. List |
| the fetched list of commits if available. |
| (App.AnalysisTaskController._serializeNumbersSkippingConsecutiveEntries): Added. Serializes an list |
| of numbers intelligently. For example, [1, 2, 4, 5] turns into "1-2, 4-5". Without this, some lists |
| of points shown in the A/B testing configurations become too long. |
| |
| * public/v2/commits-viewer.js: |
| (App.CommitsViewerComponent.commitsChanged): |
| |
| * public/v2/data.js: |
| (CommitLogs.fetchCommits): Renamed from fetchForTimeRange. |
| |
| 2015-06-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add a script to post new OS X builds to perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=145955 |
| |
| Reviewed by Darin Adler. |
| |
| Added a new script pull-osx.py and relaxed the restrictions on commits accepted by the dashboard API. |
| |
| * public/api/report-commits.php: |
| (main): Allow more characters than [A-Za-z0-9] in revision. e.g. "10.10.3 14D136". |
| Also allow commits without the author, commit time, and commit message as OS versions do not have those. |
| |
| * tools/pull-osx.py: Added. |
| (main): Fetch the list of builds from a website and submit them per submissionSize with submissionInterval. |
| Once all builds have been submitted, wait for a long time as specified by fetchInterval. |
| (setup_auth): Sets up basic or digest auth to access the dashboard. |
| (fetch_available_builds): Fetches and parses the XML document from an internal website. |
| (textContent): A helper function to get the text content out of a XML node. |
| (submit_commits): Submits commits to the perf dashboard. |
| |
| * tools/pull-svn.py: |
| (fetch_commit): |
| |
| * tools/util.py: Extracted submit_commits and text_content from pull-svn.py to be reused in pull-osx.py. |
| |
| 2015-06-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard's v2 UI shouldn't hide auto-detected outliers |
| https://bugs.webkit.org/show_bug.cgi?id=145940 |
| |
| Reviewed by Darin Adler. |
| |
| Don't fallback to the default strategies for moving averages and envelope when one is not specified. |
| Also deleted the code to mark points outside the envelop as outliers. |
| |
| * public/v2/app.js: |
| |
| 2015-06-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix for merging platforms. |
| |
| * public/admin/platforms.php: |
| |
| 2015-06-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. Some builder names are really long. |
| |
| * init-database.sql: |
| |
| 2015-05-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Show results and status before revisions for A/B testing results |
| https://bugs.webkit.org/show_bug.cgi?id=145327 |
| |
| Reviewed by Chris Dumez. |
| |
| Place the results and the status columns before the columns for revisions. |
| Also show the absolute difference as well as the relative difference between the averages of A and B. |
| |
| * public/v2/app.js: |
| (App.TestGroupPane._populate): |
| (App.TestGroupPane._computeStatisticalSignificance): |
| * public/v2/index.html: |
| |
| 2015-05-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r184591. |
| |
| * public/v2/manifest.js: |
| |
| 2015-05-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Use POSIX timestamp instead of human readable string for the commit time. |
| |
| * public/include/build-requests-fetcher.php: |
| |
| 2015-05-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| UI to associate bugs with an analysis task is crappy |
| https://bugs.webkit.org/show_bug.cgi?id=145198 |
| |
| Reviewed by Andreas Kling. |
| |
| Make the UI less crappy by linkifying bug numbers and adding an explicit button to disassociate |
| a bug and a separate select view with a text field to associate a new bug instead of implicitly |
| updating or deleting the existing record based on what the user had typed. |
| |
| * init-database.sql: Removed the constraint that each bug tracker should appear exactly once for |
| a given analysis task since it's perfectly reasonable for a given task to be associated with |
| multiple WebKit bugs. |
| |
| * public/privileged-api/associate-bug.php: |
| (main): Only remove the bug specified by newly added bugToDelete instead of implicitly deleting |
| one that matches the analysis task and the bug tracker when the bug number is falsey. |
| |
| * public/v2/analysis.js: |
| (App.Bug.url): Added. |
| (App.BugAdapter.deleteRecord): Added. Uses the privileged API to delete the record. |
| |
| * public/v2/app.css: |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController.actions.addBug): Added. |
| (App.AnalysisTaskController.actions.deleteBug): Added. |
| (App.AnalysisTaskController.associateBug): Deleted. |
| |
| * public/v2/index.html: Updated the templates. |
| |
| * public/v2/manifest.js: |
| (App.BugTracker.urlFromBugNumber): Added. |
| |
| 2015-05-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A/B testing rootSets should provide commit times as well as revisions |
| https://bugs.webkit.org/show_bug.cgi?id=145207 |
| |
| Reviewed by Andreas Kling. |
| |
| Some continuous build systems need the commit time as well as the revision number / hash so provide one |
| in the root sets but maintain the backwards compatibility with buildbots that use revision number directly. |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::fetch_roots_for_set): Made the revision info an associative array that contains |
| the revision number as well as the commit time. |
| * tools/sync-with-buildbot.py: |
| (schedule_request): Removed "replacement" which was a superfluous copy of "roots". Use "revision" values |
| when the JSON configuration refers to "root". This is necessary in buildbot instances that require WebKit |
| revision to be specified on its own field instead of it being a JSON that contains "revision" and "time". |
| |
| 2015-05-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Don't fall into an infinite loop when value (renamed from bytes) is zero. |
| |
| * public/v2/manifest.js: |
| (App.Manifest.Ember.Controller.extend.): |
| (App.Manifest.Ember.Controller.extend): |
| |
| 2015-05-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Don't show unit (bytes) separaetly from SI suffixes (K, M, etc...) |
| https://bugs.webkit.org/show_bug.cgi?id=145181 |
| |
| Rubber-stamped by Chris Dumez. |
| |
| Show 'MB' in each y-axis label instead of showing 'bytes' separately and suffixing each label with just 'M' |
| for clarity. This change also reduces the code complexity. |
| |
| * public/index.html: |
| * public/v2/app.js: |
| (App.AnalysisTaskController._chartDataChanged): |
| (App.TestGroupPane._createConfigurationSummary): |
| * public/v2/data.js: |
| (RunsData.unitFromMetricName): Use 'B' instead of 'bytes' as the unit. |
| |
| * public/v2/interactive-chart.js: Removed the support for showing units separately. |
| (App.InteractiveChartComponent._constructGraphIfPossible): |
| (App.InteractiveChartComponent._relayoutDataAndAxes) |
| |
| * public/v2/manifest.js: |
| (App.Manifest._makeFormatter): Renamed from _formatBytes. Support more SI suffixes such as micro and mili. |
| Now takes the unit as the first argument. Adjust the base unit if it's 'ms'. |
| (App.Manifest._formatFetchedData): Removed unit and formatWithUnit now that all all formatters would |
| automatically include unit. |
| |
| 2015-05-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION: v2 UI reports a higher memory usage |
| https://bugs.webkit.org/show_bug.cgi?id=145151 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by v2 UI using 1000 to divide the number of bytes instead of by 1024 as done in v1. |
| Fixed the bug by manually implementing the formatter as done in v1. |
| |
| * public/v2/manifest.js: |
| (App.Manfiest._formatBytes): Added. |
| (App.Manifest._formatFetchedData): Use _formatByte instead of format('s'). |
| |
| 2015-05-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. Add "Duration" as a time metric. |
| |
| * public/js/helper-classes.js: |
| * public/v2/data.js: |
| (RunsData.unitFromMetricName): |
| |
| 2015-05-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard treats Speedometer and JetStream as smaller is better |
| https://bugs.webkit.org/show_bug.cgi?id=144711 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the support for "Score" metric. |
| |
| * public/js/helper-classes.js: |
| (PerfTestRuns): |
| * public/v2/data.js: |
| (RunsData.unitFromMetricName): |
| (RunsData.isSmallerBetter): |
| |
| 2015-04-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r183232. |
| |
| * public/include/json-header.php: |
| |
| 2015-04-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should automatically detect regressions |
| https://bugs.webkit.org/show_bug.cgi?id=141443 |
| |
| Reviewed by Anders Carlsson. |
| |
| Added a node.js script detect-changes.js to detect potential regressions and progressions |
| on the graphs tracked on v2 dashboards. |
| |
| * init-database.sql: Added analysis_strategies table and task_segmentation and task_test_range |
| columns to analysis_tasks to keep the segmentation and test range selection strategies used |
| to create an analysis task. |
| |
| * public/api/analysis-tasks.php: |
| (format_task): Include task_segmentation and analysis_tasks in the results. |
| |
| * public/include/json-header.php: |
| (remote_user_name): Returns null when the privileged API is authenticated as a slave instead |
| of a CSRF prevention token. |
| (should_authenticate_as_slave): Added. |
| (ensure_privileged_api_data_and_token_or_slave): Added. Authenticate as a slave if slaveName |
| and slavePassword are specified. Since detect-changes.js and other slaves are not susceptible |
| to a CSRF attack, we don't need to check a CSRF token. |
| |
| * public/privileged-api/create-analysis-task.php: |
| (main): Use ensure_privileged_api_data_and_token_or_slave to let detect-changes.js create new |
| analysis task. Also add or find segmentation and test range selection strategies if specified. |
| |
| * public/privileged-api/create-test-group.php: |
| (main): Use ensure_privileged_api_data_and_token_or_slave. |
| |
| * public/privileged-api/generate-csrf-token.php: |
| |
| * public/v2/app.js: |
| (App.Pane._computeMovingAverageAndOutliers): _executeStrategy has been moved to Statistics. |
| |
| * public/v2/data.js: Export Measurement, RunsData, TimeSeries. Used in detect-changes.js. |
| (Array.prototype.find): Added a polyfill to be used in node.js. |
| (RunsData.fetchRuns): |
| (RunsData.pathForFetchingRuns): Extracted from fetchRuns. Used in detect-changes.js. |
| (RunsData.createRunsDataInResponse): Extracted from App.Manifest._formatFetchedData to use it |
| in detect-changes.js. |
| (RunsData.unitFromMetricName): Ditto. |
| (RunsData.isSmallerBetter): Ditto. |
| (RunsData.prototype._timeSeriesByTimeInternal): Added secondaryTime to sort points when commit |
| times are identical. |
| (TimeSeries): When commit times are identical, order points based on build time. This is needed |
| for when we trigger two builds at two different OS versions with the same WebKit revision since |
| OS versions don't change the commit times. |
| (TimeSeries.prototype.findPointByIndex): Added. |
| (TimeSeries.prototype.rawValues): Added. |
| |
| * public/v2/js/statistics.js: |
| (Statistics.TestRangeSelectionStrategies.[0]): Use the 99% two-sided probability as claimed in the |
| description of this strategy instead of the default probability. Also fixed a bug that debugging |
| code was referring to non-existent variables. |
| (Statistics.executeStrategy): Moved from App.Pane (app.js). |
| |
| * public/v2/manifest.js: |
| (App.Manifest._formatFetchedData): Various code has been extracted into RunsData in data.js to be |
| used in detect-changes.js. |
| |
| * tools/detect-changes.js: Added. The script fetches the manifest JSON, analyzes each graph in |
| the v2 dashboards, and creates an analysis task for the latest regression or progression detected. |
| It also schedules an A/B testing if possible and notifies another server; e.g. to send an email. |
| (main): Loads the settings JSON specified in the argument. |
| (fetchManifestAndAnalyzeData): The main loop that periodically wakes up to do the analysis. |
| (mapInOrder): Executes callback sequentially (i.e. blocking) on each item in the array. |
| (configurationsForTesting): Finds every (platform, metric) pair to analyze in the v2 dashbaords, |
| and computes various values for when statistically significant changes are detected later. |
| (analyzeConfiguration): Finds potential regressions and progression in the last X days where X |
| is the specified maximum number of days using the specified strategies. Sort the resultant ranges |
| in chronological order and create a new analysis task for the very last change we detected. We'll |
| eventually create an analysis task for all detected changes since we're repeating the analysis in |
| fetchManifestAndAnalyzeData after some time. |
| (computeRangesForTesting): Fetch measured values and compute ranges to test using the specified |
| segmentation and test range selection strategies. Once ranges are found, find overlapping analysis |
| tasks as they need to be filtered out in analyzeConfiguration to avoid creating multiple analysis |
| tasks for the same range (e.g. humans may create one before the script gets to do it). |
| (createAnalysisTaskAndNotify): Create a new analysis task for the specified range, trigger an A/B |
| testing if available, and notify another server with a HTML message as specified. |
| (findStrategyByLabel): |
| (changeTypeForRange): A change is a regression if values are getting larger in a smaller-is-better |
| test or values are getting smaller in a larger-is-better test and vice versa. |
| (summarizeRange): Create a human readable string that summarizes the change detected. e.g. |
| "Potential 3.2% regression detected between 2015-04-20 12:00 and 17:00". |
| (formatTimeRange): |
| (getJSON): |
| (postJSON): |
| (postNotification): Recursively replaces $title and $massage in the specified JSON template. |
| (instantiateNotificationTemplate): |
| (fetchJSON): |
| |
| 2015-04-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have UI to set status on analysis tasks |
| https://bugs.webkit.org/show_bug.cgi?id=143977 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the UI to set the result of an analysis task to 'progression', 'regression', 'unchanged', and 'inconclusive' |
| as well as a boolean indicating whether creating the analysis task was the right thing to do or not. |
| The latter will be a useful metric once we start automatically creating analysis tasks. |
| |
| * init-database.sql: Added two columns to analysis_tasks table. |
| * public/api/analysis-tasks.php: Include the added columns in the JSON. |
| * public/include/db.php: |
| (Database::to_database_boolean): Added. |
| * public/include/json-header.php: |
| (require_match_one_of_values): Added. |
| * public/privileged-api/update-analysis-task.php: Added. Updates 'result' and 'needed' values of an analysis task. |
| (main): |
| * public/v2/analysis.js: |
| (App.AnalysisTask.result): Added. |
| (App.AnalysisTask.needed): Added. We don't use DS.attr('boolean') here since that would coerce null into false |
| and we want to differentiate null from false in order to differentiate the null-ness of the value. |
| (App.AnalysisTask.saveStatus): Added. |
| (App.AnalysisTask.statusLabel): Use 'result' as the label if it's set and all build requests have been processed. |
| * public/v2/app.css: |
| * public/v2/app.js: |
| (App.AnalysisTaskController.analysisResultOptions): Added. |
| (App.AnalysisTaskController.shouldNotHaveBeenCreated): Added. |
| (App.AnalysisTaskController.needsFeedback): Added. Show the checkbox to indicate the analysis task should not have |
| been created if 'no change' is selected. |
| (App.AnalysisTaskController._updateChosenAnalysisResult): Added. |
| (App.AnalysisTaskController.actions.saveStatus): Added. |
| * public/v2/index.html: Extracted a partial template for updating the bug numbers. Also added the UI to update |
| 'result' and 'needed' values of the analysis task. |
| |
| 2015-04-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. Updated config.json after recent changes. |
| |
| * config.json: |
| |
| 2015-04-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make the analysis page more useful |
| https://bugs.webkit.org/show_bug.cgi?id=143617 |
| |
| Reviewed by Chris Dumez. |
| |
| * public/api/analysis-tasks.php: |
| (fetch_and_push_bugs_to_tasks): Added total and finished numbers of build requests associated |
| with the fetched analysis tasks as buildRequestCount and finishedBuildRequestCount respectively. |
| * public/v2/analysis.js: |
| (App.AnalysisTask.formattedCreatedAt): Added. |
| (App.AnalysisTask._addLeadingZero): Added. |
| (App.AnalysisTask.buildRequestCount): Added. |
| (App.AnalysisTask.finishedBuildRequestCount): Added. |
| (App.AnalysisTask.statusLabel): Added. Status total and finished numbers of build requests. |
| (App.AnalysisTask.testGroups): |
| (App.AnalysisTask.triggerable): |
| (App.AnalysisTask.label): |
| |
| * public/v2/app.css: Tweaked style rules for the analysis page. |
| |
| * public/v2/app.js: |
| (App.buildPopup): Sort the list of platforms by name. |
| (App.AnalysisRoute.model): Sort the list of analysis tasks by the order they are created. |
| (App.AnalysisTaskController._fetchedManifest): Added elementId to associate bug tracker names |
| such as "Bugzilla" with the corresponding text field. |
| |
| * public/v2/index.html: Added a bunch of columns to the analysis page and also wrapped the table |
| showing A/B testing results in a div with overflow: scroll so that it always leaves enough space |
| for the accompanying graph. |
| |
| 2015-04-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should automatically select ranges for A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=143580 |
| |
| Reviewed by Chris Dumez. |
| |
| Added a new statistics option for picking a A/B test range selection strategy. |
| The selected ranges are shown in the graph using the same UI to show analysis tasks. |
| |
| * public/v2/app.js: |
| (App.DashboardPaneProxyForPicker._platformOrMetricIdChanged): Updated the query parameters for |
| charts page used by the dashboard since we've added a new parameter at the end. |
| (App.Pane.ranges): Added. Merges ranges created for analysis tasks and A/B testing. |
| (App.Pane.updateStatisticsTools): Clone and set the test range selection strategies. |
| (App.Pane._cloneStrategy): Copy isSegmentation. |
| (App.Pane._updateMovingAverageAndEnvelope): Set testRangeCandidates. |
| (App.Pane._movingAverageOrEnvelopeStrategyDidChange): Update the charts when a new text range |
| selection strategy is picked by the user. |
| (App.Pane._computeMovingAverageAndOutliers): Compute the test ranges using the chosen strategy. |
| Avoid going through isAnomalyArray when no anomaly detection strategy is enabled. Also changed |
| the return value from the moving average time series to a dictionary that contains the moving |
| average time series, a dictionary of anomalies, and an array of test ranges. |
| (App.ChartsController._parsePaneList): Parse the test range selection strategy configuration. |
| (App.ChartsController._serializePaneList): Ditto for serialization. |
| (App.ChartsController._scheduleQueryStringUpdate): Update the URL hash when the user picks a new |
| test range selection strategy. |
| |
| * public/v2/chart-pane.css: Fixed a typo as well as added a CSS rule for test ranges markers. |
| |
| * public/v2/index.html: Added UI for selecting a test range selection strategy. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._rangesChanged): Pass down "status" to be used as a class name. |
| |
| * public/v2/js/statistics.js: |
| (Statistics.MovingAverageStrategies): Added isSegmentation to segmentation strategies. |
| (Statistics.TestRangeSelectionStrategies): Added. |
| |
| 2015-04-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The results of A/B testing should state statistical significance |
| https://bugs.webkit.org/show_bug.cgi?id=143552 |
| |
| Reviewed by Chris Dumez. |
| |
| Added statistical comparisons between results for each configuration on analysis task page using |
| Welch's t-test. The probability as well as t-statistics and the degrees of freedoms are reported. |
| |
| * public/v2/app.js: |
| (App.TestGroupPane._populate): Report the list of statistical comparison between every pair of |
| root configurations in the results. e.g. if we've got A, B, C configurations then compare A/B, A/C |
| and B/C. |
| (App.TestGroupPane._computeStatisticalSignificance): Compute the statistical significance using |
| Welch's t-test. Report the probability by which two samples do not come from the same distribution. |
| (App.TestGroupPane._createConfigurationSummary): Include the array of results for this configuration. |
| Also renamed "items" to "requests" for clarity. |
| |
| * public/v2/index.html: Added the template for showing statistical comparisons. |
| |
| * public/v2/js/statistics.js: Renamed tDistributionQuantiles to tDistributionByOneSidedProbability |
| for clarity. Also factored out the functions to convert from one-sided probability to two-sided |
| probability and vice versa. |
| (Statistics.supportedConfidenceIntervalProbabilities): |
| (Statistics.confidenceIntervalDelta): |
| (Statistics.probabilityRangeForWelchsT): Added. Computes the lower bound and the upper bound for |
| the probability that two values are sampled from distinct distributions using Welch's t-test. |
| (Statistics.computeWelchsT): This function now takes two-sided probability like all other functions. |
| (.tDistributionByOneSidedProbability): Renamed from tDistributionQuantiles. |
| (.oneSidedToTwoSidedProbability): Extracted. |
| (.twoSidedToOneSidedProbability): Extracted. |
| (Statistics.MovingAverageStrategies): Converted the one-sided probability to the two-sided probability |
| now that computeWelchsT takes two-sided probability. |
| |
| 2015-04-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed fix after r182496 for when the cached runs JSON doesn't exist. |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): |
| (App.Pane.refetchRuns): |
| |
| 2015-04-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have a way of marking outliers |
| https://bugs.webkit.org/show_bug.cgi?id=143466 |
| |
| Reviewed by Chris Dumez. |
| |
| Address kling's in-person comment to notify users when the new run status is saved in the database. |
| |
| * public/v2/app.js: |
| (App.PaneController._selectedItemIsMarkedOutlierDidChange) |
| * public/v2/chart-pane.css: Fixed a typo. |
| |
| 2015-04-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have a way of marking outliers |
| https://bugs.webkit.org/show_bug.cgi?id=143466 |
| |
| Reviewed by Chris Dumez. |
| |
| Added UI to mark a data point as an outlier as well as a button to toggle the visibility of outliers. |
| Added a new privileged API /privileged-api/update-run-status to store this boolean flag. |
| |
| * init-database.sql: Added run_marked_outlier column to test_runs table. |
| |
| * public/admin/tests.php: |
| |
| * public/api/runs.php: |
| (main): Only emit Cache-Control and Expires headers in v1 UI. |
| (RunsGenerator::format_run): Emit markedOutlier. |
| |
| * public/include/admin-header.php: |
| |
| * public/include/db.php: |
| (Database::is_true): Made it static. |
| |
| * public/include/manifest.php: |
| (Manifest::platforms): |
| |
| * public/index.html: Call into /api/runs/ with ?cache=true. |
| |
| * public/privileged-api/update-run-status.php: Added. |
| (main): Updates the newly added column in test_runs table. |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): |
| (App.Pane.refetchRuns): Extracted from App.Pane._fetch. |
| (App.Pane._didFetchRuns): Renamed from _updateChartData. |
| (App.Pane._setNewChartData): Added. Pick the right time series based based on the value of showOutlier. |
| Cloning chartData is necessary when toggling the outlier visibility or using statistics tools because |
| the interactive chart component only observes changes to chartData and not individual properties of it. |
| (App.Pane._highlightPointsMarkedAsOutlier): Added. Highlight points marked as outliers. |
| (App.Pane._movingAverageOrEnvelopeStrategyDidChange): Call to _setNewChartData replaced the code to |
| clone chartData here. |
| |
| (App.PaneController.actions.toggleShowOutlier): Toggle the visibility of points marked as outliers by |
| invoking App.Pane._setNewChartData. |
| (App.PaneController._detailsChanged): Don't hide the analysis pane when details changed since keep |
| opening the pane for marking points as outliers would be annoying. |
| (App.PaneController._updateCanAnalyze): Update 'cannotMarkOutlier' as well as 'cannotAnalyze'. |
| (App.PaneController.selectedMeasurement): Added. |
| (App.PaneController.showOutlierTitle): Added. |
| (App.PaneController._selectedItemIsMarkedOutlierDidChange): Added. Call out to setMarkedOutlier to |
| mark the selected point as an outlier via the newly added privileged API. |
| |
| * public/v2/chart-pane.css: Updated styles. |
| |
| * public/v2/data.js: |
| (PrivilegedAPI._post): Report the semantic errors. |
| (Measurement.prototype.markedOutlier): Added. |
| (Measurement.prototype.setMarkedOutlier): Added. Uses PrivilegedAPI to update the database. |
| (RunsData.prototype.timeSeriesByCommitTime): Added a new argument, includeOutliers, to indicate |
| whether the time series should include measurements marked as outliers or not. |
| (RunsData.prototype.timeSeriesByBuildTime): Ditto. |
| (RunsData.prototype._timeSeriesByTimeInternal): Extracted from timeSeriesByCommitTime and |
| timeSeriesByBuildTime to share code. Now ignores measurements marked as outliers if needed. |
| |
| * public/v2/index.html: Added an icon for showing and hiding outliers. Also added a checkbox to |
| mark individual points as outliers. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._selectClosestPointToMouseAsCurrentItem): Re-enable the distance |
| heuristics that takes vertical closeness into account. This heuristics is more useful when marking |
| some points as outliers. This heuristics was disabled because the behavior was unpredictable but |
| with the arrow key navigation support, this is no longer an issue. |
| |
| * public/v2/manifest.js: |
| (App.Manifest._formatFetchedData): Added showOutlier to the chart data. This function dynamically |
| updates the time series in this chart data in order to include or exclude outliers. |
| |
| 2015-04-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should be able to trigger A/B testing jobs for iOS |
| https://bugs.webkit.org/show_bug.cgi?id=143398 |
| |
| Reviewed by Chris Dumez. |
| |
| Fix various bugs in the perf dashboard so that it can schedule A/B testing jobs for iOS. |
| |
| Also generalized sync-with-buildbot.py slightly to meet the requirements of iOS builders. |
| |
| * public/api/triggerables.php: |
| (main): Avoid spitting a warning when $id_to_triggerable doesn't contain the triggerable. |
| * public/v2/analysis.js: |
| (App.AnalysisTask.triggerable): Log an error when failed to fetch triggerables for debugging purposes. |
| * public/v2/app.js: |
| (App.AnalysisTaskController.updateRootConfigurations): Show 'None' when a revision is missing from |
| some of the data points. This will happen when we modify the list of projects we build for iOS. |
| (App.AnalysisTaskController.actions.createTestGroup): Gracefully fail by showing alerts when an user |
| attempts to create an invalid test group; when there is already another test group of the same or when |
| only either configuration specifies the revision for some repository. |
| (App.AnalysisTaskController._updateRootsBySelectedPoints): Fixed a typo: sets[i] -> set. |
| * public/v2/index.html: Don't show the form to create a new test group if it's not available. |
| * tools/sync-with-buildbot.py: |
| (find_request_updates): |
| (schedule_request): iOS builders take a JSON that contains the list of roots. Generate this JSON when |
| a dictionary of the form {rootsExcluding: ["WebKit"]} is specified. Also replaced the way we refer to |
| a revision from $-based text replacements to an explicit dictionary of the form {root: "WebKit"}. |
| (request_id_from_build): Don't hard code the parameter name here. Retrieve the name from the config. |
| |
| 2015-04-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add time series segmentation algorithms as moving averages |
| https://bugs.webkit.org/show_bug.cgi?id=143362 |
| |
| Reviewed by Chris Dumez. |
| |
| This patch implements two preliminary time series segmentation algorithms as moving averages. |
| |
| Recursive t-test: Compute Welch's t-statistic at each point in a given segment of the time series. |
| If Welch's t-test implicates a statistically significance difference, then split the segment into two |
| sub segments with the maximum t-statistic (i.e. the point at which if split would yield the highest |
| probability that two segments do not share the same "underlying" mean in classical / frequentist sense). |
| We repeat this process recursively. See [1] for the evaluation of this particular algorithm. |
| |
| Schwarz criterion: Use Schwarz or Bayesian information criterion to heuristically find the optimal |
| segmentation. Intuitively, the problem of finding the best segmentation comes down to minimizing the |
| residual sum of squares in each segment as in linear regressions. That is, for a given segment with |
| values y_1 through y_n with mean y_avg, we want to minimize the sum of (y_i - y_avg)^2 over i = 1 |
| through i = n. However, we also don't want to split every data point into a separate segment so we need |
| to account the "cost" of introducing new segments. We use a cost function that's loosely based on two |
| models discussed in [2] for simplicity. We will tune this cost function further in the future. |
| |
| The problem of finding the best segmentation then reduces to a search problem. Unfortunately, our problem |
| space is exponential with respect to the size of the time series since we could split at each data point. |
| We workaround this problem by first splitting the time series into a manageable smaller grids, and only |
| considering segmentation of a fixed size (i.e. the number of segments is constant). Since time series |
| tend to contain a lot more data points than segments, this strategy finds the optimal solution without |
| exploring much of the problem space. |
| |
| Finding the optimal segmentation of a fixed size is, itself, another search problem that is equivalent to |
| finding the shortest path of a fixed length in DAG. Here, we use dynamic programming with a matrix of size |
| n by n where n is the length of the time series (grid). Each entry in this matrix at (i, k) stores |
| the minimum cost of segmenting data points 1 through i using k segments. We start our search at i = 1. |
| Clearly C(1, 0) = 0 (note the actual code uses 0-based index). In i-th iteration, we compute the cost |
| S(i, j) of each segment starting at i and ending at another point j after i and update C(j, k + 1) by |
| min( C(j, k + 1), C(i, k) + S(i, j) ) for all values of j above i. |
| |
| [1] Kensuke Fukuda, H. Eugene Stanley, and Luis A. Nunes Amaral, "Heuristic segmentation of |
| a nonstationary time series", Physical Review E 69, 021108 (2004) |
| |
| [2] Marc Lavielle, Gilles Teyssi`ere, "Detection of Multiple Change–Points in Multivariate Time Series" |
| Lithuanian Mathematical Journal, vol 46, 2006 |
| |
| * public/v2/index.html: Show the optional description for the chosen moving average strategy. |
| * public/v2/js/statistics.js: |
| (Statistics.testWelchsT): |
| (Statistics.computeWelchsT): Extracted from testWelchsT. Generalized to take the offset and the length |
| of each value array between which Welch's t-statistic is computed. This generalization helps the |
| Schwarz criterion segmentation algorithm avoid splitting values array O(n^2) times. |
| (.sampleMeanAndVarianceForValues): Ditto for the generalization. |
| (.recursivelySplitIntoTwoSegmentsAtMaxTIfSignificantlyDifferent): Added. Implements recursive t-test. |
| (.splitIntoSegmentsUntilGoodEnough): Added. Implements Schwarz criterion. |
| (.findOptimalSegmentation): Added. Implements the algorithm to find the optimal segmentation of a fixed |
| segment count. |
| (.SampleVarianceUpperTriangularMatrix): Added. Stores S(i, j) used by findOptimalSegmentation. |
| (.SampleVarianceUpperTriangularMatrix.prototype.costBetween): Added. |
| |
| 2015-04-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION: Perf dashboard sometimes fails to update zooming level |
| https://bugs.webkit.org/show_bug.cgi?id=143359 |
| |
| Reviewed by Darin Adler. |
| |
| The bug was caused by various bugs that ended up in an exception. |
| |
| * public/v2/app.js: |
| (App.Pane._handleFetchErrors): Removed superfluous console.log. |
| (App.Pane.computeStatus): Fixed the bug in r182185 that previousPoint could be null. |
| (App.PaneController.actions.zoomed): Update the overview when the main chart triggered a zoom. |
| * public/v2/index.html: Replaced all instances of href="#" by href="javascript:false" to avoid navigating |
| to # when Ember.js fails to attach event listeners on time. |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._updateDimensionsIfNeeded): Avoid using a negative width or height when |
| the containing element's size is 0. |
| (App.InteractiveChartComponent._updateBrush): Ditto. |
| |
| 2015-04-02 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have UI to test out anomaly detection strategies |
| https://bugs.webkit.org/show_bug.cgi?id=143290 |
| |
| Reviewed by Benjamin Poulain. |
| |
| Added the UI to select anomaly detection strategies. The detected anomalies are highlighted in the graph. |
| |
| Implemented the Western Electric Rules 1 through 4 in http://en.wikipedia.org/wiki/Western_Electric_rules |
| as well as Welch's t-test that compares the last five points to the prior twenty points. |
| |
| The latter is what Mozilla uses (or at least did in the past) to detect performance regressions on their |
| performance tests although they compare medians instead of means. |
| |
| All of these strategies don't quite work for us since our data points are too noisy but this is a good start. |
| |
| * public/v2/app.js: |
| (App.Pane.updateStatisticsTools): Clone anomaly detection strategies. |
| (App.Pane._updateMovingAverageAndEnvelope): Highlight anomalies detected by the enabled strategies. |
| (App.Pane._movingAverageOrEnvelopeStrategyDidChange): Observe changes to anomaly detection strategies. |
| (App.Pane._computeMovingAverageAndOutliers): Detect anomalies by each strategy and aggregate results. |
| Only report the first data point when multiple consecutive data points are detected as anomalies. |
| * public/v2/chart-pane.css: Updated styles. |
| * public/v2/index.html: Added the pane for selecting anomaly detection strategies. |
| * public/v2/js/statistics.js: |
| (Statistics.testWelchsT): Added. Implements Welch's t-test. |
| (.sampleMeanAndVarianceForValues): Added. |
| (.createWesternElectricRule): Added. |
| (.countValuesOnSameSide): Added. |
| (Statistics.AnomalyDetectionStrategy): Added. |
| |
| 2015-03-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION: Searching commits can highlight wrong data points |
| https://bugs.webkit.org/show_bug.cgi?id=143272 |
| |
| Reviewed by Antti Koivisto. |
| |
| The bug was caused by /api/commits returning commit times with millisecond precision whereas /api/runs |
| return commit times with only second precision. This resulted in the frontend code to match a commit |
| with the data point that included the next commit when the millisecond component of commit's timestamp |
| wasn't identically 0. |
| |
| This discrepancy was caused by the fact PHP's strtotime only ignores milliseconds and /api/commits |
| was returning timestamp as string instead of parsing via Database::to_js_time as done in /api/runs |
| so miliseconds component was only preserved in /api/commits. |
| |
| Fixed the bug by always using Database::to_js_time to return commit time. Also fixed to_js_time so that |
| it returns time in milisecond precision. |
| |
| * public/api/commits.php: |
| (fetch_commits_between): Use Database::to_js_time for format commit times. |
| (format_commit): Ditto. |
| * public/include/db.php: |
| (Database::to_js_time): Parse and append millisecond component. Ignore sub-milliseconds for simplicity. |
| * public/v2/data.js: |
| (CommitLogs.fetchForTimeRange): The commit time is now an integer so don't call "replace" on it. |
| |
| 2015-03-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should show relative change in values |
| https://bugs.webkit.org/show_bug.cgi?id=143252 |
| |
| Reviewed by Antti Koivisto. |
| |
| When a range of values are selected, show the percentage difference between the start and the end |
| in addition to the absolute value difference. When a single point is selected, show the relative |
| difference with respect to the previous point. Use two significant figures and always show plus sign |
| when the difference is positive. |
| |
| * public/v2/app.js: Compute and format the relative difference. |
| * public/v2/chart-pane.css: Don't let commits view shrink itself when they're all collapsed. |
| * public/v2/index.html: Show the relative difference. |
| |
| 2015-03-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION(r180000): Changing moving average or enveloping strategy doesn't update the graph |
| https://bugs.webkit.org/show_bug.cgi?id=143254 |
| |
| Reviewed by Antti Koivisto. |
| |
| The bug was caused by App.Pane no longer replacing 'chartData' property when updating the moving average |
| or the enveloping values. Fixed the bug by creating a new chartData object when the strategy is changed |
| so that the interactive chart component will observe a change to 'chartData'. |
| |
| * public/v2/app.js: |
| (App.Pane._movingAverageOrEnvelopeStrategyDidChange): Added. |
| |
| 2015-03-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fixes. |
| |
| * public/include/manifest.php: |
| (Manifest::generate): These should be {} instead of [] when they're empty. |
| * public/v2/data.js: |
| (Measurement.prototype.formattedRevisions): Don't assume previousRevisions[repositoryId] exits. |
| * public/v2/manifest.js: |
| (App.Metric.fullName): Fixed the typo. |
| * tests/admin-regenerate-manifest.js: Fixed the test. |
| |
| 2015-02-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit the erroneously reverted change. |
| |
| * public/api/runs.php: |
| (RunsGenerator::results): |
| |
| 2015-02-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Loading the perf dashboard takes multiple seconds |
| https://bugs.webkit.org/show_bug.cgi?id=141860 |
| |
| Reviewed by Andreas Kling. |
| |
| This patch introduces the caches of JSON files returned by /api/ in /data/ directory. It also records |
| the last time test_runs rows associated with the requested platforms and metrics are inserted, updated, |
| or removed in the caches as well as the manifest JSON files ("last modified time"). Because the manifest |
| is regenerated each time a new test result is reported, the front end can compare last modified time in |
| the manifest file with that in a /api/runs JSON cache to detect the stale-ness. |
| |
| More concretely, the front end first optimistically fetches the JSON in /data/. If the cache doesn't exit |
| or the last modified time in the cache doesn't match with that in the manifest file, it would fetch it |
| again via /api/runs. In the case the cache did exist, we render the charts based on the cache meanwhile. |
| This dramatically reduces the perceived latency for the page load since charts are drawn immediately using |
| the cache and we would only re-render the charts as new up-to-date JSON comes in. |
| |
| This patch also changes the format of runs JSONs by pushing the exiting properties into 'configurations' |
| and adding 'lastModified' and 'elapsedTime' at the top level. |
| |
| * init-database.sql: Added config_runs_last_modified to test_configurations table as well as a trigger to |
| auto-update this column upon changes to test_runs table. |
| |
| * public/admin/test-configurations.php: |
| (add_run): Regenerate the manifest file to invalidate the /api/runs JSON cache. |
| (delete_run): Ditto. |
| |
| * public/api/runs.php: |
| (main): Fetch all columns of test_configurations table including config_runs_last_modified. Also generate |
| the cache in /data/ directory. |
| (RunsGenerator::__construct): Compute the last modified time for this (platform, metric) pair. |
| (RunsGenerator::results): Put the old content in 'configurations' property and include 'lastModified' and |
| 'elapsedTime' properties. 'elapsedTime' is added for debugging purposes. |
| (RunsGenerator::add_runs): |
| (RunsGenerator::parse_revisions_array): |
| |
| * public/include/db.php: |
| (CONFIG_DIR): Added. |
| (generate_data_file): Added based on ManifestGenerator::store. |
| (Database::to_js_time): Extracted from RunsGenerator::add_runs to share code. |
| |
| * public/include/json-header.php: |
| (echo_success): Renamed from success_json. Return the serialized JSON instead of echo'ing it so that we can |
| generate caches in /api/runs/. |
| (exit_with_success): |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::generate): Added 'elapsedTime' property for the time taken to generate the manifest. |
| It seems like we're generating it in 200-300ms for now so that's good. |
| (ManifestGenerator::store): Uses generate_data_file. |
| (ManifestGenerator::platforms): Added 'lastModified' array to each platform entry. This array contains the |
| last modified time for each (platform, metric) pair. |
| |
| * public/index.html: |
| (fetchTest): Updated per the format change in runs JSON. |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): Fetch the cached JSON first. Refetch the uncached version if instructed as such. |
| (App.Pane._updateChartData): Extracted from App.Pane._fetch. |
| (App.Pane._handleFetchErrors): Ditto. |
| |
| * public/v2/data.js: |
| (RunsData.fetchRuns): Takes the fourth argument indicating whether we should fetch the cached version or not. |
| The cached JSON is located in /data/ with the same filename. When fetching a cached JSON results in 404, |
| fulfill the promise with null as the result instead of rejecting it. The only client of this function which |
| sets useCache to true is App.Manifest.fetchRunsWithPlatformAndMetric, and it handles this special case. |
| |
| * public/v2/manifest.js: |
| (App.DateArrayTransform): Added. Handles the array of last modified dates in platform objects. |
| (App.Platform.lastModifiedTimeForMetric): Added. Returns the last modified date in the manifest JSON. |
| (App.Manifest.fetchRunsWithPlatformAndMetric): Takes "useCache" like RunsData.fetchRuns. Set shouldRefetch |
| to true if response is null (the cache didn't exit) or the cache is out-of-date. |
| (App.Manifest._formatFetchedData): Extracted from App.Manifest.fetchRunsWithPlatformAndMetric. |
| |
| * run-tests.js: |
| (initializeDatabase): Avoid splitting function definitions in the middle. |
| |
| * tests/api-report.js: Added tests to verify that reporting new test results updates the last modified time |
| in test_configurations. |
| |
| 2015-02-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION(r180333): Analysis tasks can't be associated with bugs |
| https://bugs.webkit.org/show_bug.cgi?id=141858 |
| |
| Reviewed by Andreas Kling. |
| |
| Added back the erroneously removed table to associate bugs. Also moved "details-table-container" div outside |
| of the chart-details partial template as it needs to wrap associate bugs in analysis task pages. |
| |
| * public/v2/chart-pane.css: |
| * public/v2/index.html: |
| |
| 2015-02-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Selecting revisions for A/B testing is hard |
| https://bugs.webkit.org/show_bug.cgi?id=141824 |
| |
| Reviewed by Andreas Kling. |
| |
| Update the revisions used in A/B testing based on the selection in the overview chart. This allows users to |
| intuitively select revisions based on points shown in the chart. Removed the old select elements used to |
| select A/B testing points manually. |
| |
| Also renamed 'testSets' to 'configurations', 'roots' to 'rootConfigurations', and 'revisions' in each root's |
| sets to 'options' for clarity. |
| |
| * public/v2/app.css: Reorganized style rules. |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController): |
| (App.AnalysisTaskController._taskUpdated): Merged updateTestGroupPanes. |
| (App.AnalysisTaskController._chartDataChanged): Renamed from paneDomain. It's now an observer instead of |
| a property, which sets 'overviewDomain' property as well as other properties. |
| (App.AnalysisTaskController.updateRootConfigurations): Renamed from updateRoots. |
| (App.AnalysisTaskController._updateRootsBySelectedPoints): Added. Select roots based on the selected points |
| in the overview chart. |
| |
| * public/v2/chart-pane.css: Added arrows next to the configuration names (e.g. 'A') to indicate whether |
| individual build requests / test results are shown or not. |
| |
| * public/v2/index.html: Removed the select element per configuration column. Also moved the select element |
| for the number of runs as it doesn't belong in the same table as the one that lists repositories and roots. |
| |
| 2015-02-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed test fixes after r179037, r179591, and r179763. |
| |
| * tests/admin-regenerate-manifest.js: |
| * tests/admin-reprocess-report.js: |
| |
| 2015-02-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Relationship between A/B testing results are unclear |
| https://bugs.webkit.org/show_bug.cgi?id=141810 |
| |
| Reviewed by Andreas Kling. |
| |
| Show a "reference chart" indicating which two points have been tested in each test group pane. |
| |
| Now the chart shown at the top of an analysis task page is called the "overview pane", and we use the pane |
| and the domain used in this chart to show charts in each test group. |
| |
| Also renamed an array of revisions used in the A/B test results tables from 'revisions' to 'revisionList'. |
| |
| * public/v2/analysis.js: |
| (App.TestGroup._fetchTestResults): Renamed from _fetchChartData. Set 'testResults' instead of 'chartData' |
| since this is the results of A/B testing results, not the data for charts shown next to them. |
| |
| * public/v2/app.css: Added CSS rules for reference charts. |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController.paneDomain): Set 'overviewPane' and 'overviewDomain' on each test group pane. |
| (App.TestGroupPane._populate): Updated per 'chartData' to 'testResults' rename. |
| (App.TestGroupPane._updateReferenceChart): Get the chart data via the overview pane and find points that |
| identically matches root sets. If one of configuration used a set of revisions for which no measurement |
| was made in the original chart, don't show the reference chart as that would be misleading / confusing. |
| (App.TestGroupPane._computeRepositoryList): Updated per 'chartData' to 'testResults' rename. |
| (App.TestGroupPane._createConfigurationSummary): Ditto. Also renamed 'revisions' to 'revisionList'. |
| In addition, renamed 'buildNumber' to 'buildLabel' and prefixed it with "Build ". |
| |
| * public/v2/data.js: |
| (Measurement.prototype.revisionForRepository): Added. |
| (Measurement.prototype.commitTimeForRepository): Cleanup. |
| (TimeSeries.prototype.findPointByRevisions): Added. Finds a point based on a set of revisions. |
| |
| * public/v2/index.html: Added the reference chart. Streamlined the status label for each build request |
| by including the build number in the title attribute instead of in the markup. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._updateDomain): Fixed a typo introduced as a consequence of r179913. |
| (App.InteractiveChartComponent._computeYAxisDomain): Expand the y-axis to show the highlighted points. |
| (App.InteractiveChartComponent._highlightedItemsChanged): Adjust the y-axis as needed. |
| |
| 2015-02-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Analysis task pages are unusable |
| https://bugs.webkit.org/show_bug.cgi?id=141786 |
| |
| Reviewed by Andreas Kling. |
| |
| This patch makes following improvements to analysis task pages: |
| 1. Making the main chart interactive. This change required the use of App.Pane as well as moving the code to |
| compute the data for the details pane from PaneController. |
| 2. Moving the form to add a new test group to the top of test groups instead of the bottom of them. |
| 3. Grouping the build requests in each test group by root sets instead of the order by which they were ran. |
| This change required the creation of App.TestGroupPane as well as its methods. |
| 4. Show a box plot for each root set configuration as well as each build request. This change required |
| App.BoxPlotComponent. |
| 5. Show revisions of each repository (e.g. WebKit) for each root set and build request. |
| |
| * public/api/build-requests.php: |
| (main): Update per the rename of BuildRequestsFetcher::root_sets to BuildRequestsFetcher::root_sets_by_id. |
| |
| * public/api/test-groups.php: |
| (main): Include root sets and roots in the response. |
| (format_test_group): |
| |
| * public/include/build-requests-fetcher.php: |
| (BuildRequestsFetcher::root_sets_by_id): Renamed from root_sets. |
| (BuildRequestsFetcher::root_sets): Added. |
| (BuildRequestsFetcher::roots): Added. |
| (BuildRequestsFetcher::fetch_roots_for_set): Takes a boolean argument $resolve_ids. This flag is only set to |
| true in /api/build-requests/ (as done prior to this patch) to use repository names as identifiers since |
| tools/sync-with-buildbot.py can't convert repository names to their ids. |
| |
| * public/v2/analysis.js: |
| (App.Root): Added. |
| (App.RootSet): Added. |
| (App.RootSet.revisionForRepository): Added. |
| (App.TestGroup.rootSets): Deleted the code to compute root set ids from build requests now that the JSON |
| response at /api/test-groups will include them. |
| (App.BuildRequest): Ditto. Also deleted 'configLetter' property, which has been moved to a proxy created by |
| _createConfigurationSummary. |
| (App.BuildRequest.statusLabel): Use 'Completed' as the human readable label for 'completed' status. |
| (App.BuildRequest.aggregateStatuses): Added. Generates a human readable status for a set of build requests. |
| |
| * public/v2/app.css: Updated style rules for analysis task pages. |
| |
| * public/v2/app.js: |
| (App.Pane): This class is now used in analysis task pages to make the main chart interactive. |
| (App.Pane._updateDetails): Moved from App.PaneController. |
| |
| (App.PaneController._updateCanAnalyze): Updated the code per the move of selectedPoints. |
| |
| (App.AnalysisTaskController): Added 'details'. |
| (App.AnalysisTaskController._taskUpdated): |
| (App.AnalysisTaskController.paneDomain):Renamed from _fetchedRuns. |
| (App.AnalysisTaskController.updateTestGroupPanes): Added. Creates App.TestGroupPane for each test group. |
| (App.AnalysisTaskController.actions.toggleShowRequestList): Added. |
| |
| (App.TestGroupPane): Added. |
| (App.TestGroupPane._populate): Added. Group build requests by root sets and create a summary for each group. |
| (App.TestGroupPane._computeRepositoryList): Added. Returns a sorted list of repositories which is the union |
| of all repositories appearing in root sets and builds associated with A/B testing results. |
| (App.TestGroupPane._groupRequestsByConfigurations): Added. Groups build requests by root sets. |
| (App.TestGroupPane._createConfigurationSummary): Added. Creates a summary for a group of build requests that |
| use the same root set. We start by wrapping "raw" build requests in a proxy with formatted values, |
| build numbers, etc... obtained from the fetched chart data. The list of revisions shown in the group summary |
| is a union of revisions in the root set and the first build request in the group. We null-out revision info |
| for a build request if it is identical to the one in the summary. The range of values is expanded as needed |
| by the values in the group as well as 95% percentile confidence interval. |
| |
| (App.BoxPlotComponent): Added. Controls a box plot shown for each test group summary and build request. |
| (App.BoxPlotComponent.didInsertElement): Added. Inserts a SVG element as well as two indicator rects to show |
| the mean and the confidence interval. |
| (App.BoxPlotComponent._updateBars): Added. Updates the dimensions of the indicator rects. |
| (App.BoxPlotComponent.valueChanged): Added. Computes the relative dimensions of the indicator rects and |
| calls _updateBars to update the rects. |
| |
| * public/v2/chart-pane.css: Added some style rules to be used in the details pane in analysis task pages. |
| |
| * public/v2/data.js: |
| (Measurement.prototype.formattedRevisions): |
| (Measurement.formatRevisionRange): Renamed from Measurement.prototype._formatRevisionRange so that it can be |
| called in _createConfigurationSummary. |
| |
| * public/v2/index.html: Updated the templates for analysis task pages. Moved the form to create a new test |
| group above all test groups, and replaced the list of data points by "details" pane used in the charts page. |
| Also made the fetching of chartData no longer block showing of test groups. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._updateDomain): Added an early exit to fix a newly revealed race condition. |
| (App.InteractiveChartComponent._domainChanged): Ditto. |
| (App.InteractiveChartComponent._updateSelectionToolbar): Made it respect 'zoomable' boolean property. |
| |
| * public/v2/js/statistics.js: |
| (Statistics.min): Added. |
| (Statistics.max): Added. |
| |
| * public/v2/manifest.js: |
| (App.Manifest.fetchRunsWithPlatformAndMetric): Added formatWithDeltaAndUnit to be used in _createConfigurationSummary. |
| |
| 2015-02-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build URL on new perf dashboard doesn't resolve $builderName |
| https://bugs.webkit.org/show_bug.cgi?id=141583 |
| |
| Reviewed by Darin Adler. |
| |
| Support $builderName in the build URL template. |
| |
| * public/js/helper-classes.js: |
| (TestBuild.buildUrl): Replaced $builderName with the builder name. |
| |
| * public/v2/manifest.js: |
| (App.Metric.fullName): Fixed the typo. We need &ni, not &in. |
| (App.BuilderurlFromBuildNumber): Replaced $builderName with the builder name. |
| |
| 2015-02-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix after r179591. |
| |
| * public/api/commits.php: |
| |
| 2015-02-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The status of a A/B testing request always eventually becomes "Failed" |
| https://bugs.webkit.org/show_bug.cgi?id=141523 |
| |
| Reviewed by Andreas Kling. |
| |
| The bug was caused by /api/build-requests always setting the status of a build request to 'failed' when |
| 'failedIfNotCompleted' was sent by the buildbot sync'er. |
| |
| Fixed the bug by only setting the status to 'failed' if it wasn't set to 'completed'. |
| |
| * public/api/build-requests.php: |
| (main): |
| |
| 2015-02-13 Csaba Osztrogonác <ossy@webkit.org> |
| |
| Unreviewed, remove empty directories. |
| |
| * public/data: Removed. |
| |
| 2015-02-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should show the results of A/B testing |
| https://bugs.webkit.org/show_bug.cgi?id=141500 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the support for fetching test_runs for a specific test group in /api/runs/, and used it in the |
| analysis task page to fetch results for each test group. |
| |
| Merged App.createChartData into App.Manifest.fetchRunsWithPlatformAndMetric so that App.BuildRequest |
| can use the formatter. |
| |
| * public/api/runs.php: |
| (fetch_runs_for_config_and_test_group): Added. |
| (fetch_runs_for_config): Just return the fetched rows since main will format them with RunsGenerator. |
| (main): Use fetch_runs_for_config_and_test_group to fetch rows when a test group id is specified. Also |
| use RunsGenerator to format results. |
| (RunsGenerator): Added. |
| (RunsGenerator::__construct): Added. |
| (RunsGenerator::add_runs): Added. |
| (RunsGenerator::format_run): Moved. |
| (RunsGenerator::parse_revisions_array): Moved. |
| |
| * public/v2/analysis.js: |
| (App.TestGroup): Fixed a typo. The property on a test group that refers to an analysis task is "task". |
| (App.TestGroup._fetchChartData): Added. Fetches all A/B testing results for this group. |
| (App.BuildRequest.configLetter): Renamed from config since this returns a letter that identifies the |
| configuration associated with this build request such as "A" and "B". |
| (App.BuildRequest.statusLabel): Added the missing label for failed build requests. |
| (App.BuildRequest.url): Added. Returns the URL associated with this build request. |
| (App.BuildRequest._meanFetched): Added. Retrieve the mean and the build number for this request via |
| _fetchChartData. |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): Set chartData directly here. |
| (App.Pane._updateMovingAverageAndEnvelope): Renamed from _computeChartData. No longer sets chartData |
| now that it's done in App.Pane._fetch. |
| (App.AnalysisTaskController._fetchedRuns): Updated per createChartData merge. |
| |
| * public/v2/data.js: |
| (Measurement.prototype.buildId): Added. |
| (TimeSeries.prototype.findPointByBuild): Added. |
| |
| * public/v2/index.html: Fixed a bug that build status URL was broken. We can't use link-to helper since |
| url is not an Ember routed path. |
| |
| * public/v2/manifest.js: |
| (App.Manifest.fetchRunsWithPlatformAndMetric): Takes testGroupId as the third argument. Merged |
| App.createChartData here so that App.BuildRequest can use the formatter |
| |
| 2015-02-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| v2 UI should adjust the number of ticks on dashboards based on screen size |
| https://bugs.webkit.org/show_bug.cgi?id=141502 |
| |
| Reviewed by Chris Dumez. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._updateDimensionsIfNeeded): Compute the number of ticks based on the |
| content size. |
| |
| 2015-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard shows too much space around interesting data points |
| https://bugs.webkit.org/show_bug.cgi?id=141487 |
| |
| Reviewed by Chris Dumez. |
| |
| Revise the y-axis range adjustment algorithm in r179913. Instead of showing the entire moving average, |
| show the current time series excluding points in the series outside the moving average envelope. |
| |
| * public/v2/app.js: |
| (App.Pane._computeChartData): Don't deal with missing moving average or enveloping strategy here. |
| (App.Pane._computeMovingAverageAndOutliers): Set isOutliner to true on all data points in the current |
| time series if the point lies outside the moving average envelope. Don't expose the moving average or |
| the envelope computed for this purpose if they're not set by the user. |
| |
| * public/v2/data.js: |
| (TimeSeries.prototype.minMaxForTimeRange): Takes a boolean argument, ignoreOutlier. When the flag is set |
| to true, min/max computation will ignore any point in the series with non-falsy "isOutliner" property. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._constructGraphIfPossible): Unsupport hideMovingAverage and hideEnvelope. |
| (App.InteractiveChartComponent._computeYAxisDomain): Removed the commented out code. Also moved the code |
| to deal with showFullYAxis here. |
| (App.InteractiveChartComponent._minMaxForAllTimeSeries): Rewrote the code. Takes ignoreOutliners as an |
| argument instead of directly inspecting showFullYAxis. |
| |
| 2015-02-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard shouldn't always show outliners |
| https://bugs.webkit.org/show_bug.cgi?id=141445 |
| |
| Reviewed by Chris Dumez. |
| |
| Use the simple moving average with an average difference envelope to compute the y-axis range to show |
| to avoid expanding it spuriously to show one off outlier. |
| |
| * public/v2/app.js: |
| (App.Pane): Don't show the full y-axis range by default. |
| (App.Pane._computeChartData): Use the first strategies for the moving average and the enveloping if |
| one is not specified by the user but without showing them in the charts. |
| (App.Pane._computeMovingAverage): Takes moving average and enveloping strategies as arguments instead |
| of retrieving via chosenMovingAverageStrategy and chosenEnvelopingStrategy. |
| |
| (App.ChartsController._parsePaneList): Added showFullYAxis as a query string argument to each pane. |
| (App.ChartsController._serializePaneList): Ditto. |
| |
| * public/v2/chart-pane.css: Added a CSS rule for when y-axis is clickable. |
| |
| * public/v2/index.html: Pass in showFullYAxis as an argument to the main interactive chart. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._constructGraphIfPossible): Add an event listener on y-axis labels when |
| the chart is interactive so that toggle showFullYAxis. Also hide the moving average and/or the envelope |
| if they are not specified by the user (i.e. only used to adjust y-axis range). |
| (App.InteractiveChartComponent._updateDomain): Don't exit early if y-axis domains are different even if |
| x-axis domain remained the same. Without this change, the charts would never redraw. |
| (App.InteractiveChartComponent._minMaxForAllTimeSeries): Use the moving average instead of the current |
| time series to compute the y-axis range if showFullYAxis is false. When showFullYAxis is true, expand |
| y-axis all the way down to 0 or the minimum value in the current time series whichever is smaller. |
| |
| * public/v2/js/statistics.js: |
| (Statistics.MovingAverageStrategies): Use a wider window in Simple Moving Average by default. |
| |
| 2015-02-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. |
| |
| * public/v2/app.js: |
| (set get App.Pane.Ember.Object.extend): |
| |
| 2015-02-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard should have the ability to overlay moving average with an envelope |
| https://bugs.webkit.org/show_bug.cgi?id=141438 |
| |
| Reviewed by Andreas Kling. |
| |
| This patch adds three kinds of moving average strategies and two kinds of enveloping strategies: |
| |
| Simple Moving Average - The moving average x̄_i of x_i is computed as the arithmetic mean of values |
| from x_(i - n) though x_(i + m) where n is a non-negative integer and m is a positive integer. It takes |
| n, backward window size, and m, forward window size, as an argument. |
| |
| Cumulative Moving Average - x̄_i is computed as the arithmetic mean of all values x_0 though x_i. |
| That is, x̄_1 = x_1 and x̄_i = ((i - 1) * M_(i - 1) + x_i) / i for all i > 1. |
| |
| Exponential Moving Average - x̄_i is computed as the weighted average of x_i and x̄_(i - 1) with α as |
| an argument specifying x_i's weight. To be precise, x̄_1 = x_1 and x̄_i = α * x_i + (α - 1) x̄_(i-1). |
| |
| |
| Average Difference - The enveloping delta d is computed as the arithmetic mean of the difference |
| between each x_i and x̄_i. |
| |
| Moving Average Standard Deviation - d is computed like the standard deviation except the deviation |
| for each term is measured from the moving average instead of the sample arithmetic mean. i.e. it uses |
| the average of (x_i - x̄_i)^2 as the "sample variance" instead of the conventional (x_i - x̄)^2 where |
| x̄ is the sample mean of all x_i's. This change was necessary since our time series is non-stationary. |
| |
| |
| Each strategy is cloned for an App.Pane instance so that its parameterList can be configured per pane. |
| The configuration of the currently chosen strategies is saved in the query string for convenience. |
| |
| Also added the "stat pane" to choose a moving average strategy and a enveloping strategy in each pane. |
| |
| * public/v2/app.css: Specify the fill color for all SVG groups in the pane toolbar icons. |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): Delegate the creation of 'chartData' to _computeChartData. |
| (App.Pane.updateStatisticsTools): Added. Clones moving average and enveloping strategies for this pane. |
| (App.Pane._cloneStrategy): Added. Clones a strategy for a new pane. |
| (App.Pane._configureStrategy): Added. Finds and configures a strategy from the configuration retrieved |
| from the query string via ChartsController. |
| (App.Pane._computeChartData): Added. Creates chartData from fetchedData. |
| (App.Pane._computeMovingAverage): Added. Computes the moving average and the envelope. |
| (App.Pane._executeStrategy): Added. |
| (App.Pane._updateStrategyConfigIfNeeded): Pushes the strategy configurations to the query string via |
| ChartsController. |
| (App.ChartsController._parsePaneList): Merged the query string arguments for the range and point |
| selections, and added two new arguments for the moving average and the enveloping configurations. |
| (App.ChartsController._serializePaneList): Ditto. |
| (App.ChartsController._scheduleQueryStringUpdate): Observes strategy configurations. |
| (App.PaneController.actions.toggleBugsPane): Hides the stat pane. |
| (App.PaneController.actions.toggleSearchPane): Hides the stat pane. |
| (App.PaneController.actions.toggleStatPane): Added. |
| |
| * public/v2/chart-pane.css: Added CSS rules for the new stat pane. Also added .foreground class for the |
| current (as opposed to baseline and target) time series for when it's the most foreground graph without |
| moving average and its envelope overlapping on top of it. |
| |
| * public/v2/index.html: Added the templates for the stat pane and the corresponding icon (Σ). |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent.chartDataDidChange): Unset _totalWidth and _totalHeight to avoid exiting |
| early inside _updateDimensionsIfNeeded when chartData changes after the initial layout. |
| (App.InteractiveChartComponent.didInsertElement): Attach event listeners here instead of inside |
| _constructGraphIfPossible since that could be called multiple times on the same SVG element. |
| (App.InteractiveChartComponent._constructGraphIfPossible): Clear down the old SVG element we created |
| but don't bother removing individual paths and circles. Added the code to show the moving average time |
| series when there is one. Also add "foreground" class on SVG elements for the current time series when |
| we're not showing the moving average. chart-pane.css has been updated to "dim down" the current time |
| series when "foreground" is not set. |
| (App.InteractiveChartComponent._minMaxForAllTimeSeries): Take the moving average time series into |
| account when computing the y-axis range. |
| (App.InteractiveChartComponent._brushChanged): Removed 'selectionIsLocked' argument as it's useless. |
| |
| * public/v2/js/statistics.js: |
| (Statistics.MovingAverageStrategies): Added. |
| (Statistics.EnvelopingStrategies): Added. |
| |
| 2015-02-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The delta value in the chart pane sometimes doens't show '+' for a positive delta |
| https://bugs.webkit.org/show_bug.cgi?id=141340 |
| |
| Reviewed by Andreas Kling. |
| |
| The bug was caused by computeStatus prefixing the value delta with '+' if it's greater than 0 after |
| it had already been formatted. Fixed the bug by using a formatter that always emits a sign symbol. |
| |
| * public/v2/app.js: |
| (App.Pane.computeStatus): |
| (App.createChartData): |
| |
| 2015-02-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. currentPoint wasn't defined when selectedPoints was used to find points. |
| |
| * public/v2/app.js: |
| (App.PaneController._updateDetails): |
| |
| 2015-02-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Commit the forgotten change. |
| |
| * public/include/manifest.php: |
| |
| 2015-02-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard should have multiple dashboard pages |
| https://bugs.webkit.org/show_bug.cgi?id=141339 |
| |
| Reviewed by Chris Dumez. |
| |
| Added the support for multiple dashboard pages. Also added the status of the latest data point. |
| e.g. "5% better than target" |
| |
| * public/v2/app.css: Tweaked the styles to work around the fact Ember.js creates empty script elements. |
| Also hid the border lines around charts on the dashboard page for a cleaner look. |
| |
| * public/v2/app.js: |
| (App.IndexRoute): Added. Navigate to /dashboard/<defaultDashboardName> once the manifest.json is loaded. |
| (App.IndexRoute.beforeModel): Added. |
| (App.DashboardRoute): Added. |
| (App.DashboardRoute.model): Added. Return the dashboard specified by the name. |
| (App.CustomDashboardRoute): Added. This route is used for a customized dashboard specified by "grid". |
| (App.CustomDashboardRoute.model): Create a dashboard model from "grid" query parameter. |
| (App.CustomDashboardRoute.renderTemplate): Use the dashboard template. |
| (App.DashboardController): Renamed from App.IndexController. |
| (App.DashboardController.modelChanged): Renamed from gridChanged. Removed the code to deal with "grid" |
| and "defaultDashboard" as these are taken care of by newly added routers. |
| (App.DashboardController.computeGrid): Renamed from updateGrid. No longer updates "grid" since this is |
| now done in actions.toggleEditMode. |
| (App.DashboardController.actions.toggleEditMode): Navigate to CustomDashboardRoute when start editing |
| an existing dashboard. |
| |
| (App.Pane.computeStatus): Moved from App.PaneController so that to be called in App.Pane.latestStatus. |
| Also moved the code to compute the delta with respect to the previous data point from _updateDetails. |
| (App.Pane._relativeDifferentToLaterPointInTimeSeries): Ditto. |
| (App.Pane.latestStatus): Added. Used by the dashboard template to show the status of the latest result. |
| |
| (App.createChartData): Added deltaFormatter to show less significant digits for differences. |
| |
| (App.PaneController._updateDetails): Updated per changes to computeStatus. |
| |
| * public/v2/chart-pane.css: Added style rules for the status labels on the dashboard. |
| |
| * public/v2/data.js: |
| (TimeSeries.prototype.lastPoint): Added. |
| |
| * public/v2/index.html: Prefetch manifest.json as soon as possible, show the latest data points' status |
| on the dashboard, and enumerate all predefined dashboards. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._relayoutDataAndAxes): Slightly adjust the offset at which we show unit |
| for the dashboard page. |
| |
| * public/v2/manifest.js: |
| (App.Dashboard): Inherit from App.NameLabelModel now that each predefined dashboard has a name. |
| (App.MetricSerializer.normalizePayload): Parse all predefined dashboards instead of a single dashboard. |
| IDs are generated for each dashboard for forward compatibility. |
| (App.Manifest): |
| (App.Manifest.dashboardByName): Added. |
| (App.Manifest.defaultDashboardName): Added. |
| (App.Manifest._fetchedManifest): Create dashboard model objects for all predefined ones. |
| |
| 2015-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Move commits viewer to the end of details view |
| https://bugs.webkit.org/show_bug.cgi?id=141315 |
| |
| Rubber-stamped by Andreas Kling. |
| |
| Show the difference instead of the old value per kling's request. |
| |
| * public/v2/app.js: |
| (App.PaneController._updateDetails): |
| * public/v2/index.html: |
| |
| 2015-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Move commits viewer to the end of details view |
| https://bugs.webkit.org/show_bug.cgi?id=141315 |
| |
| Reviewed by Andreas Kling. |
| |
| Improved the way list of commits are shown per kling's request. |
| |
| * public/v2/app.js: |
| (App.PaneController._updateDetails): Always show the old value even when a single point is selected. |
| |
| * public/v2/chart-pane.css: Updated the style for the commits viewer. |
| |
| * public/v2/commits-viewer.js: |
| (App.CommitsViewerComponent): Added "visible" property to hide the list of commits. |
| (App.CommitsViewerComponent.actions.toggleVisibility): Added. Toggles "visible" property. |
| |
| * public/v2/index.html: Updated the template for commits viewer to support "visible" property. Also |
| moved the commits viewers out of the details tables so that they don't interleave revision data. |
| |
| 2015-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard should compare results to baseline and target |
| https://bugs.webkit.org/show_bug.cgi?id=141286 |
| |
| Reviewed by Chris Dumez. |
| |
| Compare the selected value against baseline and target values as done in v1. e.g. "5% below target" |
| Also use d3.format to format the selected value to show four significant figures. |
| |
| * public/v2/app.js: |
| (App.Pane.searchCommit): |
| (App.Pane._fetch): Create time series here via createChartData so that _computeStatus can use them |
| to compute the status text without having to recreate them. |
| (App.createChartData): Added. |
| (App.PaneController._updateDetails): Use 3d.format on current and old values. |
| (App.PaneController._computeStatus): Added. Computes the status text. |
| (App.PaneController._relativeDifferentToLaterPointInTimeSeries): Added. |
| (App.AnalysisTaskController._fetchedManifest): Use createChartData as done in App.Pane._fetch. Also |
| format the values using chartData.formatter. |
| |
| * public/v2/chart-pane.css: Enlarge the status text. Show the status text in red if it's worse than |
| the baseline and in blue if it's better than the target. |
| |
| * public/v2/data.js: |
| (TimeSeries.prototype.findPointAfterTime): Added. |
| |
| * public/v2/index.html: Added a new tbody for the status text and the selected value. Also fixed |
| the bug that we were not showing the old value's unit. |
| |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._constructGraphIfPossible): Use chartData.formatter. Also cleaned up |
| the code to show the baseline and the target lines. |
| |
| * public/v2/manifest.js: |
| (App.Manifest.fetchRunsWithPlatformAndMetric): Added smallerIsBetter. |
| |
| 2015-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. |
| |
| * public/v2/app.js: |
| (App.IndexController.gridChanged): Use store.createRecord to create a custom dashboard as required by Ember.js |
| |
| 2015-02-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard doesn't preserve the number of days when clicking on a dashboard chart |
| https://bugs.webkit.org/show_bug.cgi?id=141280 |
| |
| Reviewed by Chris Dumez. |
| |
| Fixed the bug by passing in "since" as a query parameter to the charts page. |
| |
| Also fixed the styling issue that manifests when a JSON fetching fails on "Dashboard" page. |
| |
| * public/v2/app.css: Fixed CSS rules for error messages shown in the place of charts. |
| * public/v2/app.js: |
| (App.IndexController): Changed the default number of days from one month to one week. |
| (App.IndexController._sharedDomainChanged): Set "since" property on the controller. |
| * public/v2/index.html: Pass in "since" property on the controller as a query parameter. |
| |
| 2015-02-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard erroneously clears zoom when poping history items |
| https://bugs.webkit.org/show_bug.cgi?id=141278 |
| |
| Reviewed by Chris Dumez. |
| |
| The bug was caused by _sharedZoomChanged updating overviewSelection without updating mainPlotDomain. |
| |
| Updating overviewSelection resulted in _overviewSelectionChanged, which observes changes to overviewSelection, |
| to schedule a call to propagateZoom, which in turn overrode "sharedZoom" we just parsed from the query string. |
| |
| * public/v2/app.js: |
| (App.PaneController._overviewSelectionChanged): Don't schedule propagateZoom if the selected domain is already |
| shown in the main plot. |
| (App.PaneController._sharedZoomChanged): Set both overviewSelection and mainPlotDomain to avoid overriding |
| "sharedZoom" via propagateZoom inside _overviewSelectionChanged. |
| |
| 2015-02-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard shows null as the aggregator name if no aggregation is done |
| https://bugs.webkit.org/show_bug.cgi?id=141256 |
| |
| Reviewed by Chris Dumez. |
| |
| Don't show the aggregator name if there isn't one. |
| |
| * public/v2/manifest.js: |
| (App.Metric.label): |
| |
| 2015-02-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix after r179611. |
| |
| * public/v2/interactive-chart.js: |
| |
| 2015-02-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard doesn’t show the right unit for Safari UI tests |
| https://bugs.webkit.org/show_bug.cgi?id=141238 |
| |
| Reviewed by Darin Adler. |
| |
| Safari UI tests use custom metrics that end with "Time". This patch teaches the perf dashboard how to |
| get the unit for a given metric based on the suffix of the metric name instead of hard-coding the mapping |
| between metrics and their units. |
| |
| * public/js/helper-classes.js: |
| (PerfTestRuns): Use the suffix of the metric name to compute the unit. |
| * public/v2/manifest.js: |
| (App.Manifest.fetchRunsWithPlatformAndMetric): Ditto. Also set "useSI" property iff for "bytes". |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._constructGraphIfPossible): Respect useSI. Use toPrecision(3) otherwise. |
| (App.InteractiveChartComponent._relayoutDataAndAxes): Place the unit vertically on the left of ticks. |
| |
| 2015-02-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Interactive chart component provides two duplicate API for highlighting points |
| https://bugs.webkit.org/show_bug.cgi?id=141234 |
| |
| Reviewed by Chris Dumez. |
| |
| Prior to this patch, the interactive chart component supported highlightedItems for finding commits |
| on the main charts page and markedPoints to show the two end points in the analysis task page. |
| |
| This patch merges markedPoints into highlightedItems. |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController._fetchedRuns): Use highlightedItems. |
| * public/v2/chart-pane.css: |
| * public/v2/index.html: Ditto. |
| * public/v2/interactive-chart.js: |
| (App.InteractiveChartComponent._constructGraphIfPossible): Make this._highlights an array instead of |
| array of arrays. Also call _highlightedItemsChanged at the end to fix the bug that we never highlight |
| items if highlightedItems was set before the initial layout. |
| (App.InteractiveChartComponent._relayoutDataAndAxes): |
| (App.InteractiveChartComponent._updateHighlightPositions): Now that highlights are circles instead of |
| vertical lines, just set cx and cy as done for other "dots". |
| (App.InteractiveChartComponent._highlightedItemsChanged): Exit early only if _clippedContainer wasn't |
| already set; i.e. _constructGraphIfPossible hasn't been called. Also updated the logic to accommodate |
| the fact this._highlights is an array of elements instead of an array of arrays of elements. Finally, |
| set the radius of highlight circles here. |
| |
| 2015-02-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Don’t use repository names as id’s. |
| https://bugs.webkit.org/show_bug.cgi?id=141226 |
| |
| Reviewed by Chris Dumez. |
| |
| Not using repository names as their id's reduces the need to fetch the entire repositories table. |
| Since names of repositories are available in manifest.json, we can resolve their names in the front end. |
| |
| * Websites/perf.webkit.org/public/api/runs.php: |
| (parse_revisions_array): No longer uses $repository_id_to_name. |
| (main): No longer populates $repository_id_to_name. |
| |
| * Websites/perf.webkit.org/public/api/triggerables.php: |
| (main): Don't resolve repository names. |
| |
| * Websites/perf.webkit.org/public/include/manifest.php: |
| (ManifestGenerator::repositories): Use repositories ids as keys in the result and include their names. |
| (ManifestGenerator::bug_trackers): Don't resolve repository names. |
| |
| * Websites/perf.webkit.org/public/js/helper-classes.js: |
| (TestBuild): Renamed repositoryName to repositoryId. |
| (TestBuild.revision): Ditto. |
| (TestBuild.formattedRevisions): Ditto. Continue to use the repository name in the formatted result |
| since this is the text shown to human. |
| |
| * Websites/perf.webkit.org/public/v2/app.js: |
| (App.pane.searchCommit): Renamed repositoryName to repositoryId. |
| (App.PaneController._updateDetails): Ditto. |
| (App.AnalysisTaskController.updateRoots): Ditto. |
| |
| * Websites/perf.webkit.org/public/v2/data.js: |
| (Measurement): Ditto. |
| (Measurement.prototype.commitTimeForRepository): Ditto. |
| (Measurement.prototype.formattedRevisions): Ditto. |
| |
| * Websites/perf.webkit.org/public/v2/index.html: Use the repository name and the repository id as |
| select element's label and value respectively. |
| |
| 2015-02-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. Declare $repository_id_to_name in the global scope. |
| |
| * public/api/runs.php: |
| |
| 2015-02-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| /api/runs.php should have main function |
| https://bugs.webkit.org/show_bug.cgi?id=141220 |
| |
| Reviewed by Benjamin Poulain. |
| |
| Wrapped the code inside main function for clarity. |
| |
| * public/api/runs.php: |
| |
| 2015-01-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. "eta" isn't set on a in-progress build on a newly added builder. |
| |
| * tools/sync-with-buildbot.py: |
| (find_request_updates): |
| |
| 2015-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard always assigns the result of A/B testing with build request 1 |
| https://bugs.webkit.org/show_bug.cgi?id=140382 |
| |
| Reviewed by Darin Adler. |
| |
| The bug was caused by the expression array_get($report, 'jobId') or array_get($report, 'buildRequest') |
| which always evaluated to 1 when the report contained jobId. Fixed the bug by cascading array_get instead. |
| |
| Also fixed a typo as well as a bug that reports were never associated with builds. |
| |
| * public/include/report-processor.php: |
| (ReportProcessor::process): Don't use "or" to find the non-null value since that always evaluates to 1 |
| instead of the first non-null value. |
| (ReportProcessor::resolve_build_id): Fixed the typo by adding the missing "$this->". |
| (ReportProcessor::commit): Associate the report with the corresponding build as intended. |
| |
| 2015-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed typo fix. The prefix in triggerable_configurations is "trigconfig", not "trigrepo". |
| |
| * public/admin/tests.php: |
| |
| 2015-01-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. Removed the stale code. |
| |
| * public/admin/triggerables.php: |
| |
| 2015-01-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should have the ability to post A/B testing builds |
| https://bugs.webkit.org/show_bug.cgi?id=140317 |
| |
| Rubber-stamped by Simon Fraser. |
| |
| This patch adds the support for triggering A/B testing from the perf dashboard. |
| |
| We add a few new tables to the database. "build_triggerables", which represents a set of builders |
| that accept A/B testing. "triggerable_repositories" associates each "triggerable" with a fixed set |
| of repositories for which an arbitrary revision can be specified for A/B testing. |
| "triggerable_configurations" specifies a triggerable available on a given test on a given platform. |
| "roots" table which specifies the revision used in a given root set in each repository. |
| |
| * init-database.sql: Added "build_triggerables", "triggerable_repositories", |
| "triggerable_configurations", and "roots" tables. Added references to "build_triggerables", |
| "platforms", and "tests" tables as well as columns to store status, status url, and creation time |
| to build_requests table. Also made each test group's name unique in a given analysis task as it |
| would be confusing to have multiple test groups of the same name. |
| |
| * public/admin/tests.php: Added the UI and the code to associate a test with a triggerable. |
| |
| * public/admin/triggerables.php: Added. Manages the list of triggerables as well as repositories |
| for which a specific revision can be set in an A/B testing on a given triggerable. |
| |
| * public/api/build-requests.php: Added. Returns the list of open build requests on a specified |
| triggerable. Also updates the status' and the status urls of specified build requests when |
| buildRequestUpdates is provided in the raw POST data. |
| (main): |
| |
| * public/api/runs.php: |
| (fetch_runs_for_config): Don't include results associated with a build request, meaning they are |
| results of an A/B testing. |
| |
| * public/api/test-groups.php: |
| (main): Use the newly added BuildRequestsFetcher. Also merged fetch_test_groups_for_task back. |
| |
| * public/api/triggerables.php: Added. |
| (main): Returns a list of triggerables or a triggerable associated with a given analysis task. |
| |
| * public/include/admin-header.php: |
| |
| * public/include/build-requests-fetcher.php: Added. Extracted from public/api/test-groups.php. |
| (BuildRequestsFetcher): This class abstracts the process of fetching a list of builds requests |
| and root sets used in those requests.D |
| (BuildRequestsFetcher::__construct): |
| (BuildRequestsFetcher::fetch_for_task): |
| (BuildRequestsFetcher::fetch_for_group): |
| (BuildRequestsFetcher::fetch_incomplete_requests_for_triggerable): |
| (BuildRequestsFetcher::has_results): |
| (BuildRequestsFetcher::results): |
| (BuildRequestsFetcher::results_with_resolved_ids): |
| (BuildRequestsFetcher::results_internal): |
| (BuildRequestsFetcher::root_sets): |
| (BuildRequestsFetcher::fetch_roots_for_set): |
| |
| * public/include/db.php: |
| (Database::prefixed_column_names): Don't return "$prefix_" when there are no columns. |
| (Database::insert_row): Support taking an empty array for values. This is useful in "root_sets" |
| table since it only has the primary key, id, column. |
| (Database::select_or_insert_row): |
| (Database::update_or_insert_row): |
| (Database::update_row): Added. |
| (Database::_select_update_or_insert_row): Takes an extra argument specifying whether a new row |
| should be inserted when no row matches the specified criteria. This is used while updating |
| build_requests' status and url in public/api/build-requests.php since we shouldn't be inserting |
| new build requests in that API. |
| (Database::select_rows): Also use "1 == 1" in the select query when the query criteria is empty. |
| This is used in public/api/triggerables.php when no analysis task is specified. |
| |
| * public/include/json-header.php: |
| (find_triggerable_for_task): Added. Finds a triggerable available on a given test. We return the |
| triggerable associated with the closest ancestor of the test. Since issuing a new query for each |
| ancestor test is expensive, we retrieve triggerable for all ancestor tests at once and manually |
| find the closest ancestor with a triggerable. |
| |
| * public/include/report-processor.php: |
| (ReportProcessor::process): |
| (ReportProcessor::resolve_build_id): Associate a build request with the newly created build |
| if jobId or buildRequest is specified. |
| |
| * public/include/test-name-resolver.php: |
| (TestNameResolver::map_metrics_to_tests): Store the entire metric row instead of its name so that |
| test_exists_on_platform can use it. The last diff in public/admin/tests.php adopts this change. |
| (TestNameResolver::test_exists_on_platform): Added. Returns true iff the test has ever run on |
| a given platform. |
| |
| * public/include/test-path-resolver.php: Added. |
| (TestPathResolver): This class abstracts the ancestor chains of a test. It retrieves the entire |
| "tests" table to do this since there could be arbitrary number of ancestors for a given test. |
| This class is a lot more lightweight than TestNameResolver, which retrieves a whole bunch of tables |
| in order to compute full test metric names. |
| (TestPathResolver::__construct): |
| (TestPathResolver::ancestors_for_test): Returns the ordered list of ancestors from the closest to |
| the highest (a test without a parent). |
| (TestPathResolver::path_for_test): Returns a test "path", the ordered list of test names from |
| the highest ancestor to the test itself. |
| (TestPathResolver::ensure_id_to_test_map): Fetches "tests" table to construct id_to_test_map. |
| |
| * public/privileged-api/create-test-group.php: Added. An API to create A/B testing groups. |
| (main): |
| (commit_sets_from_root_sets): Given a dictionary of repository names to a pair of revisions |
| for sets A and B respectively, returns a pair of arrays, each of which contains the corresponding |
| set of "commits" for sets A and B respectively. e.g. {"WebKit": [1, 2], "Safari": [3, 4]} will |
| result in [[WebKit commit at r1, Safari commit at r3], [WebKit commit at r2, Safari commit at r4]]. |
| |
| * public/v2/analysis.js: |
| (App.AnalysisTask.testGroups): Takes arguments so that set('testGroups') will invalidate the cache. |
| (App.AnalysisTask.triggerable): Added. Retrieves the triggerable associated with the task lazily. |
| (App.TestGroup.rootSets): Added. Returns the list of root set ids used in this A/B testing group. |
| (App.TestGroup.create): Added. Creates a new A/B testing group. |
| (App.Triggerable): Added. |
| (App.TriggerableAdapter): Added. |
| (App.TriggerableAdapter.buildURL): Added. |
| (App.BuildRequest.testGroup): Renamed from group. |
| (App.BuildRequest.orderLabel): Added. One-based index to be used in labels. |
| (App.BuildRequest.config): Added. Returns either 'A' or 'B' depending on the configuration used |
| in this build request. |
| (App.BuildRequest.status): Added. |
| (App.BuildRequest.statusLabel): Added. Returns a human friendly label for the current status. |
| (App.BuildRequest): Removed buildNumber, buildBuilder, as well as buildTime as they're unused. |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskController.testGroups): Added. |
| (App.AnalysisTaskController.possibleRepetitionCounts): Added. |
| (App.AnalysisTaskController.updateRoots): Renamed from roots. This is also no longer a property |
| but an observer that updates "roots" property. Filter out the repositories that are not accepted |
| by the associated triggerable as they will be ignored. |
| (App.AnalysisTaskController.actions.createTestGroup): Added. |
| |
| * public/v2/index.html: Updated the UI, and added a form element to trigger createTestGroup action. |
| |
| * tools/sync-with-buildbot.py: Added. This scripts posts new builds on buildbot and reports back |
| the status of those builds to the perf dashboard. A similar script can be written to support |
| other continuous builds systems. |
| (main): Fetches the list of pending builds as well as currently running or completed builds from |
| a buildbot, and report new statuses of builds requests to the perf dashboard. It will then schedule |
| a single new build on each builder with no pending builds, and marks the set of open build requests |
| that have been scheduled to run on the buildbot but not found in the first step as stale. |
| (load_config): Loads a JSON that contains the configurations for each builder. e.g. |
| [ |
| { |
| "platform": "mac-mavericks", |
| "test": ["Parser", "html5-full-render.html"], |
| "builder": "Trunk Syrah Production Perf AB Tests", |
| "arguments": { |
| "forcescheduler": "force-mac-mavericks-release-perf", |
| "webkit_revision": "$WebKit", |
| "jobid": "$buildRequest" |
| } |
| } |
| ] |
| |
| (find_request_updates): Return a list of build request status updates to make based on the pending |
| builds as well as in-progress and completed builds on each builder on the buildbot. When a build is |
| completed, we use the special status "failedIfNotCompleted" which results in "failed" status only |
| if the build request had not been completed. This is necessary because a failed build will not |
| report its failed-ness back to the perf dashboard in some cases; e.g. lost slave or svn up failure. |
| (update_and_fetch_build_requests): Submit the build request status updates and retrieve the list |
| of open requests the perf dashboard has. |
| (find_stale_request_updates): Compute the list of build requests that have been scheduled on the |
| buildbot but not found in find_request_updates. These build requests are lost. e.g. a master reboot |
| or human canceling a build may trigger such a state. |
| (schedule_request): Schedules a build with the arguments specified in the configuration JSON after |
| replacing repository names with their revisions and buildRequest with the build request id. |
| (config_for_request): Finds a builder for the test and the platform of a build request. |
| (fetch_json): Fetches a JSON from the specified URL, optionally with BasicAuth. |
| (property_value_from_build): Returns the value of a specific property in a buildbot build. |
| (request_id_from_build): Returns the build request id of a given buildbot build if there is one. |
| |
| 2015-01-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Cache-control should be set only on api/runs |
| https://bugs.webkit.org/show_bug.cgi?id=140312 |
| |
| Reviewed by Andreas Kling. |
| |
| Some JSON APIs such as api/analysis-tasks can't be cached even for a short period of time (e.g. a few minutes) |
| since they can be modified by the user on demand. Since only api/runs.php takes a long time to generate JSONs, |
| just set cache-control there instead of json-header.php which is used by other JSON APIs. |
| |
| Also set date_default_timezone_set in db.php since we never use non-UTC timezone in our scripts. |
| |
| * public/api/analysis-tasks.php: |
| * public/api/runs.php: Set the cache control headers. |
| * public/api/test-groups.php: |
| * public/include/db.php: Set the default timezone to UTC. |
| * public/include/json-header.php: Don't set the cache control headers. |
| |
| 2015-01-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| api/report-commit should authenticate with a slave name and password |
| https://bugs.webkit.org/show_bug.cgi?id=140308 |
| |
| Reviewed by Benjamin Poulain. |
| |
| Use a slave name and a password to authenticate new commit reports. |
| |
| * public/api/report-commits.php: |
| (main): |
| * public/include/json-header.php: |
| (verify_slave): Renamed and repurposed from verify_builder in report-commits.php. Now authenticates with |
| a slave name and a password instead of a builder name and a password. |
| * tests/api-report-commits.js: Updated tests. |
| * tools/pull-svn.py: |
| (main): Renamed variables. |
| (submit_commits): Submits slaveName and slavePassword instead of builderName and builderPassword. |
| |
| 2014-12-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should support authentication via a slave password |
| https://bugs.webkit.org/show_bug.cgi?id=139837 |
| |
| Reviewed by Andreas Kling. |
| |
| For historical reasons, perf dashboard conflated builders and build slaves. As a result we ended up |
| having to add multiple builders with the same password when a single build slave is shared among them. |
| |
| This patch introduces the concept of build_slave into the perf dashboard to end this madness. |
| |
| * init-database.sql: Added build_slave table as well as references to it in builds and reports. |
| |
| * public/admin/build-slaves.php: Added. |
| |
| * public/admin/builders.php: Added the support for updating passwords. |
| |
| * public/include/admin-header.php: |
| (update_field): Takes an extra argument when a new value needs to be supplied by the caller instead of |
| being retrieved from $_POST. |
| (AdministrativePage::render_table): Use array_get to retrieve a value out of the database row since |
| the raw may not exist (e.g. new_password). |
| (AdministrativePage::render_form_to_add): Added the support for post_insertion. Don't render the form |
| control here when this flag evaluates to TRUE. |
| |
| * public/include/report-processor.php: |
| (ReportProcessor::process): Added the logic to authenticate with slaveName and slavePassword if those |
| values are present in the report. In addition, try authenticating builderName with slavePassword if |
| builderPassword is not specified. When neither password is specified, exit with BuilderNotFound. |
| Also insert the slave or the builder whichever is missing after we've successfully authenticated. |
| (ReportProcessor::construct_build_data): Takes a builder ID and an optional slave ID instead of |
| a builder row. |
| (ReportProcessor::store_report): Store the slave ID with the report. |
| (ReportProcessor::resolve_build_id): Exit with MismatchingBuildSlave when the slave associated with |
| the matching build is different from what's being reported. |
| |
| * tests/api-report.js: Added a bunch of tests to test the new features of /api/report. |
| (.addSlave): Added. |
| |
| 2014-12-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard should not duplicate author information in each commit |
| https://bugs.webkit.org/show_bug.cgi?id=139756 |
| |
| Reviewed by Darin Adler. |
| |
| Instead of each commit having author name and email, make it reference a newly added committers table. |
| Also replace "email" by "account" since some repositories don't use emails as account names. |
| |
| This improves the keyword search performance in commits.php since LIKE now runs on committers table, |
| which only contains as many rows as there are accounts in each repository, instead of commits table |
| which contains every commit ever happened in each repository. |
| |
| To migrate an existing database into match the new schema, run: |
| |
| BEGIN; |
| |
| INSERT INTO committers (committer_repository, committer_name, committer_email) |
| (SELECT DISTINCT commit_repository, commit_author_name, commit_author_email |
| FROM commits WHERE commit_author_email IS NOT NULL); |
| |
| ALTER TABLE commits ADD COLUMN commit_committer integer REFERENCES committers ON DELETE CASCADE; |
| |
| UPDATE commits SET commit_committer = committer_id FROM committers |
| WHERE commit_repository = committer_repository AND commit_author_email = committer_email; |
| |
| ALTER TABLE commits DROP COLUMN commit_author_name CASCADE; |
| ALTER TABLE commits DROP COLUMN commit_author_email CASCADE; |
| |
| COMMIT; |
| |
| * init-database.sql: Added committers table, and replaced author columns in commits table by a foreign |
| reference to committers. Also added the missing drop table statements. |
| |
| * public/api/commits.php: |
| (main): Fetch the corresponding committers row for a single commit. Also wrap a single commit by |
| an array here instead of doing it in format_commit. |
| (fetch_commits_between): Updated queries to JOIN commits with committers. |
| (format_commit): Takes both commit and committers rows. Also don't wrap the result in an array as that |
| is now done in main. |
| |
| * public/api/report-commits.php: |
| (main): Store the reported committer information or update the existing entry if there is one. |
| |
| * tests/admin-regenerate-manifest.js: Fixed tests. |
| |
| * tests/api-report-commits.js: Ditto. Also added a test for updating an existing committer entry. |
| |
| * tools/pull-svn.py: Renamed email to account. |
| (main): |
| (fetch_commit_and_resolve_author): |
| (fetch_commit): |
| (resolve_author_name_from_account): |
| (resolve_author_name_from_email): Deleted. |
| |
| 2014-12-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. |
| |
| * public/v2/index.html: Include js files we extracted in r177424. |
| |
| 2014-12-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Adding the forgotten svnprop. |
| |
| * tools/pull-svn.py: Added property svn:executable. |
| |
| 2014-12-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Split InteractiveChartComponent and CommitsViewerComponent into separate files |
| https://bugs.webkit.org/show_bug.cgi?id=139716 |
| |
| Rubber-stamped by Benjamin Poulain. |
| |
| Refactored InteractiveChartComponent and CommitsViewerComponent out of app.js into commits-viewer.js |
| and interactive-chart.js respectively since app.js has gotten really large. |
| |
| * public/v2/app.js: |
| * public/v2/commits-viewer.js: Added. |
| * public/v2/interactive-chart.js: Added. |
| |
| 2014-12-02 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard's chart UI is buggy |
| https://bugs.webkit.org/show_bug.cgi?id=139214 |
| |
| Reviewed by Chris Dumez. |
| |
| The bugginess was caused by weird interactions between charts and panes. Rewrote the code to fix it. |
| |
| Superfluous selectionChanged and domainChanged "event" actions were removed from the interactive chart |
| component. This is not how Ember.js components should interact to begin with. The component now exposes |
| selectedPoints and always updates selection instead of sharedSelection. |
| |
| * public/v2/app.js: |
| (App.ChartsController.present): Added. We can't call Date.now() in various points in our code as that |
| would lead to infinite mutual recursions since X-axis domain values wouldn't match up. |
| (App.ChartsController.updateSharedDomain): This function was completely useless. The overview's start |
| and end time should be completely determined by "since" and the present time. |
| (App.ChartsController._startTimeChanged): Ditto. |
| (App.ChartsController._scheduleQueryStringUpdate): |
| (App.ChartsController._updateQueryString): Set "zoom" only if it's different from the shared domain. |
| |
| (App.domainsAreEqual): Moved from InteractiveChartComponent._xDomainsAreSame. |
| |
| (App.PaneController.actions.createAnalysisTask): Use selectedPoints property set by the chart. |
| (App.PaneController.actions.overviewDomainChanged): Removed; only needed to call updateSharedDomain. |
| (App.PaneController.actions.rangeChanged): Removed. _showDetails (renamed to _updateDetails) directly |
| observes the changes to selectedPoints property as it gets updated by the main chart. |
| (App.PaneController._overviewSelectionChanged): This was previously a dead code. Now it's used again |
| with a bug fix. When the overview selection is cleared, we use the same domain in the main chart and |
| the overview chart. |
| (App.PaneController._sharedDomainChanged): Fixed a but that it erroneously updates the overview domain |
| when domain arrays aren't identical. This was causing a subtle race with other logic. |
| (App.PaneController._sharedZoomChanged): Ditto. Also don't set mainPlotDomain here as any changes to |
| overviewSelection will automatically propagate to the main plot's domain as they're aliased. |
| (App.PaneController._currentItemChanged): Merged into _updateDetails (renamed from _showDetails). |
| (App.PaneController._updateDetails): Previously, this function took points and inspected _hasRange to |
| see if those two points correspond to a range or a single data point. Rewrote all that logic by |
| directly observing selectedPoints and currentItem properties instead of taking points and relying on |
| an instance variable, which was a terrible API. |
| (App.PaneController._updateCanAnalyze): Use selectedPoints property. Since this property is only set |
| when the main plot has a selected range, we don't have to check this._hasRange anymore. |
| |
| (App.InteractiveChartComponent._updateDomain): No longer sends domainChanged "event" action. |
| (App.InteractiveChartComponent._sharedSelectionChanged): Removed. This is a dead code. |
| (App.InteractiveChartComponent._updateSelection): |
| (App.InteractiveChartComponent._xDomainsAreSame): Moved to App.domainsAreEqual. |
| (App.InteractiveChartComponent._setCurrentSelection): Update the selection only if needed. Also set |
| selectedPoints property. |
| |
| (App.AnalysisTaskController._fetchedRuns): |
| (App.AnalysisTaskController._rootChangedForTestSet): |
| |
| * public/v2/index.html: |
| Removed non-functional sharedSelection and superfluous selectionChanged and domainChanged actions. |
| |
| 2014-11-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Fixed syntax errors. |
| |
| * init-database.sql: |
| * public/api/commits.php: |
| |
| 2014-11-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The dashboard on new perf monitor should be configurable |
| https://bugs.webkit.org/show_bug.cgi?id=138994 |
| |
| Reviewed by Benjamin Poulain. |
| |
| For now, make it configurable via config.json. We should eventually make it configurable via |
| an administrative page but this will do for now. |
| |
| * config.json: Added the empty dashboard configuration. |
| |
| * public/include/manifest.php: Include the dashboard configuration in the manifest file. |
| |
| * public/v2/app.js: |
| (App.IndexController): Removed defaultTable since this is now dynamically obtained via App.Manifest. |
| (App.IndexController.gridChanged): Use App.Dashboard to parse the dashboard configuration. |
| Also obtain the default configuration from App.Manifest. |
| (App.IndexController._normalizeTable): Moved to App.Dashboard. |
| |
| * public/v2/manifest.js: |
| (App.Repository.urlForRevision): Fixed the position of the open curly bracket. |
| (App.Repository.urlForRevisionRange): Ditto. |
| (App.Dashboard): Added. |
| (App.Dashboard.table): Extracted from App.IndexController.gridChanged. |
| (App.Dashboard.rows): Ditto. |
| (App.Dashboard.headerColumns): Ditto. |
| (App.Dashboard._normalizeTable): Moved from App.IndexController._normalizeTable. |
| (App.MetricSerializer.normalizePayload): Synthesize a dashboard record from the configuration. |
| Since there is exactly one dashboard object per app, it's okay to hard code an id here. |
| (App.Manifest._fetchedManifest): Set defaultDashboard to the one and only one dashboard we have. |
| |
| 2014-11-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| There should be a way to associate bugs with analysis tasks |
| https://bugs.webkit.org/show_bug.cgi?id=138977 |
| |
| Reviewed by Benjamin Poulain. |
| |
| Updated associate-bug.php to match the new database schema. |
| |
| * public/include/json-header.php: |
| (require_format): Removed the call to camel_case_words_separated_by_underscore since the name is |
| already camel-cased in require_existence_of. This makes the function usable elsewhere. |
| |
| * public/privileged-api/associate-bug.php: |
| (main): Changed the API to take run, bugTracker, and number to match the new database schema. |
| Also verify that those values are integers using require_format. |
| |
| * public/v2/analysis.js: |
| (App.AnalysisTask.label): Added. Concatenates the task's name with the bug numbers. |
| (App.Bug.label): Added. |
| (App.BugAdapter): Added. |
| (App.BugAdapter.createRecord): Use PrivilegedAPI instead of the builtin ajax call. |
| (App.BuildRequest): Inherit from newly added App.Model, which is set to DS.Model right now. |
| |
| * public/v2/app.css: Renamed .test-groups to .analysis-group. Also added new rules for the table |
| containing the bug information. |
| |
| * public/v2/app.js: |
| (App.InteractiveChartComponent._rangesChanged): Added label to range bar objects. |
| (App.AnalysisTaskRoute): |
| (App.AnalysisTaskController): Replaced the functionality of App.AnalysisTaskViewModel. |
| (App.AnalysisTaskController._fetchedManifest): Added. |
| (App.AnalysisTaskController.actions.associateBug): Added. |
| |
| * public/v2/chart-pane.css: Renamed .bugs-pane to .analysis-pane. |
| |
| * public/v2/data.js: |
| (Measurement.prototype.associateBug): Deleted. |
| |
| * public/v2/index.html: Renamed .bugs-pane to .analysis-pane and .test-groups to .analysis-group. |
| Added a table show the bug information. Also hide the chart until chartData is available. |
| |
| * public/v2/manifest.js: |
| (App.Model): Added. |
| |
| 2014-11-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix misc bugs and typos in app.js |
| https://bugs.webkit.org/show_bug.cgi?id=138946 |
| |
| Reviewed by Benjamin Poulain. |
| |
| * public/v2/app.js: |
| (App.DashboardPaneProxyForPicker._platformOrMetricIdChanged): |
| (App.ChartsController.init): |
| (App.buildPopup): Renamed from App.BuildPopup. |
| (App.InteractiveChartComponent._constructGraphIfPossible): Fixed the bug that we were calling |
| remove() on the wrong object (an array as opposed to elements in the array). |
| (App.InteractiveChartComponent._highlightedItemsChanged): Check the length of _highlights as |
| _highlights is always an array and evalutes to true. |
| |
| 2014-11-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard should provide UI to create a new analysis task |
| https://bugs.webkit.org/show_bug.cgi?id=138910 |
| |
| Reviewed by Benjamin Poulain. |
| |
| This patch reverts some parts of r175006 and re-introduces bugs associated with analysis tasks. |
| I'll add UI to show and edit bug numbers associated with an analysis task in a follow up patch. |
| |
| With this patch, we can create a new analysis task by selection a range of points and opening |
| "analysis pane" (renamed from "bugs pane"). Each analysis task created is represented by a yellow bar |
| in the chart hyperlinked to the analysis task. |
| |
| * init-database.sql: Redefined the bugs to be associated with an analysis task instead of a test run. |
| |
| * public/api/analysis-tasks.php: Added the support for querying analysis tasks for a specific metric |
| on a specific platform. Also retrieve and return all bugs associated with analysis tasks. |
| (main): |
| (fetch_and_push_bugs_to_tasks): Added. Fetches all bugs associated with an array of analysis tasks |
| and adds the associated bugs to each task in the array. |
| (format_task): |
| |
| * public/api/runs.php: Reverted changes made in r175006. |
| (fetch_runs_for_config): |
| (format_run): |
| |
| * public/api/test-groups.php: |
| (fetch_test_groups_for_task): Use the newly added Database::select_rows. |
| |
| * public/include/db.php: |
| (Database::select_first_or_last_row): |
| (Database::select_rows): Extracted from select_first_or_last_row. |
| |
| * public/v2/analysis.js: |
| (App.AnalysisTask): Added "bugs" property. |
| (App.Bug): Added now that bugs are regular data store objects. |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): Calls this.fetchAnalyticRanges to fetch analysis tasks as well as test runs. |
| (App.Pane.fetchAnalyticRanges): Added. Fetches analysis tasks for the current metric on the current |
| platform that are associated with a specific range of runs. |
| (App.PaneController.actions.toggleBugsPane): Updated per showingBugsPane to showingAnalysisPane rename. |
| (App.PaneController.actions.associateBug): Deleted. |
| (App.PaneController.actions.createAnalysisTask): Replaced the pre-condition checks with assertions as |
| this action should never be triggered when the pre-condition is not met. Also re-fetch analysis tasks |
| once we've created one. |
| (App.PaneController.toggleSearchPane): Updated per showingBugsPane to showingAnalysisPane rename. |
| (App.PaneController._detailsChanged): Ditto. Removed selectedSinglePoint since it's no longer used. |
| (App.PaneController._showDetails): Call _updateCanAnalyze to update the status of "Analyze" button. |
| (App.PaneController._updateBugs): Deleted. |
| (App.PaneController._updateMarkedPoints): Deleted. |
| (App.PaneController._updateCanAnalyze): Added. Disables the button to create an analysis task when |
| the name is missing or when at most one point is selected. |
| |
| (App.InteractiveChartComponent._constructGraphIfPossible): Update the locations of range rects. |
| (App.InteractiveChartComponent._relayoutDataAndAxes): Ditto. |
| (App.InteractiveChartComponent._mousePointInGraph): Don't return a point unless the mouse cursor is |
| on our svg element to avoid locking the current item when a bar shown for an analysis task is clicked. |
| (App.InteractiveChartComponent._rangesChanged): Added. Creates an array of objects representing |
| clickable bars for analysis tasks. |
| (App.InteractiveChartComponent._updateRangeBarRects): Computes the inline style used by each clickable |
| bar for analysis tasks to place them at the right location. |
| (App.InteractiveChartComponent.actions.openRange): Added. Forwards the action to the parent controller. |
| |
| * public/v2/chart-pane.css: |
| (.chart .extent): Use the same color as the vertical indicator in the highlight behind the selection. |
| (.chart .rangeBar): Added. |
| |
| * public/v2/data.js: |
| (TimeSeries.prototype.nextPoint): Added. Used by _rangesChanged. |
| |
| * public/v2/index.html: Renamed "bugs pane" to "analysis pane" and removed the UI to associate bugs. |
| This ability will be reinstated in a follow up patch. Also added a container div and spans for analysis |
| task bars in the interactive chart component. |
| |
| 2014-11-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix typos in r176203. |
| |
| * public/v2/app.js: |
| (App.ChartsController.actions.addPaneByMetricAndPlatform): |
| (App.AnalysisTaskRoute): |
| |
| 2014-11-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Updated the install instruction. |
| |
| * Install.md: |
| |
| 2014-11-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| App.Manifest shouldn't use App.__container__.lookup |
| https://bugs.webkit.org/show_bug.cgi?id=138768 |
| |
| Reviewed by Andreas Kling. |
| |
| Removed the hack to find the store object via App.__container__.lookup. |
| Pass around the store object instead. |
| |
| * public/v2/app.js: |
| (App.DashboardRow._createPane): Add "store" property to the pane. |
| (App.DashboardPaneProxyForPicker._platformOrMetricIdChanged): Ditto. |
| (App.IndexController.gridChanged): Ditto. |
| (App.IndexController.actions.addRow): Ditto. |
| (App.IndexController.init): Ditto. |
| (App.Pane._fetch): Ditto. |
| (App.ChartsController._parsePaneList): Ditto. |
| (App.ChartsController._updateQueryString): Ditto. |
| (App.ChartsController.actions.addPaneByMetricAndPlatform): Ditto. |
| (App.BuildPopup): Ditto. |
| (App.AnalysisTaskRoute.model): Ditto. |
| (App.AnalysisTaskViewModel._taskUpdated): Ditto. |
| |
| * public/v2/manifest.js: |
| (App.Manifest.fetch): Removed the code to find the store object. |
| |
| 2014-11-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix Ember.js warnings the new perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=138531 |
| |
| Reviewed by Darin Adler. |
| |
| Fixed various warnings. |
| |
| * public/v2/app.js: |
| (App.InteractiveChartComponent._relayoutDataAndAxes): We can't use "rem". Use this._rem as done for x. |
| * public/v2/data.js: |
| (PrivilegedAPI._post): Removed the superfluous console.log. |
| (CommitLogs.fetchForTimeRange): Ditto. |
| * public/v2/index.html: Added tbody as required by the HTML specification. |
| |
| 2014-11-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix typos in r175768. |
| |
| * public/v2/app.js: |
| (App.AnalysisTaskViewModel.roots): |
| |
| 2014-11-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Introduce the concept of analysis task to perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=138517 |
| |
| Reviewed by Andreas Kling. |
| |
| Introduced the concept of an analysis task, which is created for a range of measurements for a given metric on |
| a single platform and used to bisect regressions in the range. |
| |
| Added a new page to see the list of active analysis tasks and a page to view the contents of an analysis task. |
| |
| * init-database.sql: Added a bunch of tables to store information about analysis tasks. |
| analysis_tasks - Represents each analysis task. Associated with a platform and a metric and possibly with two |
| test runs. Analysis tasks not associated with test runs are used for try new patches. |
| analysis_test_groups - A test group in an analysis task represents a bunch of related A/B testing results. |
| root_sets - A root set represents a set of roots (or packages) installed in each A/B testing. |
| build_requests - A build request represents a single pending build for A/B testing. |
| |
| * public/api/analysis-tasks.php: Added. Returns the specified analysis task or all analysis tasks in an array. |
| (main): |
| (format_task): |
| |
| * public/api/test-groups.php: Added. Returns analysis task groups for the specified analysis task or returns |
| the specified analysis task group as well as build requests associated with them. |
| (main): |
| (fetch_test_groups_for_task): |
| (fetch_build_requests_for_task): |
| (fetch_build_requests_for_group): |
| (format_test_group): |
| (format_build_request): |
| |
| * public/include/json-header.php: |
| (remote_user_name): Extracted from compute_token so that we can use it in create-analysis-task.php. |
| (compute_token): |
| |
| * public/privileged-api/associate-bug.php: |
| (main): Fixed a typo. |
| |
| * public/privileged-api/create-analysis-task.php: Added. Creates a new analysis task for a given test run range. |
| (main): |
| (ensure_row_by_id): |
| (ensure_config_from_runs): |
| |
| * public/privileged-api/generate-csrf-token.php: Use remote_user_name. |
| |
| * public/v2/analysis.js: Added. Various Ember data store models to represent analysis tasks and related objects. |
| (App.AnalysisTask): |
| (App.AnalysisTask.create): |
| (App.TestGroup): |
| (App.TestGroupAdapter): |
| (App.AnalysisTaskSerializer): |
| (App.TestGroupSerializer): |
| (App.BuildRequest): |
| |
| * public/v2/app.css: Added style rules for the analysis page. |
| |
| * public/v2/app.js: |
| (App.Pane._fetch): Use fetchRunsWithPlatformAndMetric, which has been refactored into App.Manifest. |
| |
| (App.PaneController.actions.toggleBugsPane): Show bugs pane even when there are no bug trackers or there is not |
| exactly one selected point as we can still create an analysis task. |
| (App.PaneController.actions.associateBug): Renamed singlySelectedPoint to selectedSinglePoint to be more |
| grammatical and also alert'ed the error message when there is one. |
| (App.PaneController.actions.createAnalysisTask): Added. Creates a new analysis task and opens it in a new tab. |
| Since window.open only works during the click, we open the new "window" preemptively and navigates or closes it |
| once XHR request has completed. |
| (App.PaneController._detailsChanged): Changes due to singlySelectedPoint to selectedSinglePoint rename. |
| (App.PaneController._updateBugs): Fixed a bug that we were showing bugs in the previous point when a single point |
| is selected in the details pane. |
| |
| (App.AnalysisRoute): Added. |
| (App.AnalysisTaskRoute): Added. |
| (App.AnalysisTaskViewModel): Added. |
| (App.AnalysisTaskViewModel._taskUpdated): Fetch runs for the associated platform and metric. |
| (App.AnalysisTaskViewModel._fetchedRuns): Setup the chart data to show. |
| (App.AnalysisTaskViewModel.testSets): The computed property used to update roots for all repositories/projects. |
| (App.AnalysisTaskViewModel._rootChangedForTestSet): Updates root selections for all repositories/projects when |
| the user selects an option for all roots in A or B configuration. |
| (App.AnalysisTaskViewModel.roots): The computed property used to show root choices for each repository/project. |
| |
| * public/v2/chart-pane.css: Added style rules for details view in the analysis task page. |
| |
| * public/v2/data.js: |
| (Measurement.prototype._formatRevisionRange): Don't prefix a revision number with "At " when there is no previous |
| point so that we can use it in App.AnalysisTaskViewModel.roots. |
| (TimeSeries.prototype.findPointByMeasurementId): Added. |
| (TimeSeries.prototype.seriesBetweenPoints): Added. |
| |
| * public/v2/index.html: Use Metric.fullName since the same value is needed in the analysis task page. Also added |
| a button to create an analysis task, and made bugs pane button always enabled since we can an analysis task even |
| when multiple points are selected. Finally, added a new template for the analysis task page. |
| |
| * public/v2/manifest.js: |
| (App.Metric.fullName): Added to share code between the charts page and the analysis task page. |
| (App.Manifest.fetchRunsWithPlatformAndMetric): Extracted from App.Pane._fetch to be reused in |
| App.AnalysisTaskViewModel._taskUpdated. |
| |
| 2014-10-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove App.PaneController.bugsChangeCount in the new perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=138111 |
| |
| Reviewed by Darin Adler. |
| |
| * public/v2/app.js: |
| (App.PaneController.bugsChangeCount): Removed. |
| (App.PaneController.actions.associateBug): Call _updateMarkedPoints instead of incrementing bugsChangeCount. |
| (App.PaneController._updateMarkedPoints): Extracted from App.InteractiveChartComponent._updateDotsWithBugs. |
| Finds the list of current run's points that are associated with bugs. |
| (App.InteractiveChartComponent._updateMarkedDots): Renamed from _updateDotsWithBugs. |
| * public/v2/chart-pane.css: |
| (.chart .marked): Renamed from .hasBugs. |
| * public/v2/index.html: Specify chartPointRadius and markedPoints. |
| |
| 2014-10-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| REGRESSION: commit logs are not shown sometimes on the new dashboard UI |
| https://bugs.webkit.org/show_bug.cgi?id=138099 |
| |
| Reviewed by Benjamin Poulain. |
| |
| The bug was caused by _currentItemChanged not passing the previous point in the list of points and also |
| _showDetails inverting the order of the current and old measurements. |
| |
| * public/v2/app.js: |
| (App.PaneController._currentItemChanged): Pass in the previous point to _showDetails when there is one. |
| (App.PaneController._showDetails): Since points are ordered chronologically, the last point is the |
| current (latest) measurement and the first point is the oldest measurement. |
| (App.CommitsViewerComponent.commitsChanged): Don't show a single measurement as a range for clarity. |
| |
| 2014-10-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should provide a way to associate bugs with a test run |
| https://bugs.webkit.org/show_bug.cgi?id=137857 |
| |
| Reviewed by Andreas Kling. |
| |
| Added a "privileged" API, /privileged-api/associate-bug, to associate a bug with a test run. |
| /privileged-api/ is to be protected by an authentication mechanism such as DigestAuth over https by |
| the Apache configuration. |
| |
| |
| The Cross Site Request (CSRF) Forgery prevention for privileged APIs work as follows. When a user is |
| about to make a privileged API access, the front end code obtains a CSRF token generated by POST'ing |
| to privileged-api/generate-csrf-token; the page sets a randomly generated salt and an expiration time |
| via the cookie and returns a token computed from those two values as well as the remote username. |
| |
| The font end code then POST's the request along with the returned token. The server side code verifies |
| that the specified token can be generated from the salt and the expiration time set in the cookie, and |
| the token hasn't expired. |
| |
| |
| * init-database.sql: Added bug_url to bug_trackers table, and added bugs table. Each bug tracker will |
| have zero or exactly one bug associated with a test run. |
| |
| * public/admin/bug-trackers.php: Added the support for editing bug_url. |
| * public/api/runs.php: |
| (fetch_runs_for_config): Modified the query to fetch bugs associated with test_runs. |
| (parse_bugs_array): Added. Parses the aggregated bugs and creates a dictionary that maps a tracker id to |
| an associated bug if there is one. |
| (format_run): Calls parse_bugs_array. |
| |
| * public/include/json-header.php: Added helper functions to deal for CSRF prevention. |
| (ensure_privileged_api_data): Added. Dies immediately if the request's method is not POST or doesn't |
| have a valid JSON payload. |
| (ensure_privileged_api_data_and_token): Ditto. Also checks that the CSRF prevention token is valid. |
| (compute_token): Computes a CSRF token using the REMOTE_USER (e.g. set via BasicAuth), the salt, and |
| the expiration time stored in the cookie. |
| (verify_token): Returns true iff the specified token matches what compute_token returns from the cookie. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::bug_trackers): Include bug_url as bugUrl in the manifest. Also use tracker_id instead |
| of tracker_name as the key in the manifest. This requires changes to both v1 and v2 front end. |
| |
| * public/index.html: |
| (Chart..showTooltipWithResults): Updated for the manifest format changed mentioned above. |
| |
| * public/privileged-api/associate-bug.php: Added. |
| (main): Added. Associates or dissociates a bug with a test run inside a transaction. It prevent a CSRF |
| attack via ensure_privileged_api_data_and_token, which calls verify_token. |
| |
| * public/privileged-api/generate-csrf-token.php: Added. Generates a CSRF token valid for one hour. |
| |
| * public/v2/app.css: |
| (.disabled .icon-button:hover g): Used by the "bugs" icon when a range of points or no points are |
| selected in a chart. |
| |
| * public/v2/app.js: |
| (App.PaneController.actions.toggleBugsPane): Added. Toggles the visibility of the bugs pane when exactly |
| one point is selected in the chart. Also hides the search pane when making the bugs pane visible since |
| they would overlap on each other if both of them are shown. |
| (App.PaneController.actions.associateBug): Makes a privileged API request to associate the specified bug |
| with the currently selected point (test run). Updates the bug information in "details" and colors of dots |
| in the charts to reflect new states. Because chart data objects aren't real Ember objects for performance |
| reasons, we have to use a dirty hack of modifying a dummy counter bugsChangeCount. |
| (App.PaneController.actions.toggleSearchPane): Renamed from toggleSearch. Also hides the bugs pane when |
| showing the search pane. |
| (App.PaneController.actions.rangeChanged): Takes all selected points as the second argument instead of |
| taking start and end points as the second and the third arguments so that _showDetails can enumerate all |
| bugs in the selected range. |
| |
| (App.PaneController._detailsChanged): Added. Hide the bugs pane whenever a new point is selected. |
| Also update singlySelectedPoint, which is used by toggleBugsPane and associateBug. |
| (App.PaneController._currentItemChanged): Updated for the _showDetails change. |
| (App.PaneController._showDetails): Takes an array of selected points in place of old arguments. |
| Simplified the code to compute the revision information. Calls _updateBugs to format the associated bugs. |
| (App.PaneController._updateBugs): Sets details.bugTrackers to a dictionary that maps a bug tracker id to |
| a bug tracker proxy with an array of (bugNumber, bugUrl) pairs and also editedBugNumber, which is used by |
| the bugs pane to associate or dissociate a bug number, if exactly one point is selected. |
| |
| (App.InteractiveChartComponent._updateDotsWithBugs): Added. Sets hasBugs class on dots as needed. |
| (App.InteractiveChartComponent._setCurrentSelection): Finds and passes all points in the selected range |
| to selectionChanged action instead of just finding the first and the last points. |
| |
| * public/v2/chart-pane.css: Updated the style. |
| |
| * public/v2/data.js: |
| (PrivilegedAPI): Added. A wrapper for privileged APIs' CSRF tokens. |
| (PrivilegedAPI.sendRequest): Makes a privileged API call. Fetches a new CSRF token if needed. |
| (PrivilegedAPI._generateTokenInServerIfNeeded): Makes a request to privileged-api/generate-csrf-token if |
| we haven't already obtained a CSRF token or if the token has already been expired. |
| (PrivilegedAPI._post): Makes a single POST request to /privileged-api/* with a JSON payload. |
| |
| (Measurement.prototype.bugs): Added. |
| (Measurement.prototype.hasBugs): Returns true iff bugs has more than one bug number. |
| (Measurement.prototype.associateBug): Associates a bug with a test run via privileged-api/associate-bug. |
| |
| * public/v2/index.html: Added the bugs pane. Also added a list of bugs associated with the current run in |
| the details. |
| |
| * public/v2/manifest.js: |
| (App.BugTracker.bugUrl): |
| (App.BugTracker.newBugUrl): Added. |
| (App.BugTracker.repositories): Added. This was a missing back reference to repositories. |
| (App.MetricSerializer.normalizePayload): Now parses/loads the list of bug trackers from the manifest. |
| (App.Manifest.repositoriesWithReportedCommits): Now initialized to an empty array instead of null. |
| (App.Manifest.bugTrackers): Added. |
| (App.Manifest._fetchedManifest): Sets App.Manifest.bugTrackers. Also sorts the list of repositories by |
| their respective ids to make the ordering stable. |
| |
| 2014-10-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove unused jobs table |
| https://bugs.webkit.org/show_bug.cgi?id=137724 |
| |
| Reviewed by Daniel Bates. |
| |
| Removed jobs table in the database as well as related code. |
| |
| * init-database.sql: |
| * public/admin/jobs.php: Removed. |
| * public/admin/tests.php: |
| * public/include/admin-header.php: |
| |
| 2014-10-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard should have an ability to search commits by a keyword |
| https://bugs.webkit.org/show_bug.cgi?id=137675 |
| |
| Reviewed by Geoffrey Garen. |
| |
| /api/commits/ now accepts query parameters to search a commit by a keyword. Its output format changed to |
| include "authorEmail" and "authorName" directly as columns instead of including an "author" object. |
| This API change allows fetch_commits_between to generate results without processing Postgres query results. |
| |
| In the front end side, we've added a search pane in pane controller, and the interactive chart component |
| now has a concept of highlighted items which is used to indicate commits found by the search pane. |
| |
| * public/api/commits.php: |
| (main): Extract query parameters: keyword, from, and to and use that to fetch appropriate commits. |
| (fetch_commits_between): Moved some code from main. Now takes a search term as the third argument. |
| We look for a commit if its author name or email contains the keyword or if its revision matches the keyword. |
| (format_commit): Renamed from format_commits. Now only formats one commit. |
| |
| * public/include/db.php: |
| (Database::query_and_fetch_all): Now returns array() when the query results is empty (instead of false). |
| |
| * public/v2/app.css: Renamed .close-button to .icon-button since it's used by a search button as well. |
| |
| * public/v2/app.js: |
| (App.Pane.searchCommit): Added. Finds the commits by a search term and assigns 'highlightedItems', |
| which is a hash table that contains highlighted items' measurements' ids as keys. |
| (App.PaneController.actions.toggleSearch): Toggles the visibility of the search pane. Also sets |
| the default commit repository. |
| (App.PaneController.actions.searchCommit): Delegates the work to App.Pane.searchCommit. |
| (App.InteractiveChartComponent._constructGraphIfPossible): Fixed a bug that we weren't removing old this._dots. |
| Added the code to initialize this._highlights. |
| (App.InteractiveChartComponent._updateDimensionsIfNeeded): Updates dimensions of highlight lines. |
| (App.InteractiveChartComponent._updateHighlightPositions): Added. Ditto. |
| (App.InteractiveChartComponent._highlightedItemsChanged): Adds vertical lines for highlighted items and deletes |
| the existing lines for the old highlighted items. |
| (App.CommitsViewerComponent.commitsChanged): Updated the code per JSON API change mentioned above. |
| Also fixed a bug that the code tries to update the commits viewer even if the viewer had already been destroyed. |
| |
| * public/v2/chart-pane.css: Added style for the search pane and the search button. |
| |
| * public/v2/data.js: Turned FetchCommitsForTimeRange into a class: CommitLogs. |
| (CommitLogs): Added. |
| (CommitLogs.fetchForTimeRange): Renamed from FetchCommitsForTimeRange. Takes a search term as an argument. |
| (CommitLogs._cachedCommitsBetween): Extracted from FetchCommitsForTimeRange. |
| (CommitLogs._cacheConsecutiveCommits): Ditto. |
| (FetchCommitsForTimeRange._cachedCommitsByRepository): Deleted. |
| (Measurement.prototype.commitTimeForRepository): Extracted from formattedRevisions. |
| (Measurement.prototype.formattedRevisions): Uses formattedRevisions. Deleted the unused code for commitTime. |
| |
| * public/v2/index.html: Added the search pane and the search button. Also removed the unused attribute binding |
| for showingDetails since this property is no longer used. |
| |
| * public/v2/manifest.js: |
| (App.Manifest.repositories): Added. |
| (App.Manifest.repositoriesWithReportedCommits): Ditto. Used by App.PaneController.actions.toggleSearch to find |
| the default repository to search. |
| (App.Manifest._fetchedManifest): Populates repositories and repositoriesWithReportedCommits. |
| |
| 2014-10-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix after r174555. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::generate): Assign an empty array to $repositories_with_commit when there are no commits. |
| * tests/admin-regenerate-manifest.js: Fixed the test case. |
| |
| 2014-10-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| New perf dashboard UI tries to fetch commits all the time |
| https://bugs.webkit.org/show_bug.cgi?id=137592 |
| |
| Reviewed by Andreas Kling. |
| |
| Added hasReportedCommits boolean to repository meta data in manifest.json, and used that in |
| the front end to avoid issuing HTTP requests to fetch commit logs for repositories with |
| no reported commits as they are all going to fail. |
| |
| Also added an internal cache to FetchCommitsForTimeRange in the front end to avoid fetching |
| the same commit logs repeatedly. There are two data structures we cache: commitsByRevision |
| which maps a given commit revision/hash to a commit object; and commitsByTime which is an array |
| of commits sorted chronologically by time. |
| |
| * public/include/manifest.php: |
| |
| * public/v2/app.js: |
| (App.CommitsViewerComponent.commitsChanged): |
| |
| * public/v2/data.js: |
| (FetchCommitsForTimeRange): |
| (FetchCommitsForTimeRange._cachedCommitsByRepository): |
| |
| * public/v2/manifest.js: |
| (App.Repository): |
| |
| 2014-10-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another unreviewed build fix after r174477. |
| |
| Don't try to insert a duplicated row into build_commits as it results in a database constraint error. |
| |
| This has been caught by a test in /api/report. I don't know why I thought all tests were passing. |
| |
| * public/include/report-processor.php: |
| |
| 2014-10-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix after r174477. |
| |
| * init-database.sql: Removed build_commits_index since it's redundant with build_commit's primary key. |
| Also fixed a syntax error that we were missing "," after line that declared build_commit column. |
| |
| * public/api/runs.php: Fixed the query so that test_runs without commits data will be retrieved. |
| This is necessary for baseline and target values manually added via admin pages. |
| |
| 2014-10-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add v2 UI for the perf dashboard |
| https://bugs.webkit.org/show_bug.cgi?id=137537 |
| |
| Rubber-stamped by Andreas Kling. |
| |
| * public/v2: Added. |
| * public/v2/app.css: Added. |
| * public/v2/app.js: Added. |
| * public/v2/chart-pane.css: Added. |
| * public/v2/data.js: Added. |
| * public/v2/index.html: Added. |
| * public/v2/js: Added. |
| * public/v2/js/d3: Added. |
| * public/v2/js/d3/LICENSE: Added. |
| * public/v2/js/d3/d3.js: Added. |
| * public/v2/js/d3/d3.min.js: Added. |
| * public/v2/js/ember-data.js: Added. |
| * public/v2/js/ember.js: Added. |
| * public/v2/js/handlebars.js: Added. |
| * public/v2/js/jquery.min.js: Added. |
| * public/v2/js/statistics.js: Added. |
| * public/v2/manifest.js: Added. |
| * public/v2/popup.js: Added. |
| |
| 2014-10-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove superfluously duplicated code in public/api/report-commits.php. |
| |
| 2014-10-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard should store commit logs |
| https://bugs.webkit.org/show_bug.cgi?id=137510 |
| |
| Reviewed by Darin Adler. |
| |
| For the v2 version of the perf dashboard, we would like to be able to see commit logs in the dashboard itself. |
| |
| This patch replaces "build_revisions" table with "commits" and "build_commits" relations to store commit logs, |
| and add JSON APIs to report and retrieve them. It also adds a tools/pull-svn.py to pull commit logs from |
| a subversion directory. The git version of this script will be added in a follow up patch. |
| |
| |
| In the new database schema, each revision in each repository is represented by exactly one row in "commits" |
| instead of one row for each build in "build_revisions". "commits" and "builds" now have a proper many-to-many |
| relationship via "build_commits" relations. |
| |
| In order to migrate an existing instance of this application, run the following SQL commands: |
| |
| BEGIN; |
| |
| INSERT INTO commits (commit_repository, commit_revision, commit_time) |
| (SELECT DISTINCT ON (revision_repository, revision_value) |
| revision_repository, revision_value, revision_time FROM build_revisions); |
| |
| INSERT INTO build_commits (commit_build, build_commit) SELECT revision_build, commit_id |
| FROM commits, build_revisions |
| WHERE commit_repository = revision_repository AND commit_revision = revision_value; |
| |
| DROP TABLE build_revisions; |
| |
| COMMIT; |
| |
| |
| The helper script to submit commit logs can be used as follows: |
| |
| python ./tools/pull-svn.py "WebKit" https://svn.webkit.org/repository/webkit/ https://perf.webkit.org |
| feeder-slave feeder-slave-password 60 "webkit-patch find-users" |
| |
| The above command will pull the subversion server at https://svn.webkit.org/repository/webkit/ every 60 seconds |
| to retrieve at most 10 commits, and submits the results to https://perf.webkit.org using "feeder-slave" and |
| "feeder-slave-password" as the builder name and the builder password respectively. |
| |
| The last, optional, argument is the shell command to convert a subversion account to the corresponding username. |
| e.g. "webkit-patch find-users rniwa@webkit.org" yields "Ryosuke Niwa" <rniwa@webkit.org> in the stdout. |
| |
| |
| * init-database.sql: Replaced "build_revisions" relation with "commits" and "build_commits" relations. |
| |
| * public/api/commits.php: Added. Retrieves a list of commits based on arguments in its path of the form |
| /api/commits/<repository-name>/<filter>. The behavior of this API depends on <filter> as follows: |
| |
| - Not specified - It returns every single commit for a given repository. |
| - Matches "oldest" - It returns the commit with the oldest timestamp. |
| - Matches "latest" - It returns the commit with the latest timestamp. |
| - Matches "last-reported" - It returns the commit with the latest timestamp added via report-commits.php. |
| - Is entirely alphanumeric - It returns the commit whose revision matches the filter. |
| - Is of the form <alphanumeric>:<alphanumeric> or <alphanumeric>-<alphanumeric> - It retrieves the list |
| of commits added via report-commits.php between two timestamps retrieved from commits whose revisions |
| match the two alphanumeric values specified. Because it retrieves commits based on their timestamps, |
| the list may contain commits that do not appear as neither hash's ancestor in git/mercurial. |
| (main): |
| (commit_from_revision): |
| (fetch_commits_between): |
| (format_commits): |
| |
| * public/api/report-commits.php: Added. A JSON API to report new subversion, git, or mercurial commits. |
| See tests/api-report-commits.js for examples on how to use this API. |
| |
| * public/api/runs.php: Updated the query to use "commit_builds" and "commits" relations instead of |
| "build_revisions". Regrettably, the new query is 20% slower but I'm going to wait until the new UI is ready |
| to optimize this and other JSON APIs. |
| |
| * public/include/db.php: |
| (Database::select_or_insert_row): |
| (Database::update_or_insert_row): Added. |
| (Database::_select_update_or_insert_row): Extracted from select_or_insert_row. Try to update first and then |
| insert if the update fails for update_or_insert_row. Preserves the old behavior when $should_update is false. |
| |
| (Database::select_first_row): |
| (Database::select_last_row): Added. |
| (Database::select_first_or_last_row): Extracted from select_first_row. Fixed a bug that we were asserting |
| $order_by to be not alphanumeric/underscore. Retrieve the last row instead of the first if $descending_order. |
| |
| * public/include/report-processor.php: |
| (ReportProcessor::resolve_build_id): Store commits instead of build_revisions. We don't worry about the race |
| condition for adding "build_commits" rows since we shouldn't have a single tester submitting the same result |
| concurrently. Even if it happened, it will only result in a PHP error and the database will stay consistent. |
| |
| * run-tests.js: |
| (pathToTests): Don't call path.resolve with "undefined" testName; It throws an exception in the latest node.js. |
| |
| * tests/api-report-commits.js: Added. |
| * tests/api-report.js: Fixed a test per build_revisions to build_commits/commits replacement. |
| |
| * tools: Added. |
| * tools/pull-svn.py: Added. See above for how to use this script. |
| (main): |
| (determine_first_revision_to_fetch): |
| (fetch_revision_from_dasbhoard): |
| (fetch_commit_and_resolve_author): |
| (fetch_commit): |
| (textContent): |
| (resolve_author_name_from_email): |
| (submit_commits): |
| |
| 2014-09-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update Install.md for Mavericks and fix typos |
| https://bugs.webkit.org/show_bug.cgi?id=137276 |
| |
| Reviewed by Benjamin Poulain. |
| |
| Add the instruction to copy php.ini to enable the Postgres extension in PHP. |
| |
| Also use perf.webkit.org as the directory name instead of WebKitPerfMonitor. |
| |
| Finally, init-database.sql is no longer located inside database directory. |
| |
| * Install.md: |
| |
| 2014-08-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Report run id's in api/runs.php for the new dashboard UI |
| https://bugs.webkit.org/show_bug.cgi?id=135813 |
| |
| Reviewed by Andreas Kling. |
| |
| Include run_id in the generated JSON. |
| |
| * public/api/runs.php: |
| (fetch_runs_for_config): Don't sort results by time since that has been done in the front end for ages now. |
| (format_run): |
| |
| 2014-08-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Merging platforms mixes baselines and targets into reported data |
| https://bugs.webkit.org/show_bug.cgi?id=135260 |
| |
| Reviewed by Andreas Kling. |
| |
| When merging two platforms, move test configurations of a different type (baseline, target) |
| as well as of different metric (Time, Runs). |
| |
| Also avoid fetching the entire table of runs just to see if there are no remaining runs. |
| It's sufficient to detect one such test_runs object. |
| |
| * public/admin/platforms.php: |
| (merge_platforms): |
| |
| 2014-07-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Merging platforms mixes baselines and targets into reported data |
| https://bugs.webkit.org/show_bug.cgi?id=135260 |
| |
| Reviewed by Geoffrey Garen. |
| |
| Make sure two test configurations we're merging are of the same type (e.g. baseline, target, current). |
| Otherwise, we'll erroneously mix up runs for baseline, target, and current (reported values). |
| |
| * public/admin/platforms.php: |
| |
| 2014-07-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r171361. |
| |
| * public/js/helper-classes.js: |
| (.this.formattedBuildTime): |
| |
| 2014-07-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard spends 2s processing JSON data during the page loads |
| https://bugs.webkit.org/show_bug.cgi?id=135152 |
| |
| Reviewed by Andreas Kling. |
| |
| In the Apple internal dashboard, we were spending as much as 2 seconds |
| converting raw JSON data into proper JS objects while loading the dashboard. |
| |
| This caused the apparent unresponsiveness of the dashboard despite of the fact |
| charts themselves updated almost instantaneously. |
| |
| * public/index.html: |
| * public/js/helper-classes.js: |
| (TestBuild): Compute the return values of formattedTime and formattedBuildTime |
| lazily as creating new Date objects and running string replace is expensive. |
| (TestBuild.formattedTime): |
| (TestBuild.formattedBuildTime): |
| (PerfTestRuns.setResults): Added. Pushing each result was the biggest bottle neck. |
| (PerfTestRuns.addResult): Deleted. |
| |
| 2014-07-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Perf dashboard shouldn't show the full git hash |
| https://bugs.webkit.org/show_bug.cgi?id=135083 |
| |
| Reviewed by Benjamin Poulain. |
| |
| Detect Git/Mercurial hash by checking the length. |
| |
| If it's a hash, use the first 8 characters in the label |
| while retaining the full length to be used in hyperlinks. |
| |
| * public/js/helper-classes.js: |
| (.this.formattedRevisions): |
| (TestBuild): |
| |
| 2014-05-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add an instruction on how to backup the database. |
| https://bugs.webkit.org/show_bug.cgi?id=133391 |
| |
| Rubber-stamped by Andreas Kling. |
| |
| * Install.md: |
| |
| 2014-04-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r166479. 'bytes' is now abbreviated as 'B'. |
| |
| * public/js/helper-classes.js: |
| (PerfTestRuns.smallerIsBetter): |
| |
| 2014-04-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Some CSS teaks. |
| |
| * public/common.css: |
| (#title): |
| * public/index.html: |
| (#charts .pane): |
| (#charts .arrow): |
| |
| 2014-04-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| WebKitPerfMonitor: There should be a way to add all metrics of a suite without also adding subtests |
| https://bugs.webkit.org/show_bug.cgi?id=131157 |
| |
| Reviewed by Andreas Kling. |
| |
| Split "all metrics" into all metrics of a test suite and all subtests of the suite. |
| This allows, for example, adding all metrics such as Arithmetic and Geometric for |
| a given test suite without also adding its subtests. |
| |
| * public/index.html: |
| (init.showCharts): |
| (init): |
| |
| 2014-04-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| WebKitPerfMonitor: Tooltips cannot be pinned after using browser's back button |
| https://bugs.webkit.org/show_bug.cgi?id=131155 |
| |
| Reviewed by Andreas Kling. |
| |
| The bug was caused by Chart.attach binding event listeners on plot container on each call. |
| This resulted in the click event handler toggling the visiblity of the tooltip twice upon |
| click when attach() has been called even number of times, keeping the tooltip invisible. |
| |
| Fixed the bug by extracting the code to bind event listeners outside of Chart.attach as |
| a separate function, bindPlotEventHandlers, and calling it exactly once when Chart.attach |
| is called for the first time. |
| |
| * public/index.html: |
| (Chart.attach): |
| (Chart..bindPlotEventHandlers): |
| |
| 2014-04-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| WebKitPerfMonitor: Tooltips can be cut off at the top |
| https://bugs.webkit.org/show_bug.cgi?id=130960 |
| |
| Reviewed by Andreas Kling. |
| |
| * public/common.css: |
| (#title): Removed the gradients, box shadows, and border from the header. |
| (#title h1): Reduce the font size. |
| (#title ul): Use line-height to vertically align the navigation bar instead of specifying a padding atop. |
| * public/index.html: |
| (.tooltop:before): Added. Identical to .tooltop:after except it's upside down (arrow facing up). |
| (.tooltip.inverted:before): Show the arrow facing up when .inverted is set. |
| (.tooltip.inverted:before): Hide the arrow facing down when .inverted is set. |
| * public/js/helper-classes.js: |
| (Tooltip.show): Show the tooltip below the point if placing it above the point results in the top of the |
| tooltip extending above y=0. |
| |
| 2014-04-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| WebKitPerfMonitor: Y-axis adjustment is too aggressive |
| https://bugs.webkit.org/show_bug.cgi?id=130937 |
| |
| Reviewed by Andreas Kling. |
| |
| Previously, adjusted min. and max. were defined as the two standards deviations away from EWMA of measured |
| results. This had two major problems: |
| 1. Two standard deviations can be too small to show the confidence interval for results. |
| 2. Sometimes baseline and target can be more than two standards deviations away. |
| |
| Fixed the bug by completely rewriting the algorithm to compute the interval. Instead of blindly using two |
| standard deviations as margins, we keep adding quarter the standard deviation on each side until more than 90% |
| of points lie in the interval or we've expanded 4 standard deviations. Once this condition is met, we reduce |
| the margin on each side separately to reduce the empty space on either side. |
| |
| A more rigorous approach would involve computing least squared value of results with respect to intervals |
| but that seems like an overkill for a simple UI problem; it's also computationally expensive. |
| |
| * public/index.html: |
| (Chart..adjustedIntervalForRun): Extracted from computeYAxisBoundsToFitLines. |
| (Chart..computeYAxisBoundsToFitLines): Compute the min. and max. adjusted intervals out of adjusted intervals |
| for each runs (current, baseline, and target) so that at least one point from each set of results is shown. |
| We wouldn't see the difference between measured values versus baseline and target values otherwise. |
| * public/js/helper-classes.js: |
| (PerfTestResult.unscaledConfidenceIntervalDelta): Returns the default value if the confidence |
| interval delta cannot be computed. |
| (PerfTestResult.isInUnscaledInterval): Added. Returns true iff the confidence intervals lies |
| within the given interval. |
| (PerfTestRuns..filteredResults): Extracted from unscaledMeansForAllResults now that PerfTestRuns.min and |
| PerfTestRuns.max need to use both mean and confidence interval delta for each result. |
| (PerfTestRuns..unscaledMeansForAllResults): |
| (PerfTestRuns.min): Take the confidence interval delta into account. |
| (PerfTestRuns.max): Ditto. |
| (PerfTestRuns.countResults): Returns the number of results in the given time frame (> minTime). |
| (PerfTestRuns.countResultsInInterval): Returns the number of results whose confidence interval lie within the |
| given interval. |
| (PerfTestRuns.exponentialMovingArithmeticMean): Fixed the typo so that it actually computes the EWMA. |
| |
| 2014-03-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Some CSS tweaks after r166477 and r166479, |
| |
| * public/index.html: |
| |
| 2014-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| WebKitPerfMonitor: Sometimes text inside panes overlap |
| https://bugs.webkit.org/show_bug.cgi?id=130956 |
| |
| Reviewed by Gyuyoung Kim. |
| |
| Revamped the pane UI. Now build info uses table element instead of plane text with BRs. The computed status of |
| the latest result against baseline/target such as "3% until target" is now shown above the current value. This |
| reduces the total height of the pane and fits more information per screen capita on the dashboard. |
| |
| * public/index.html: Updated and added a bunch of CSS rules for the new look. |
| (.computeStatus): Don't append the build info here. The build info is constructed as a separate table now. |
| (.createSummaryRowMarkup): Use th instead of td for "Current", "Baseline", and "Target" in the summary table. |
| (.buildLabelWithLinks): Construct table rows instead of br separated lines of text. This streamlines the look |
| of the build info shown in a chart pane and a tooltip. |
| (Chart): Made .status a table. |
| (Chart.populate): Prepend status.text, which contains text such as "3% until target", into the summary rows |
| right above "Current" value, and populate .status with buildLabelWithLinks manually instead of status.text |
| now that status.text no longer contains it. |
| (Chart..showTooltipWithResults): Wrap buildLabelWithLinks with a table element. |
| |
| * public/js/helper-classes.js: |
| (TestBuild.formattedRevisions): Don't include repository names in labels since repository names are now added |
| by buildLabelWithLinks inside th elements. Also place spaces around '-' between two different OS X versions. |
| e.g. "OS X 10.8 - OS X 10.9" instead of "OS X 10.8-OS X 10.9". |
| (PerfTestRuns): Use "/s" for "runs/s" and "B" for "bytes" to make text shorter in .status and .summaryTable. |
| (PerfTestRuns..computeScalingFactorIfNeeded): Avoid placing a space between 'M' and a unit starting with a |
| capital letter; e.g. "MB" instead of "M B". |
| |
| 2014-03-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| WebKitPerfMonitor: Header and number-of-days slider takes up too much space |
| https://bugs.webkit.org/show_bug.cgi?id=130957 |
| |
| Reviewed by Gyuyoung Kim. |
| |
| Moved the slider into the header. Also reduced the spacing between the header and platform names. |
| This reclaims 50px × width of the screen real estate. |
| |
| * public/common.css: |
| (#title): Reduced the space below the header from 20px to 10px. |
| * public/index.html: |
| (#numberOfDaysPicker): Removed the rounded border around the number-of-days slider. |
| (#dashboard > tbody > tr > td): Added a 1.5em padding at the bottom. |
| (#dashboard > thead th): That allows us to remove the padding at the top here. This reduces the wasted screen |
| real estate between the header and the platform names. |
| |
| 2014-03-10 Zoltan Horvath <zoltan@webkit.org> |
| |
| Update the install guidelines for perf.webkit.org |
| https://bugs.webkit.org/show_bug.cgi?id=129895 |
| |
| Reviewed by Ryosuke Niwa. |
| |
| The current install guideline for perf.webkit.org discourages the use of the installed |
| Server application. I've actualized the documentation for Mavericks, and modified the |
| guideline to include the instructions for Server.app also. |
| |
| * Install.md: |
| |
| 2014-03-08 Zoltan Horvath <zoltan@webkit.org> |
| |
| Update perf.webkit.org json example |
| https://bugs.webkit.org/show_bug.cgi?id=129907 |
| |
| Reviewed by Andreas Kling. |
| |
| The current example is not valid json syntax. I fixed the syntax errors and indented the code properly. |
| |
| * ReadMe.md: |
| |
| 2014-01-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Merge database-common.js and utility.js into run-tests.js. |
| |
| Reviewed by Matthew Hanson. |
| |
| Now that run-tests is the only node.js script, merged database-common.js and utility.js into it. |
| Also moved init-database.sql out of the database directory and removed the directory entirely. |
| |
| * database: Removed. |
| * database/database-common.js: Removed. |
| * database/utility.js: Removed. |
| * init-database.sql: Moved from database/init-database.sql. |
| * run-tests.js: |
| (connect): Moved from database-common.js. |
| (pathToDatabseSQL): Extracted from pathToLocalScript. |
| (pathToTests): Moved from database-common.js. |
| (config): Ditto. |
| (TaskQueue): Ditto. |
| (SerializedTaskQueue): Ditto. |
| (main): |
| (initializeDatabase): |
| (TestEnvironment.it): |
| (TestEnvironment.queryAndFetchAll): |
| (sendHttpRequest): |
| |
| 2014-01-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove the dependency on node.js from the production code. |
| |
| Reviewed by Ricky Mondello. |
| |
| Work towards <rdar://problem/15955053> Upstream SafariPerfMonitor. |
| |
| Removed node.js dependency from TestRunsGenerator. It was really a design mistake to invoke node.js from php. |
| It added so much complexity with only theoretical extensibility of adding aggregators. It turns out that |
| many aggregators we'd like to add are a lot more complicated than ones that could be written under the current |
| infrastructure, and we need to make the other aspects (e.g. the level of aggregations) a lot more extensible. |
| Removing and simplifying TestRunsGenerator allows us to implement such extensions in the future. |
| |
| Also removed the js files that are no longer used. |
| |
| * config.json: Moved from database/config.json. |
| * database/aggregate.js: Removed. No longer used. |
| * database/database-common.js: Removed unused functions, and updated the path to config.json. |
| * database/process-jobs.js: Removed. No longer used. |
| * database/sample-data.sql: Removed. We have a much better corpus of data now. |
| * database/schema.graffle: Removed. It's completely obsolete. |
| * public/include/db.php: Updated the path to config.json. |
| * public/include/evaluator.js: Removed. |
| |
| * public/include/report-processor.php: |
| (TestRunsGenerator::aggregate): Directly aggregate values via newly added aggregate_values method instead of |
| storing values into $expressions and calling evaluate_expressions_by_node. |
| (TestRunsGenerator::aggregate_values): Added. |
| (TestRunsGenerator::compute_caches): Directly compute the caches. |
| |
| 2014-01-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Don't fail the platform merges even if there are no test configurations to be moved to the new platform. |
| |
| * public/admin/platforms.php: |
| * public/include/db.php: |
| |
| 2014-01-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Zoomed y-axis view is ununsable when the last result is an outlier. |
| |
| Reviewed by Stephanie Lewis. |
| |
| Show two standard deviations from the exponential moving average with alpha = 0.3 instead of the mean of |
| the last result so that the graph looks sane if the last result was an outlier. However, always show |
| the last result's mean even if it was an outlier. |
| |
| * public/index.html: |
| * public/js/helper-classes.js: |
| (unscaledMeansForAllResults): Extracted from min/max/sampleStandardDeviation. |
| Also added the ability to cache the unscaled means to avoid recomputation. |
| (PerfTestRuns.min): Refactored to use unscaledMeansForAllResults. |
| (PerfTestRuns.max): Ditto. |
| (PerfTestRuns.sampleStandardDeviation): Ditto. |
| (PerfTestRuns.exponentialMovingArithmeticMean): Added. |
| |
| 2014-01-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Minor fixes. |
| |
| * public/admin/tests.php: |
| * public/js/helper-classes.js: |
| |
| 2014-01-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Use two standard deviations instead as I mentioned in the mailing list. |
| |
| * public/index.html: |
| |
| 2014-01-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| The performance dashboard erroneously shows upward arrow for combined metrics. |
| |
| A single outlier can ruin the zoomed y-axis view. |
| |
| Rubber-stamped by Antti Koivisto. |
| |
| * public/index.html: |
| (computeYAxisBoundsToFitLines): Added adjustedMax and adjustedMin, which are pegged at 4 standard deviations |
| from the latest results' mean. |
| (Chart): Renamed shouldStartYAxisAtZero to shouldShowEntireYAxis. |
| (Chart.attachMainPlot): Use the adjusted max and min when we're not showing the entire y-axis. |
| (Chart.toggleYAxis): |
| * public/js/helper-classes.js: |
| (PerfTestRuns.sampleStandardDeviation): Added. |
| (PerfTestRuns.smallerIsBetter): 'Combined' is a smaller is better metric. |
| |
| 2014-01-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Don't include the confidence interval when computing the y-axis. |
| |
| Rubber-stamped by Simon Fraser. |
| |
| * public/js/helper-classes.js: |
| (PerfTestRuns.min): |
| (PerfTestRuns.max): |
| |
| 2014-01-25 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Tiny CSS tweak for tooltips. |
| |
| * public/index.html: |
| |
| 2014-01-25 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove the erroneously repeated code. |
| |
| * public/admin/test-configurations.php: |
| |
| 2014-01-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/15704893> perf dashboard should show baseline numbers |
| |
| Reviewed by Stephanie Lewis. |
| |
| * public/admin/bug-trackers.php: |
| (associated_repositories): Return an array of HTMLs instead of echo'ing as expected by AdministrativePage. |
| Also fixed a typo. |
| |
| * public/admin/platforms.php: |
| (merge_list): Ditto. |
| |
| * public/admin/test-configurations.php: Added. |
| (add_run): Adds a "synthetic" test run and a corresponding build. It doesn't create run_iterations and |
| build_revisions as they're not meaningful for baseline / target numbers. |
| (delete_run): Deletes a synthetic test run and its build. It verifies that the specified build has exactly |
| one test run so that we don't accidentally delete a reported test run. |
| (generate_rows_for_configurations): Generates rows of configuration IDs and types. |
| (generate_rows_for_test_runs): Ditto for test runs. It also emits the form to add new "synthetic" test runs |
| and delete existing ones. |
| |
| * public/admin/tests.php: We wrongfully assumed there is exactly one test configuration for each metric |
| on each platform; there could be configurations of distinct types such as "current" and "baseline". |
| Thus, update all test configurations for a given metric when updating config_is_in_dashboard. |
| |
| * public/api/runs.php: Remove the NotImplemented when we have multiple test configurations. |
| (fetch_runs_for_config): "Synthetic" test runs created on test-configurations page are missing revision |
| data so we need to left-outer-join (instead of inner-join) build_revisions. To avoid making the query |
| unreadable, don't join revision_repository here. Instead, fetch the list of repositories upfront and |
| resolve names in parse_revisions_array. This actually reduces the query time by ~10%. |
| |
| (parse_revisions_array): Skip an empty array created for "synthetic" test runs. |
| |
| * public/include/admin-header.php: |
| (AdministrativePage::render_table): Now custom columns support sub columns. e.g. a configuration column may |
| have id and type sub columns, and each custom column could generate multiple rows. |
| |
| Any table with sub columns now generates two rows for thead. We generate td's in in the first row without |
| sub columns with rowspan of 2, and generate ones with sub columns with colspan set to the sub column count. |
| We then proceed to generate the second header row with sub column names. |
| |
| When generating the actual content, we first generate all custom columns as they may have multiple rows in |
| which case regular columns need rowspan set to the maximum number of rows. |
| |
| Once we've generated the first row, we proceed to generate subsequent rows for those custom columns that |
| have multiple rows. |
| |
| (AdministrativePage::render_custom_cells): Added. This function is responsible for generating table cells |
| for a given row in a given custom column. It generates an empty td when the custom column doesn't have |
| enough rows. It also generates empty an td when it doesn't have enough columns in some rows except when |
| the entire row consists of exactly one cell for a custom column with sub columns, in which case the cell is |
| expanded to occupy all sub columns. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::platforms): Don't add the metric more than once. |
| |
| * public/include/test-name-resolver.php: |
| (TestNameResolver::__construct): We had wrongfully assumed that we have exactly one test configuration on |
| each platform for each metric like tests.php. Fixed that. Also fetch the list of aggregators to compute the |
| full metric name later. |
| (TestNameResolver::map_metrics_to_tests): Populate $this->id_to_metric. |
| (TestNameResolver::test_id_for_full_name): Simplified the code using array_get. |
| (TestNameResolver::full_name_for_test): Added. |
| (TestNameResolver::full_name_for_metric): Added. |
| (TestNameResolver::configurations_for_metric_and_platform): Renamed as it returns multiple configurations. |
| |
| * public/js/helper-classes.js: |
| (TestBuild): Use the build time as the maximum time when revision information is missing for "synthetic" |
| test runs created to set baseline and target points. |
| |
| 2014-01-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix after r57928. Removed a superfluous close parenthesis. |
| |
| * public/api/runs.php: |
| |
| 2014-01-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build & typo fixes. |
| |
| * public/admin/platforms.php: |
| * tests/admin-platforms.js: |
| |
| 2014-01-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/15704893> perf dashboard should show baseline numbers |
| |
| Rubber-stamped by Antti Koivisto. |
| |
| Organize some code into functions in runs.php. |
| |
| Also added back $paths that was erroneously removed in r57925 from json-header.php. |
| |
| * public/api/runs.php: |
| (fetch_runs_for_config): Extracted. |
| (format_run): Ditto. |
| |
| 2014-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Merge the upstream json-shared.php as of https://trac.webkit.org/r162693. |
| |
| * database/config.json: |
| * public/admin/reprocess-report.php: |
| * public/api/report.php: |
| * public/api/runs.php: |
| * public/include/json-header.php: |
| |
| 2014-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit yet another forgotten change. |
| |
| Something went horribly wrong with my merge :( |
| |
| * database/init-database.sql: |
| |
| 2014-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit one more forgotten change. Sorry for making a mess here. |
| |
| 2014-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit the forgotten files. |
| |
| * public/admin/platforms.php: Added. |
| * tests/admin-platforms.js: Added. |
| |
| 2014-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/15889905> SafariPerfMonitor: there should be a way to merge and hide platforms |
| |
| Reviewed by Stephanie Lewis. |
| |
| Added /admin/platforms/ page to hide and merge platforms. |
| |
| Merging two platforms is tricky because we need to migrate test runs as well as some test configurations. |
| Recall that each test (e.g. Dromaeo) can have many "test metrics" (e.g. MaxAllocations, EndAllocations), |
| and they have a distinct "test configuration" for each platform (e.g. MaxAllocation on Mountain Lion), and |
| each test configuration a distinct "test run" for each build. |
| |
| In order to merge platform A into platform B, we must migrate all test runs that belong to platform A via |
| their test configurations into platform B. |
| |
| Suppose we're migrating a test run R for test configuration T_A in platform A for metric M. Since M exists |
| independent of platforms, R should continue to relate to M through some test configuration. Unfortunately, |
| we can't simply move T_A into platform B since we may already have a test configuration T_B for metric M |
| in platform B, in which case R should relate to T_B instead. |
| |
| Thus, we first migrate all test runs for which we already have corresponding test configurations in the |
| new platform. We then migrate the test configurations of the remaining test runs. |
| |
| * database/init-database.sql: Added platform_hidden. |
| |
| * public/admin/platforms.php: Added. |
| (merge_platforms): Added. Implements the algorithm described above. |
| (merge_list): Added. |
| |
| * public/admin/tests.php: Disable the checkbox to show a test configuration on the dashboard if its platform |
| is hidden since it doesn't do anything. |
| |
| * public/include/admin-header.php: Added the hyperlink to /admin/platforms. |
| (update_field): Don't bail out if the newly added "update-column" is set to the field name even if $_POST is |
| missing it since unchecked checkbox doesn't set the value in $_POST. |
| (AdministrativePage::render_form_control_for_column): Added the support for boolean edit mode. Also used |
| switch statement instead of repeated if's. |
| (AdministrativePage::render_table): Emit "update-column" for update_field. |
| |
| * public/include/db.php: Disable warnings when we're not in the debug mode. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::platforms): Skip platforms that have been hidden. |
| |
| * run-tests.js: |
| (TestEnvironment.postJSON): |
| (TestEnvironment.httpGet): |
| (TestEnvironment.httpPost): Added. |
| (sendHttpRequest): Set the content type if specified. |
| |
| * tests/admin-platforms.js: Added tests. |
| |
| 2014-01-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Extract the code to compute full test names from tests.php. |
| |
| Reviewed by Stephanie Lewis. |
| |
| Extracted TestNameResolver out of tests.php. This reduces the number of global variables in tests.php |
| and paves our way to re-use the code in other pages. |
| |
| * public/admin/tests.php: |
| |
| * public/include/db.php: |
| (array_set_default): Renamed from array_item_set_default and moved from tests.php as it's used in both |
| tests.php and test-name-resolver.php. |
| |
| * public/include/test-name-resolver.php: Added. |
| (TestNameResolver::__construct): |
| (TestNameResolver::compute_full_name): Moved from tests.php. |
| (TestNameResolver::map_metrics_to_tests): Ditto. |
| (TestNameResolver::sort_tests_by_full_name): Ditto. |
| (TestNameResolver::tests): Added. |
| (TestNameResolver::test_id_for_full_name): Ditto. |
| (TestNameResolver::metrics_for_test_id): Ditto. |
| (TestNameResolver::child_metrics_for_test_id): Ditto. |
| (TestNameResolver::configuration_for_metric_and_platform): Ditto. |
| |
| 2014-01-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/15867325> Perf dashboard is erroneously associating reported results with old revisions |
| |
| Reviewed by Stephanie Lewis. |
| |
| Add the ability to reprocess reports so that I can re-associate wrongfully associated reports. |
| |
| Added public/admin/reprocess-report.php. It doesn't have any nice UI to find reports and it returns JSON |
| but that's sufficient to correct the wrongfully processed reports for now. |
| |
| * public/admin/reprocess-report.php: Added. Takes a report id in $_GET or $_POST and process the report. |
| We should eventually add a nice UI to find and reprocess reports. |
| |
| * public/api/report.php: ReportProcessor and TestRunsGenerator have been removed. |
| |
| * public/include/db.php: Added the forgotten call to prefixed_column_names. |
| |
| * public/include/report-processor.php: Copied from public/api/report.php. |
| (ReportProcessor::__construct): Fetch the list of aggregators here for simplicity. |
| (ReportProcessor::process): Optionally takes $existing_report_id. When this value is specified, we don't |
| create a new report or authenticate the builder password (the password is never stored in the report). |
| Also use select_first_row instead of query_and_fetch_all to find the builder for simplicity. |
| (ReportProcessor::construct_build_data): Extracted from store_report_and_get_build_data. |
| (ReportProcessor::store_report): Ditto. |
| |
| * tests/admin-reprocess-report.js: Added. |
| |
| 2014-01-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/15867325> Perf dashboard is erroneously associating reported results with old revisions |
| |
| Reviewed by Ricky Mondello. |
| |
| The bug was caused by a build fix r57645. It attempted to treat multiple reports from the same builder |
| for the same build number as a single build by ignoring build time. This was necessary to associate |
| multiple reports by a single build - e.g. for different performance test suites - because the scripts |
| we use to submit results computed its own "build time" when they're called. |
| |
| An unintended consequence of this change was revealed when we moved a buildbot master to the new machine |
| last week; new reports were wrongfully associated with old build numbers. |
| |
| Fixed the bug by not allowing reports made more than 1 day after the initial build time to be assigned |
| to the same build. Instead, we create a new build object for those reports. Since the longest set of |
| tests we have only take a couple of hours to run, 24 hours should be more than enough. |
| |
| * database/init-database.sql: We can no longer constrain that each build number is unique to a builder |
| or that build number and build time pair is unique. Instead, constrain the uniqueness of the tuple |
| (builder, build number, build time). |
| |
| * public/api/report.php: |
| (ReportProcessor::resolve_build_id): Look for any builds made within the past one day. Create a new build |
| when no such build exists. This prevents a report from being associated with a very old build of the same |
| build number. |
| |
| Also check that revision numbers or hashes match when we're adding revision info. This will let us catch |
| a similar bug in the future sooner. |
| |
| * tests/api-report.js: Added three test cases. |
| |
| 2014-01-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Merged the upstream changes to db.php |
| See http://trac.webkit.org/browser/trunk/Websites/test-results/public/include/db.php |
| |
| * public/include/db.php: |
| |
| 2014-01-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update other scripts and tests per previous patch. |
| |
| * public/include/manifest.php: |
| * tests/admin-regenerate-manifest.js: |
| |
| 2014-01-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Remove metrics_unit. |
| |
| Reviewed by Ricky Mondello. |
| |
| This column is no longer used by the front-end code since r48360. |
| |
| * database/init-database.sql: |
| * public/admin/tests.php: |
| |
| 2014-01-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix. |
| |
| * public/api/report.php: |
| |
| 2014-01-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/15832456> Automate DoYouEvenBench (124497) |
| |
| Reviewed by Ricky Mondello. |
| |
| Support a new alternative format for aggregated results where we have raw values as well as |
| the list aggregators so that instead of |
| "metrics": {"Time": ["Arithmetic"]} |
| we can have |
| "metrics": {"Time": { "aggregators" : ["Arithmetic"], "current": [300, 310, 320, 330] }} |
| |
| This allows single JSON generated by run-perf-tests in WebKit to be shared between the perf |
| dashboard and the generated results page, which doesn't know how to aggregate values. |
| |
| We need to keep the support for the old format because all other existing performance tests |
| all rely on the old format. Even if we updated the tests, we need the dashboard to support |
| the old format during the transition. |
| |
| * public/api/report.php: |
| (ReportProcessor::recursively_ensure_tests): Support the new format in addition to the old one. |
| (ReportProcessor::aggregator_list_if_exists): Replaced is_list_of_aggregators. |
| |
| * tests/api-report.js: Updated one of aggregator test cases to test the new format. |
| |
| 2013-05-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed; Tweak the CSS so that chart panes align vertically. |
| |
| * public/index.html: |
| |
| 2013-05-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor should support Combined metric. |
| |
| * public/js/helper-classes.js: |
| (PerfTestRuns): Added 'Combined' metric. In general, it could be used for smaller-is-better |
| value as well but assume it to be greater-is-better for now. |
| |
| 2013-05-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit the forgotten init-database change to add iteration_relative_time. |
| |
| * database/init-database.sql: |
| |
| 2013-05-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13993069> SafariPerfMonitor: Support accepting (relative time, value) pairs |
| |
| Reviewed by Ricky Mondello. |
| |
| Add the support for each value to have a relative time. This is necessary for frame rate history |
| since a frame rate needs to be associated with a time it was sampled. |
| |
| * database/init-database.sql: Added iteration_relative_time to run_iterations. |
| |
| * public/api/report.php: |
| (TestRunsGenerator::test_value_list_to_values_by_iterations): Reject any non-numeral values here. |
| This code is used to aggregate values but it doesn't make sense to aggregate iteration values |
| with relative time since taking the average of two frame rates for two subtests taken at two |
| different times doesn't make any sense. |
| (TestRunsGenerator::compute_caches): When we encounter an array value while computing sum, mean, |
| etc..., use the second element since we assume values are of the form (relative time, frame rate). |
| Also exit early with an error if the number of elements in the array is not a pair. |
| (TestRunsGenerator::commit): Store the relative time and the frame rate as needed. |
| |
| * tests/api-report.js: Added a test case. Also modified existing test cases to account for |
| iteration_relative_time. |
| |
| 2013-05-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13654488> SafariPerfMonitor: Support accepting single-value results |
| |
| Reviewed by Ricky Mondello. |
| |
| Support that. It's one line change. |
| |
| * public/api/report.php: |
| (ReportProcessor.recursively_ensure_tests): When there is exactly one value, wrap it inside an array |
| to match the convention assumed elsewhere. |
| * tests/api-report.js: Added a test case. |
| |
| 2013-05-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor shows popups for points outside of the visible region. |
| |
| Rubber-stamped by Simon Fraser. |
| |
| * public/index.html: |
| (Chart.closestItemForPageXRespectingPlotOffset): renamed from closestItemForPageX. |
| (Chart.attach): Always use closestItemForPageXRespectingPlotOffset to work around the fact flot |
| may return an item underneath y-axis labels. |
| |
| 2013-05-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Tweak the CSS a little to avoid the test name overlapping with the summary table. |
| |
| * public/index.html: |
| |
| 2013-05-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Fix the typo. The anchor element should wrap the svg element, not the other way around. |
| |
| * public/index.html: |
| |
| 2013-05-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13992266> Should be a toggle to show entire Y-axis range |
| <rdar://problem/13992271> Should scale Y axis to include error ranges |
| |
| Reviewed by Ricky Mondello. |
| |
| Add the feature. Also made adjust y-axis respect confidence interval delta so that the gray shade behind |
| the main graph doesn't go outside the graph even when the y-axis is adjusted. |
| |
| * database/config.json: |
| * public/index.html: |
| (Chart): Add a SVG arrow to toggle y-axis mode, and bind click on the arrow to toggleYAxis(). |
| (Chart.attachMainPlot): Respect shouldStartYAxisAtZero. |
| (Chart.toggleYAxis): Toggle the y-axis mode of this chart by toggling shouldStartYAxisAtZero and calling |
| attachMainPlot. |
| * public/js/helper-classes.js: |
| (PerfTestResult.confidenceIntervalDelta): |
| (PerfTestResult.unscaledConfidenceIntervalDelta): Extracted. |
| (PerfTestRuns.min): Take confidence interval delta into account. |
| (PerfTestRuns.max): Ditto. |
| (PerfTestRuns.hasConfidenceInterval): Not sure why this function was checking the typeof. Just use isNaN. |
| |
| 2013-04-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A build fix of the previous. Don't look for a test with NULL parent because NULL != NULL in our beloved SQL. |
| |
| * public/api/report.php: |
| (ReportProcessor::recursively_ensure_tests): |
| * tests/api-report.js: Added a test. |
| |
| 2013-04-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fixes. |
| |
| * public/api/report.php: |
| (ReportProcessor::process): Explicitly exit with error when builder name or build time is missing. |
| Also, tolerate reports without any revision information. |
| |
| (ReportProcessor::recursively_ensure_tests): When looking for a test, don't forget to compare its |
| parent test. |
| |
| * tests/api-report.js: Added few test cases. |
| |
| 2013-04-26 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit another change that was supposed to be committed in r50331. |
| |
| * run-tests.js: |
| (TestEnvironment.this.postJSON): |
| (TestEnvironment.this.httpGet): |
| (sendHttpRequest): |
| |
| 2013-04-09 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Commit the remaining files. |
| |
| * public/admin/regenerate-manifest.php: |
| * public/include/admin-header.php: |
| * public/include/json-header.php: |
| * public/include/manifest.php: |
| * run-tests.js: |
| (TestEnvironment.this.postJSON): |
| (TestEnvironment.this.httpGet): |
| (sendHttpRequest): |
| |
| 2013-03-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Add some tests for admin/regenerate-manifest. |
| |
| Reviewed by Ricky Mondello. |
| |
| Added some tests for admin/regenerate-manifest. |
| |
| * public/admin/regenerate-manifest.php: Use require_once instead of require. |
| * public/include/admin-header.php: Ditto. |
| * public/include/json-header.php: Ditto. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::builders): Removed a reference to a non-existent variable. |
| When there are no builders, simply return an empty array. |
| |
| * run-tests.js: |
| (TestEnvironment.postJSON): |
| (TestEnvironment.httpGet): Added. |
| (sendHttpRequest): Renamed from postHttpRequest as it now takes method as an argument. |
| |
| * tests/admin-regenerate-manifest.js: Added with a bunch of test cases. |
| |
| 2013-03-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Added more tests for api/report to ensure it creates tests, metrics, test_runs, |
| and run_iterations. Also fixed a typo in report.php found by new tests. |
| |
| * public/api/report.php: |
| (main): Fix a bug in the regular expression to wrap numbers with double quotations. |
| * tests/api-report.js: Added more test cases. |
| |
| 2013-03-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13399038> SafariPerfMonitor: Need integration tests |
| |
| Reviewed by Ricky Mondello. |
| |
| Add a test runner script and some simple test cases. |
| |
| * database/config.json: Added the configuration for "testServer". |
| * database/database-common.js: |
| (pathToTests): Added. |
| * run-tests.js: Added. |
| (main): |
| |
| (confirmUserWantsDatabaseToBeInitializedIfNeeded): Checks whether there are any non-empty tables, |
| and if there are, asks the user if it’s okay to delete all of the data contained therein. |
| (confirmUserWantsDatabaseToBeInitializedIfNeeded.findNonEmptyTable): Find a table with non-zero |
| number of rows. |
| (confirmUserWantsDatabaseToBeInitializedIfNeeded.fetchTableNames): Fetch the list of all tables |
| in the current database using PostgreSQL's information_schema. |
| (askYesOrNoQuestion): |
| |
| (initializeDatabase): Executes init-database.sql. It drops all tables and creates them again. |
| |
| (TestEnvironment): The global object exposed in tests. Provides various utility functions. |
| (TestEnvironment.assert): Exposes assert to tests. |
| (TestEnvironment.console): Exposes console to tests. |
| (TestEnvironment.describe): Adds a description. |
| (TestEnvironment.it): Adds a test case. |
| (TestEnvironment.postJSON): |
| (TestEnvironment.queryAndFetchAll): |
| (TestEnvironment.sha256): |
| (TestEnvironment.notifyDone): Ends the current test case. |
| |
| (postHttpRequest): |
| |
| (TestContext): An object created for each test case. Conceptually, this object is always on |
| "stack" when a test case is running. TestEnvironment and an uncaughtException handler accesses |
| this object via currentTestContext. |
| (TestContext.description): |
| (TestContext.done): |
| (TestContext.logError): |
| |
| * tests: Added. |
| * tests/api-report.js: Added some basic tests for /api/report.php. |
| |
| 2013-03-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed administrative page fix. Make it possible to remove all configuration from dashboard. |
| |
| The problem was that we were detecting whether we're updating dashboard or not by checking |
| the existence of metric_configurations in $_POST but this key doesn't exist when we're removing |
| all configurations. Use separate 'dashboard' action to execute the code even when |
| metric_configurations is empty. |
| |
| * public/admin/tests.php: |
| |
| 2013-03-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Extract a class to aggregate and store values from ReportProcessor. |
| |
| Reviewed by Ricky Mondello. |
| |
| This patch extracts TestRunsGenerator, which aggregates and compute caches of values, |
| from ReportProcessor as a preparation to replace deprecated aggregate.js. |
| |
| * public/api/report.php: |
| (ReportProcessor::exit_with_error): Moved. |
| (ReportProcessor::process): Use the extracted TestRunsGenerator. |
| (TestRunsGenerator): Added. |
| (TestRunsGenerator::exit_with_error): Copied from ReportProcessor. |
| (TestRunsGenerator::add_aggregated_metric): Moved. |
| (TestRunsGenerator::add_values_for_aggregation): Moved. Made public. |
| (TestRunsGenerator::aggregate): Moved. Made public. |
| (TestRunsGenerator::aggregate_current_test_level): Moved. |
| (TestRunsGenerator::test_value_list_to_values_by_iterations): Moved. |
| (TestRunsGenerator::evaluate_expressions_by_node): Moved. |
| (TestRunsGenerator::compute_caches): Moved. Made public. |
| (TestRunsGenerator::add_values_to_commit): Moved. Made public. |
| (TestRunsGenerator::commit): Moved. Made public. Also takes build_id and platform_id. |
| (TestRunsGenerator::rollback_with_error): Moved. |
| |
| 2013-03-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Administrative pages should update manifest JSON as needed. |
| |
| Reviewed by Remy Demarest. |
| |
| Regenerate the manifest file when updating fields or adding new items that are included in |
| the manifest JSON. |
| |
| * public/admin/bug-trackers.php: |
| * public/admin/builders.php: |
| * public/admin/regenerate-manifest.php: |
| * public/admin/repositories.php: |
| * public/admin/tests.php: |
| * public/include/admin-header.php: |
| (regenerate_manifest): Extracted from regenerate-manifest.php. |
| |
| 2013-03-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed build fix for memory test results. |
| |
| Make aggregation work in the nested cases. We start from the "leaf" tests and move our ways up, |
| aggregating at each level. |
| |
| * public/api/report.php: |
| (ReportProcessor::recursively_ensure_tests): |
| (ReportProcessor::add_aggregated_metric): Renamed from ensure_aggregated_metric. |
| (ReportProcessor::add_values_for_aggregation): |
| (ReportProcessor::aggregate): |
| (ReportProcessor::aggregate_current_test_level): Extracted from aggregate. |
| |
| 2013-03-02 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fixes. iteration_count_cache should be the total number of values in all iteration group, |
| not the number of iteration groups. Also, don't set group number when the entire run belongs |
| a single iteration group. |
| |
| * public/api/report.php: |
| (ReportProcessor::commit): |
| |
| 2013-03-01 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Introduce iteration groups |
| |
| Reviewed by Remy Demarest. |
| |
| In WebKit land, we're going to use multiple instances of DumpRenderTree or WebKitTestRunner to amortize |
| the runtime environment variances to get more stable results. And it's desirable to keep track of |
| the instance of DumpRenderTree or WebKitTestRunner used to generate each iteration value. |
| |
| This patch introduces "iteration groups" to keep track of this extra information. |
| |
| Instead of receiving a flat array of iteration values, we can now receive a two dimensional array where |
| the outer array denotes iteration groups and each inner array contains iteration values for each group. |
| |
| |
| * database/init-database.sql: Add iteration_group column. |
| * public/api/report.php: |
| (ReportProcessor::recursively_ensure_tests): Always use the two dimensional array internally. |
| |
| (ReportProcessor::aggregate): test_value_list_to_values_by_iterations now returns an associative array |
| contains the list of values indexed by the iteration order and group sizes. Store the group size so |
| that we can restore the iteration groups before passing it to node.js and restore them later. |
| |
| (ReportProcessor::test_value_list_to_values_by_iterations): Flatten iteration groups into an array |
| of values and construct group_size array to restore the groups later in ReportProcessor::aggregate. |
| |
| Also check that each iteration group in each subtest are consistent with one another. To see why we need |
| to do this, suppose we're aggregating two tests T1 and T2 with the following values. Then it's important |
| that each iteration group in T1 and T2 have the same size: |
| T1 = [[1, 2], [3, 4, 5]] |
| T2 = [[6, 7], [8, 9, 10]] |
| |
| so that the aggregated result (the sum in this case) can have the same groups as in: |
| T = [[7, 9], [11, 13, 15]] |
| |
| If some iteration groups in T1 and T2 had a different size as in: |
| T1 = [[1, 2, 3], [4, 5]] |
| T2 = [[6, 7], [8, 9, 10]] |
| |
| Then iteration groups of the aggregated T is ambiguous. |
| |
| (ReportProcessor::compute_caches): Flatten iteration groups to compute caches (e.g. mean, stdev, etc...) |
| (ReportProcessor::commit): Store iteration_group values. |
| |
| 2013-03-01 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Delete the migration tool for webkit-perf.appspot.com now that we have successfully |
| migrated to perf.webkit.org. |
| |
| * database/perf-webkit-migrator.js: Removed. |
| |
| 2013-03-01 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Don't forget to add metrics of the top level tests e.g. Dromaeo:Time:Arithmetic. |
| |
| * public/index.html: |
| (.showCharts): |
| |
| 2013-03-01 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Make it possible to add charts for all subtests or all platforms. |
| |
| Reviewed by Ricky Mondello. |
| |
| It is often desirable to see charts of a given test for all platforms, or to be able to see |
| charts of all subtests on a given platform when trying to triage perf. regressions. |
| |
| Support this use case by adding the ability to do so on the charts page. |
| |
| Also, we used to disable items on the test list based on the platform chosen. This turned out |
| to be a bad UI because in many situations you want to be able to compare results of the same test |
| on multiple platforms. |
| |
| In this new UI, we have three select elements, each of which selects the following: |
| 1. Top-level test - Test suite such as Dromaeo |
| 2. Metric - Pages and subtests under the suite such as www.webkit.org for dom-modify:Runs |
| (where dom-modify is the name of the subtest and Runs is a metric in that subtest) for Dromaeo. |
| 3. Platform - Mountain Lion, Qt, etc... |
| |
| A user can select "all" for metric and platform but we disallow doing both at once since adding |
| all metrics on all platforms tends to add way too many charts and hang the browser. I also can't |
| think of a use case where you want to look at that many charts at once. We can support this later |
| if valid use cases come up. |
| |
| * public/index.html: |
| (.showCharts.addOption): Extracted. |
| (.showCharts): Added "metricList" that shows the list of test and metrics (in the form of |
| relative metrics paths such as "DOMWalk:Time") for each top-level test selected in testList. |
| metricList has onchange handler that enables/disables items on platformList. |
| |
| (init): Sort tests and test metrics here instead of doing that in showCharts. |
| |
| 2013-02-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13316756> SafariPerfMonitor: tooltip should include a link to build URLs |
| |
| Reviewed by Remy Demarest and Ricky Mondello. |
| |
| Added a hyperlink to build page in tooltips. Repeating the entire build URL in each build |
| was a bad idea because it bloats the resultant JSON file too much. So move the build URL |
| templates to the manifest file instead. Each build now only contains the builder id. |
| |
| * public/api/runs.php: Removed the part of the query that joined builders table. This |
| speeds up the query quite a bit. |
| |
| * public/include/manifest.php: |
| (ManifestGenerator::generate): Generate builders field. |
| (ManifestGenerator::builders): Added. Returns an associative array of builder ids to an |
| associative array that contains name and its build URL template. |
| |
| * public/index.html: |
| (.buildLabelWithLinks.linkifyIfNotNull): Renamed from linkifiedLabel. Take a label and url |
| instead of a revision since this function is used for revisions and build page URLs now. |
| (.buildLabelWithLinks): Include the linkified build number. |
| |
| * public/js/helper-classes.js: |
| (TestBuild.builder): Added. |
| (TestBuild.buildNumber): Added. |
| (TestBuild.buildUrl): Returns the build URL. The variable name in the URL template has been |
| changed from %s to $buildNumber to be more descriptive and consistent with other URL templates. |
| |
| 2013-02-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Tooltips interfere with user interactions |
| |
| Rubber-stamped by Simon Fraser. |
| |
| Disable tooltip on the dashboard page since graphs are too small to be useful there. |
| Also, show graphs for only 10 days by default as opposed to 20. |
| Finally, dismiss the hovering tooltip when mouse enters a "pinned" tooltip. |
| |
| * public/index.html: |
| * public/js/helper-classes.js: |
| |
| 2013-02-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix some serious typo. We're supposed to be using SHA-256, not SHA-1 to hash our passwords, |
| to be compatible with webkit-perf.appspot.com. |
| |
| * public/admin/builders.php: |
| * public/api/report.php: |
| |
| 2013-02-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. |
| |
| Add a missing constraint on builds table. For a given builder, there should be exactly |
| one build for a given build number. |
| |
| Also add report_committed_at to reports table to record the time at which a given report |
| was processed and test_runs and run_iterations rows were committed into the database. |
| |
| * database/config.json: |
| * public/api/report.php: |
| |
| 2013-02-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Add more checks for empty SQL query results. |
| |
| * public/include/manifest.php: |
| |
| 2013-02-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| More build fixes on perf.webkit.org. |
| |
| * public/api/runs.php: Make PostgreSQL happier. |
| * public/include/manifest.php: Don't assume we always have bug trackers. |
| |
| 2013-02-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: index.html duplicates the code in PerfTestRuns to determine smallerIsBetter |
| and fix other miscellaneous UI bugs. |
| |
| Rubber-stamped by Simon Fraser. |
| |
| Removed the code to determine whether smaller value is better or not for a given test in index.html |
| in the favor of using that of PerfTestRuns. |
| |
| * public/include/manifest.php: Fixed a typo. |
| * public/index.html: |
| (Chart): |
| (Chart.attachMainPlot): Fixed a bug to access previousPoint.left even when previousPoint is null. |
| |
| * public/js/helper-classes.js: |
| (PerfTestRuns): Added EndAllocations, MaxAllocations, and MeanAllocations. |
| |
| (PerfTestRuns.computeScalingFactorIfNeeded): When the mean is almost 10,000 units, we may end up |
| using 5 digits instead of 4, resulting in the use of scientific notations. Go up to the next unit |
| at roughly 2,000 units to avoid this. |
| |
| (Tooltip.show): Show the tooltip even when the new content is identical to the previous content. |
| The only thing we can avoid is innerHTML. |
| |
| 2013-02-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix. The path to node is /usr/local/bin/node, not /usr/bin/local/node |
| |
| * public/include/evaluator.js: |
| |
| 2013-02-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13267898> SafariPerfMonitor: Bug trackers should be configurable |
| |
| Reviewed by Remy Demarest. |
| |
| Made the list of bug trackers configurable. Namely, each bug tracker can be added in |
| admin/bug-trackers.php and can be associated with multiple repositories. |
| |
| The association between bug trackers and repositories (such as WebKit, Safari, etc...) are used |
| to determine the set of bug trackers to show for a given set of blame lists. |
| e.g. if a test regressed due to a change in Safari, then we don't want to show WebKit Bugzilla as |
| a place to file bugs against the regression. |
| F |
| * database/init-database.sql: Added bug_trackers and tracker_repositories. |
| Also drop those tables before creating them (note "DROP TABLE reports" was missing). |
| |
| * public/admin/bug-trackers.php: Added. The administrative interface for adding and managing |
| bug trackers, namely associated repositories. |
| |
| * public/include/admin-header.php: Added a link to bug-trackers.php |
| * public/include/manifest.php: |
| (ManifestGenerator::generate): Include the list of bug trackers in the manifest. |
| Also moved the code to fetch repositories table here from ManifestGenerator::repositories. |
| |
| (ManifestGenerator::repositories): |
| |
| (ManifestGenerator::bug_trackers): Added. Generates an associative array of bug trackers where |
| keys are names of bug trackers and values are associative arrays with keys 'new_bug_url' and |
| 'repositories' where the latter contains the list of associated repository names. |
| |
| * public/index.html: |
| (Chart): Takes bugTrackers as as argument. |
| (Chart.showTooltipWithResults): Removed the hard-coded list. |
| (init): |
| (init.addPlatformsToDashboard): |
| (init.showCharts.createChartFromListPair): |
| (init): Stores the list of bug trackers in the manifest to a local variable. |
| |
| 2013-02-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| A follow up on the previous build fix. When using proc_open, we need to make evalulator.js executable. |
| |
| * public/include/evaluator.js: |
| |
| 2013-02-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Extract the code to generate tabular view in administrative pages |
| |
| Reviewed by Remy Demarest. |
| |
| Extracted AdministrativePage to share the code to generate a tabular view of data and a form to insert |
| new row into the database. |
| |
| * public/admin/aggregators.php: Use AdministrativePage. |
| * public/admin/builders.php: Ditto. |
| * public/admin/repositories.php: Ditto. |
| * public/include/admin-header.php: |
| (AdministrativePage): Added. |
| (AdministrativePage::__construct): column_info is an associative array that maps a SQL column name |
| to an associative array that describes the column. |
| - editing_mode: Specifies the type of form ('text', 'url', or 'string') to show for this column. |
| - label: Human readable name of the column. |
| - pre_insertion: Signifies that this column exists only before the row is inserted. e.g. password |
| column exists only before we create password_hash column at the insertion time. |
| |
| (AdministrativePage::name_to_titlecase): Converts an underscored lowercase name to a human readable |
| titlecase (e.g. new_bug is converted to New Bug). |
| (AdministrativePage::column_label): Obtains the label specified in column_info or titlecased column name. |
| (AdministrativePage::render_form_control_for_column): "Renders" a text form control such as input and |
| textarea for a given editing mode ('text', 'url', or 'string'). |
| (AdministrativePage::render_table): Renders a whole SQL table after sorting rows by the specified column. |
| (AdministrativePage::render_form_to_add): Renders a form to insert new row. |
| |
| 2013-02-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Some systems don't support r+. Use proc_open instead. |
| |
| * public/api/report.php: |
| |
| 2013-02-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Use the mean data series as supposed to upper or lower confidence bounds |
| when computing the y-axis of data points to show tooltips at. |
| |
| * public/index.html: |
| |
| 2013-02-15 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Removed .htaccess in favor of directly putting directives in httpd.conf. |
| |
| * Install.md: |
| * public/.htaccess: Removed. |
| |
| 2013-02-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. |
| |
| * public/include/manifest.php: Build fix. db is on this. |
| * public/js/statistics.js: |
| (Statistics.confidenceInterval): Added. An utility function for debugging purposes. |
| |
| 2013-02-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13165667> SafariPerfMonitor doesn't work on perf.webkit.org (Part 2) |
| |
| Reviewed by Anders Carlsson. |
| |
| Rewrote and merged populate-from-report.js into report.php. |
| |
| * database/config.json: Added a path to node.js. |
| |
| * database/init-database.sql: Don't require unit to be always present since it's no longer used by the front end. |
| Once we land this patch and update the administrative pages, we can remove this column. |
| |
| Also add a new reports table to store JSON reported by builders. We used to store everything in jobs table but |
| that table is going away once we remove the node.js backend. |
| |
| * database/populate-from-report.js: Removed. |
| * public/api/report.php: Added. |
| (ReportProcessor): |
| (ReportProcessor.__construct): |
| (ReportProcessor.process): |
| |
| (ReportProcessor.store_report_and_get_build_data): We store the report into the database as soon as it has been |
| verified to be submitted by a known builder. |
| |
| (ReportProcessor.exit_with_error): Store the error message and details in the database if the report had been |
| stored. If not, then notify that to the client via 'failureStored' in the JSON response. |
| (ReportProcessor.resolve_build_id): Insert build and build_revisions rows if needed. We don't do this atomically |
| inside a transaction because there could be multiple reports for a single build, each containing results for |
| different tests. |
| |
| (ReportProcessor.recursively_ensure_tests): Parse a tree of tests and insert tests and test_metrics rows as |
| needed. It also computes the metrics to aggregate and prepares values to commit via ensure_aggregated_metric, |
| add_values_to_commit, and add_values_for_aggregation. |
| |
| (ReportProcessor.is_list_of_aggregators): When a metric is an aggregation, it contains an array of aggregator |
| names, e.g. ["Arithmetic", "Geometric"], instead of a dictionary of configuration types to their values, |
| e.g. {Time: {current: [1, 2, 3,]}}. This function detects the former. (Note that dictionary and list are both |
| array's in PHP). |
| |
| (ReportProcessor.ensure_aggregated_metric): Create a metric with aggregator to add it to the list of metrics |
| to be aggregated in ReportProcessor.aggregate. |
| |
| (ReportProcessor.add_values_for_aggregation): Called by test metrics with aggregated parent test metrics. |
| |
| (ReportProcessor.aggregate): Compute results for aggregated metrics. Consider a matrix with rows representing |
| child tests and columns representing "iterations" for a given aggregated metrics M. Initially, we have values |
| given for each row (child metrics of M). This function extracts each column (iteration) via |
| test_value_list_to_values_by_iterations, and feeds it into evaluate_expressions_by_node to get aggregated values |
| for each column (iteration of M). Finally, it registers those aggregated values to be committed. |
| |
| Note that we don't want to start a new node.js process for each aggregation, so we accumulate all values to be |
| aggregated in node.js in $expressions. Each entry in $expressions is a JSON string that contains code and |
| values to be aggregated. node.js gives us back a list of JSON strings that contain aggregated values. |
| |
| (ReportProcessor.test_value_list_to_values_by_iterations): See above. |
| (ReportProcessor.evaluate_expressions_by_node): See above. |
| |
| (ReportProcessor.compute_caches): Compute cached mean, sum, and square sums for each run we're about to add |
| using evaluate_expressions_by_node. We can't do this before computing aggregated results since those aggregated |
| results also need the said caches. |
| |
| (ReportProcessor.add_values_to_commit): |
| |
| (ReportProcessor.commit): Add test_runs and run_iterations atomically inside a transaction, rolling back |
| the transaction as needed if anything goes wrong. |
| |
| (ReportProcessor.rollback_with_error) |
| (main): |
| * public/include/db.php: |
| (Database.prepare_params): Use $values (instead of $placeholders) to compute the current index since |
| placeholders ($1, $2, etc...) may be split up into multiple arrays given they may not necessarily show up |
| contiguously in a SQL statement. |
| |
| (Database.select_or_insert_row): Added. Selects a row if the attempt to insert the same row fails. It |
| automatically creates a query string from a dictionary of unprefixed column names and table. It returns |
| a column value of the choice. |
| |
| (Database.begin_transaction): Added. |
| (Database.commit_transaction): Added. |
| (Database.rollback_transaction): Added. |
| |
| * public/include/evaluator.js: Added. |
| * public/include/json-header.php: |
| (exit_with_error): Take error details and merge it with "additional details". This allows report.php to provide |
| context under which the request failed. |
| (successful_exit): Merge "additional details". |
| (set_exit_detail): Added. Sets "additional details" to the JSON returned by exit_with_error or successful_exit. |
| (merge_additional_details): |
| |
| 2013-02-12 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Add more helper functions to db.php |
| |
| Reviewed by Remy Demarest. |
| |
| Added Database::insert_row and array_get to make common database operations easier. |
| |
| * public/admin/aggregators.php: Use Database::insert_row instead of |
| execute_query_and_expect_one_row_to_be_affected. |
| |
| * public/admin/builders.php: Ditto. |
| |
| * public/admin/tests.php: Ditto; We used to run a separate SELECT query just to get the id after |
| inserting a row. With insert_row, we don't need that. |
| |
| * public/include/admin-header.php: Ditto. |
| |
| * public/include/db.php: |
| (array_get): Added. It returns the value of an array given a key if the key exists; otherwise |
| return the default value (defaults to NULL) if the key doesn't exist. |
| |
| (Database::column_names): Added. Prefixes an array of column names and creates a comma separated |
| list of the names. |
| |
| (Database::prepare_params): Added. Takes an associative array of column names and their values, |
| and builds up arrays for placeholder (e.g. $1, $2, etc...) and values, then returns an array of |
| column names all in the same order. |
| |
| (Database::insert_row): Added. Inserts a new row into the specified table where column names have |
| the given prefix. Values are given in a form of an associative array where keys are unprefixed |
| column names and values are corresponding values. When the row is successfully inserted, it returns |
| the specified column's value (defaults to prefix_id). If NULL is specified, it returns a boolean |
| indicating the success of the insertion. |
| |
| 2013-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13165667> SafariPerfMonitor doesn't work on perf.webkit.org (Part 1) |
| |
| Reviewed by Conrad Shultz. |
| |
| Rewrote the manifest generator in PHP. |
| |
| * database/generate-manifest.js: Removed. |
| * public/admin/regenerate-manifest.php: Added. Use ManifestGenerator to generate and store the manifest. |
| * public/include/db.php: |
| (array_ensure_item_has_array): Added. |
| * public/include/evaluator.js: Added. |
| * public/include/json-header.php: |
| * public/include/manifest.php: Added. |
| |
| 2013-02-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Dates on overflow plot are overlapping |
| |
| Rubber-stamped by Simon Fraser. |
| |
| Don't show more than 5 days. |
| |
| * public/index.html: |
| * public/js/helper-classes.js: |
| (TestBuild.UTCtoPST): |
| (TestBuild.now): |
| |
| 2013-02-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Show build time as well as commit time on the dashboard and tooltips. |
| |
| Rubber-stamped by Simon Fraser. |
| |
| Include both the maximum commit time and build time in buildLabelWithLinks. |
| Also use ISO format to save the screen real estate. |
| |
| * public/index.html: |
| (buildLabelWithLinks): |
| * public/js/helper-classes.js: |
| (TestBuild): |
| (TestBuild.buildTime): |
| (TestBuild.formattedBuildTime): |
| |
| 2013-02-08 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed; Convert metric.name to metric.unit in the front end. |
| |
| * public/js/helper-classes.js: |
| |
| 2013-02-07 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13166276> SafariPerfMonitor: Need hyperlinks to file bugs |
| |
| Rubber-stamped by Simon Fraser. |
| |
| This patch adds hyperlinks to file new bugs on Radar and WebKit Bugzilla. Because we want to include information |
| such as the degree of progression or regression and the regression ranges when filing new bugs, broke various |
| label() functions into smaller pieces to be used in both generating tooltips and the hyperlinks. |
| |
| * public/index.html: |
| (.buildLabelWithLinks): Extracted from TestBuild.label. |
| (.showTooltipWithResults): Extracted from Tooltip.show. Also added the code to generate hyperlinks to file new bugs |
| on Radar and WebKit Bugzilla. |
| * public/js/helper-classes.js: |
| (PerfTestResult.metric): Replaced test() as runs.test() no longer exists. |
| (PerfTestResult.isBetterThan): Added. |
| (PerfTestResult.formattedRelativeDifference): Extracted from PerfTestResult.label. |
| (PerfTestResult.formattedProgressionOrRegression): Ditto. Also use "better" and "worse" instead of arrow symbols |
| to indicate progressions or regressions. |
| (PerfTestResult.label): |
| (TestBuild.formattedTime): Added. |
| (TestBuild.platform): Added. |
| (TestBuild.formattedRevisions): Extracted from TestBuild.label. Merged a part of linkifyLabel. |
| (TestBuild.smallerIsBetter): Added. |
| (Tooltip.show): Take a raw markup instead of two results. |
| |
| 2013-02-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13151520> SafariPerfMonitor: Dashboard can cause excessive horizontal scrolling when there are many platforms |
| |
| Rubber-stamped by Tim Horton. |
| |
| Stack platforms when there are more than 3 of them since making the layout adaptive is tricky |
| since each platform may have a different number of tests to be shown on the dashboard. |
| |
| * public/index.html: |
| |
| 2013-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Don't prefix a SVn revision with 'r' when constructing a changeset / blame URL. |
| |
| * public/js/helper-classes.js: |
| (TestBuild.label): |
| |
| 2013-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: repository names or revisions are double-quoted when they contain a space |
| |
| Rubber-stamped by Tim Horton. |
| |
| The bug was in the PHP code that parsed Postgres array. Trim double quotations as needed. |
| |
| Also fixed a bug in TestBuild where we used to show the revision range as r1234-1250 when |
| the revision r1234 was the revision used in the previous build. |
| |
| * public/api/runs.php: |
| (parse_revisions_array): Trim double quotations around repository names and revisions. |
| * public/js/helper-classes.js: |
| (TestBuild.label): |
| |
| 2013-02-05 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13151558> SafariPerfMonitor: Tooltip is unusable |
| |
| Rubber-stamped by Tim Horton. |
| |
| * public/index.html: |
| (Chart.attachMainPlot): Disable auto highlighting (circle around a data point that shows up on hover) |
| on the dashboard page as it's way too noisy. |
| |
| (Chart.hideTooltip): Added. Hides the tooltip that shows up on hover. |
| |
| (.toggleClickTooltip): Extracted from the code for "mouseout" bind (now replaced by "mouseleave"). |
| Pins or unpins a tooltip. When pinning a tooltip, we create a tooltip behind the scene and show that |
| so that the tooltip for hover can be reused further. |
| |
| (.closestItemForPageX): Find the closest item given pageX. We iterate data points from left to right, |
| and find the first point that lies on the right of the cursor position. We then compute the midpoint |
| between this and the previous point and pick the closer of the two. It returns an item-like object |
| that has all properties we need since flot doesn't provide an API to retrieve the real item object. |
| |
| (Chart): Call toggleClickTooltip when a (hover) tooltip is clicked. |
| |
| (Chart.attach): In "plothover" bind, call closestItemForPageX when item is not provided by flot on |
| the first or "current" data points (as opposed to target or baseline data points). |
| |
| Also bind the code to clear crosshair and hide tooltips to "mouseleave" instead of "mouseout", and |
| avoid triggering this code when the cursor is still within the plot's rectangle (e.g. when a cursor |
| moves onto a tooltip) to avoid the premature dismissal of a tooltip. |
| |
| * public/js/helper-classes.js: |
| (Tooltip.ensureContainer): Don't automatically close then the user clicks on tooltip. Delegate this |
| work to the client via bindClick. |
| |
| (Tooltip.show): Move tooltip up by 5px. Also added a FIXME to move this offset computation to the client. |
| |
| (Tooltip.bindClick): Added. |
| |
| 2013-02-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Yet another build fix. metricId*s*. |
| |
| * public/admin/tests.php: |
| |
| 2013-02-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Another build fix. Use the new payload format for the aggregate job. |
| |
| * public/admin/tests.php: |
| |
| 2013-02-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fixes. |
| |
| * database/aggregate.js: Use variables that actually exist. |
| * database/database-common.js: |
| (ensureConfigurationIdFromList): Add the newly added configuration to the list so that subsequent |
| function calls will find this configuration. |
| |
| 2013-01-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13130139> SafariPerfMonitor: Add ReadMe |
| |
| Reviewed by Ricky Mondello. |
| |
| Turned InstallManual into a proper markdown document and added ReadMe.md. |
| |
| * InstallManual: Removed. |
| * InstallManual.md: Moved from InstallManual. |
| * ReadMe.md: Added. |
| |
| 2013-01-31 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13109335> SafariPerfMonitor: Add baseline and target lines |
| |
| Reviewed by Ricky Mondello. |
| |
| This patch prepares the front end code to process baseline and target results properly. |
| |
| * public/index.html: |
| (fetchTest.createRunAndResults): Extracted. |
| (fetchTest): Call createRunAndResults on current, baseline, and target values of the JSON. |
| Deleted the comment about how sorting will be unnecessary once we start results in the server side |
| since sorting by the maximum revision commit time turned out to be non-trivial in php. |
| |
| 2013-01-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13057071> SafariPerfMonitor: Use newer version of flot that supports timezone properly |
| |
| Reviewed by Tim Horton. |
| |
| Use flot at https://github.com/flot/flot/commit/ec168da2cb8619ebf59c7e721d12c44a7960ff41. |
| These files are "dynamically linked" to our app. |
| |
| * public/index.html: |
| * public/js/jquery-1.8.2.min.js: Removed. |
| * public/js/jquery.colorhelpers.js: Added. |
| * public/js/jquery.flot.categories.js: Added. |
| * public/js/jquery.flot.crosshair.js: Added. |
| * public/js/jquery.flot.errorbars.js: Added. |
| * public/js/jquery.flot.fillbetween.js: Added. |
| * public/js/jquery.flot.js: Added. |
| * public/js/jquery.flot.min.js: Removed. |
| * public/js/jquery.flot.navigate.js: Added. |
| * public/js/jquery.flot.resize.js: Added. |
| * public/js/jquery.flot.selection.js: Added. |
| * public/js/jquery.flot.stack.js: Added. |
| * public/js/jquery.flot.symbol.js: Added. |
| * public/js/jquery.flot.threshold.js: Added. |
| * public/js/jquery.flot.time.js: Added. |
| * public/js/jquery.js: Added. |
| |
| 2013-01-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Return NaN instead of throwing when there aren't enough samples. |
| |
| Reviewed by Sam Weinig. |
| |
| It's better to return NaN when we don't have enough samples so that we can treat it |
| as if we don't have any confidence interval. |
| |
| * public/js/statistics.js: |
| (Statistics.new): |
| |
| 2013-01-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Apparently Safari sometimes appends / at the end of hash location. Remove that. |
| |
| * public/js/helper-classes.js: |
| (URLState.parseIfNeeded): |
| |
| 2013-01-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13081582> SafariPerfMonitor: Always use parameterized SQL functions in php code |
| |
| Reviewed by Ricky Mondello. |
| |
| Parameterized execute_query_and_expect_one_row_to_be_affected and updated the code accordingly. |
| |
| * public/admin/aggregators.php: Use heredoc. |
| * public/admin/builders.php: |
| * public/admin/jobs.php: |
| * public/admin/repositories.php: |
| * public/admin/tests.php: Updated the forms to use unprefixed field names to match other pages. |
| This allows us to use update_field when updating test's url and metric's unit. Changed the action |
| to regenerate aggregated matrix from "update" to "add" to simplify the dependencies in if-else. |
| Also removed a stray code to update unit and url simultaneously since it's never used. |
| * public/include/admin-header.php: |
| (execute_query_and_expect_one_row_to_be_affected): Added $params. Also automatically convert |
| empty strings to NULL as it was previously done via $db->quote_string_or_null_if_empty in callers. |
| (update_field): Moved from repositories.php. |
| (add_job): |
| * public/include/db.php: |
| (quote_string_or_null_if_empty): Removed now that nobody uses this function. |
| |
| 2013-01-25 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fixes. Treat mean, sum, and square sum as float, not int. |
| |
| Also use 95% confidence interval instead of 90% confidence interval. |
| |
| * public/api/runs.php: |
| * public/js/helper-classes.js: |
| (.this.confidenceIntervalDelta): |
| |
| 2013-01-24 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add an administrative page to edit repository information. |
| |
| Reviewed by Ricky Mondello. |
| |
| * public/admin/repositories.php: Added. |
| * public/include/admin-header.php: |
| |
| 2013-01-23 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13067539> SafariPerfMonitor: Automatically create aggregated metrics from builder reports |
| |
| Reviewed by Ricky Mondello. |
| |
| Auto-create aggregated matrix such as arithmetic means and geometric means as requested and add a job |
| to aggregate results for those matrix in populate-from-report.js. |
| |
| * database/generate-manifest.js: |
| (.): Include aggregator names such as Arithmetic and Geometric in the list of metrics. |
| * database/init-database.sql: Remove an erroneous unique constraint. There could be multiple matrix that share |
| the same test and name (e.g. Dromaeo, Time) with different aggregators (e.g. Arithmetic and Geometric). |
| * database/populate-from-report.js: |
| (main): |
| (getReport): No change even though the diff looks as if it moved. |
| (processReport): Extracted from main. Fetch the list of aggregators, pass that to recursivelyEnsureTestsIdsAndMetricsIds |
| to obtain the list of aggregated metrics (such as arithmetic means) that need to be passed to aggregate.js |
| (scheduleJobs): Extracted from processReport. Add a job to aggregate results. |
| (recursivelyEnsureTestsIdsAndMetricsIds): When a metric is a list of names, assume them as aggregator names, |
| and add corresponding metrics for them. Note we convert those names to ids using the dictionary we obtained |
| in processReport. |
| (ensureMetricId): Take an aggregator id as an argument. |
| * database/process-jobs.js: Support multiple metric ids and build id. Note that aggregate.js aggregates results |
| for all builds when the build id is not specified. |
| * public/admin/tests.php: |
| * public/index.html: Include the aggregator name in the full name since there could be multiple metrics |
| of the same name with different aggregators. |
| |
| 2013-01-22 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Don't pass in arguments to in the wrong order. |
| |
| * database/aggregate.js: |
| |
| 2013-01-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/13057110> SafariPerfMonitor: x-axis is messed up |
| |
| Reviewed by Ricky Mondello. |
| |
| Since the version of flot we use doesn't support showing graphs in the current locate or |
| in a specific timezone, convert all timestamps to PST manually (Date's constructor will still |
| treat them as in UTC). We don't want to use the current locate because other websites on |
| webkit.org assume PST. |
| |
| Also append this information to build's label. |
| |
| * public/js/helper-classes.js: |
| (TestBuild): |
| (TestBuild.label): |
| |
| 2013-01-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Store test URLs reported by builders. |
| |
| Reviewed by Ricky Mondello. |
| |
| * database/populate-from-report.js: |
| (recursivelyEnsureTestsIdsAndMetricsIds): Pass in the test url. |
| (ensureTestId): Store the URL. |
| |
| 2013-01-20 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Yet another build fix; don't blow up even if we didn't have any test configurations. |
| |
| * public/admin/tests.php: |
| |
| 2013-01-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix; don't instantiate Date when a timestamp wasn't provided. |
| |
| * database/populate-from-report.js: |
| |
| 2013-01-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Rename SafariPerfDashboard to SafariPerfMonitor and add a install manual. |
| |
| Reviewed by Tim Horton. |
| |
| Added an install manual. |
| |
| * InstallManual: Added. |
| |
| 2012-12-21 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Minor build fix. Don't unset builderPassword when it's not set. |
| |
| * public/api/report.php: |
| |
| 2012-12-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Prettify JSON payloads and make very large payloads not explode the table in jobs.php. |
| |
| Reviewed by Ricky Mondello. |
| |
| * public/admin/admin.css: Make a very large payload scrollable. |
| * public/admin/jobs.php: Format JSONs. |
| |
| 2012-12-19 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/12897424> SafariPerfMonitor: Add ability to report results from bots |
| |
| Reviewed by Ricky Mondello. |
| |
| Add report.php and populate-from-report.js that process JSON files submitted by builders. |
| |
| * database/populate-from-report.js: Added. |
| (main): |
| (getReport): Obtains the payload (the actual report) from "jobs" table. |
| (recursivelyEnsureTestsIdsAndMetricsIds): "reports.tests" contain a tree of tests, test metrics, |
| and their results. This function recursively traverses tests and metrics and ensure their ids. |
| (ensureTestId): |
| (metricToUnit): Maps a metric name to a unit. This should really be done in the client side since |
| there is no point in storing unit given that every metric maps to exactly one unit (i.e. the mapping |
| is a "function" in mathematical sense). |
| (ensureMetricId): |
| (ensureRepositoryIdsForAllRevisions): |
| (getIdOrCreateBuildWithRevisions): |
| (ensureBuildIdAndRevisions): Obtains a build id given a builder name, a build number, and a build time |
| if one already exists. If not, then inserts a new build and corresponding revisions information (e.g. |
| build 123 may contain WebKit revision r456789). We don't retrieve rows for revisions since we don't use |
| it elsewhere. |
| (insertRun): Insert new rows into "test_runs" and "run_iterations" tables, thereby recording the new |
| test results all in a single transaction. This allows us to keep the database consistent in that either |
| a build has been reported or not at least in "test_runs" and "run_iterations" tables. It'll be ideal if |
| we could do the same for "builds" and "build_revisions" but that's not a hard requirement as far as |
| other parts of the application are concerned. |
| (scheduleQueriesToInsertRun): |
| * database/process-jobs.js: Add a call to populate-from-report.js. |
| * public/api/report.php: Added. Adds a new job named "report" to be processed by populate-from-report.js. |
| * public/include/db.php: Support parameterized query. |
| * public/include/json-header.php: Always include 'status' in the response so that builder submitting |
| a test result could confirm that the submission indeed succeeded. |
| |
| 2012-12-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Rename get(Id)OrCreate*(Id) to ensure*Id as suggested by Ricky on one of his code reviews. |
| |
| * database/aggregate.js: |
| * database/database-common.js: |
| (selectColumnCreatingRowIfNeeded): |
| (ensureRepositoryId): |
| (ensureConfigurationIdFromList): |
| * database/perf-webkit-migrator.js: |
| (.migrateStat.): |
| (.migrateStat): |
| (getOrCreateBuildId): |
| |
| 2012-12-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Extract commonly-used functions from aggregate.js and perf-webkit-migrator.js. |
| |
| Reviewed by Ricky Mondello. |
| |
| As a preparation to add report.js that processes a JSON file submitted by bots, extract various functions |
| and classes from aggregate.js and perf-webkit-migrator.js to be shared. |
| |
| * database/aggregate.js: Extracted TaskQueue and SerializedTaskQueue into utility.js. |
| (main): |
| (processBuild): |
| (saveAggregatedResults): |
| * database/database-common.js: |
| (getIdOrCreatePlatform): Extracted from webkit-perf-migrator.js. |
| (getIdOrCreateRepository): Ditto. |
| (getConfigurationsForPlatformAndMetrics): Renamed from fetchConfigurations. Extracted from aggregator.js. |
| (getIdFromListOrInsertConfiguration): Renamed from getOrInsertConfiguration. Extracted from aggregator.js. |
| * database/perf-webkit-migrator.js: |
| * database/utility.js: Added. |
| (TaskQueue): Extracted from aggregator.js. Fixed a bug that prevented tasks added after start() is called |
| from being executed. |
| (TaskQueue.startTasksInQueue): Execute remaining tasks without serializing them. If the queue is empty, |
| call the callback passed into start(). |
| (TaskQueue.taskCallback): The function each task calls back. Decrement the counter and call statTasksInQueue. |
| (TaskQueue.addTask): |
| (TaskQueue.start): |
| (SerializedTaskQueue): Unlike TaskQueue, this class executes each task sequentially. |
| (SerializedTaskQueue.executeNextTask): |
| (SerializedTaskQueue.addTask): |
| (SerializedTaskQueue.start): |
| |
| 2012-12-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Revert erroneously committed changes. |
| |
| * database/config.json: |
| |
| 2012-12-18 Ryosuke Niwa <rniwa@webkit.org> |
| |
| aggregator.js should be able to accept multiple metric ids and a single build id. |
| |
| Reviewed by Ricky Mondello. |
| |
| Make aggregator.js accept multiple ids and generate results for single build when bots are |
| reporting new results. |
| |
| * database/aggregate.js: |
| (parseArgv): Added. Returns an object containing the parsed representation of argv, |
| which currently contains metricIDs and buildIds. |
| (main): Use parseArgv and processConfigurations |
| (processPlatform): Use build ids passed in or obtain all builds for the given platform. |
| (processPlatform.processConfigurations): Extracted. |
| |
| 2012-12-17 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Add an administrative page for builders. |
| |
| Reviewed by Ricky Mondello. |
| |
| We need an administrative page to add and edit builder information. |
| Also renamed "slaves" to "builders" in order to reduce the amount of technical jargon we use. |
| |
| * database/init-database.sql: Renamed slaves table to builders. Drop slave_os and slave_spec |
| since we don't have plans to use those columns in near future. Also make builder_name unique |
| as required by the rest of the app. |
| * public/admin/builders.php: Added. |
| * public/api/runs.php: Updated per the table rename. |
| * public/include/admin-header.php: Added a link to builders.php. |
| |
| 2012-12-14 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fixes for r46982. |
| |
| * database/aggregate.js: |
| (fetchConfigurations): Bind i so that it's not always metricIds.length. |
| (fetchBuildsForPlatform): Return run_build as build_id since that's what caller expects. |
| (processBuild): Don't print "." until we've committed transactions. It's misleading. |
| |
| 2012-12-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Unreviewed. Move some php files to public/include as suggested by Mark on a code review. |
| |
| * public/admin/aggregators.php: |
| * public/admin/footer.php: Removed. |
| * public/admin/header.php: Removed. |
| * public/admin/index.php: |
| * public/admin/jobs.php: |
| * public/admin/tests.php: |
| * public/api/json-header.php: Removed. |
| * public/api/runs.php: |
| * public/db.php: Removed. |
| * public/include: Added. |
| * public/include/admin-footer.php: Copied from public/admin/footer.php. |
| * public/include/admin-header.php: Copied from public/admin/header.php. |
| * public/include/db.php: Copied from public/db.php. |
| * public/include/json-header.php: Copied from public/api/json-header.php. |
| |
| 2012-12-13 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/12822613> SafariPerfMonitor: implement naive value aggregation mechanism |
| |
| Reviewed by Ricky Mondello. |
| |
| Added the initial implementation of value aggregation. |
| Also added abilities to configure the dashboard page in tests.php. |
| |
| * database/aggregate.js: Added. |
| (TaskQueue): Added. Execute all tasks at once and waits for those tasks to complete. |
| (TaskQueue.addTask): |
| (TaskQueue.start): |
| (SerializedTaskQueue): Added. Execute tasks sequentially after one another until all of them are completed. |
| (SerializedTaskQueue.addTask): |
| (SerializedTaskQueue.start): |
| (main): |
| (processPlatform): |
| (fetchConfigurations): |
| (fetchBuildsForPlatform): |
| (processBuild): |
| (testsWithDifferentIterationCounts): |
| (aggregateIterationsForMetric): Retrieve run_iterations and aggregate results in memory. |
| (saveAggregatedResults): Insert into test_runs and test_config in transactions. |
| (getOrInsertConfiguration): |
| (fetchAggregators): |
| * database/database-common.js: |
| (fetchTable): Log an error as an error. |
| (getOrCreateId): Extracted from perf-webkit-migrator. |
| (statistics): Added. |
| * database/perf-webkit-migrator.js: |
| (migrateTestConfig): Converted units to respective metric names. Also removed the code to add jobs to update |
| runs JSON since runs JSONs are generated on demand now. |
| (migrateStat): |
| (getOrCreatePlatformId): |
| (getOrCreateTestId): |
| (getOrCreateConfigurationId): |
| (getOrCreateRevisionId): |
| (getOrCreateRepositoryId): |
| (getOrCreateBuildId): |
| * database/process-jobs.js: |
| (processJob): Handle 'aggregate' type. |
| |
| 2012-12-11 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix the dashboard after adding test_metrics. |
| |
| Reviewed by Ricky Mondello. |
| |
| Rename test to metrics in various functions and sort tests on the charts page. |
| Also representing whether a test appears or not by setting a flag on dashboard |
| was bogus because test objects are shared by multiple platforms. Instead, store |
| dashboard platform list as intended by the manifest JSON. |
| |
| * public/index.html: |
| (PerfTestRuns): Renamed test to metric. |
| (fetchTest): Ditto. |
| (showCharts): Ditto; also sort metrics' full names before adding them to the select element. |
| (fullName): Moved so that it appears above where it's called. |
| * public/js/helper-classes.js: |
| |
| 2012-12-10 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update tests.php to reflect recent changes in the database schema. |
| |
| Reviewed by Conrad Shultz. |
| |
| Made the following changes to tests.php: |
| 1. Disallow adding metrics to tests without subtests. |
| 2. Made dashboard configurable by adding checkboxes for each platform on each metric. |
| 3. Linkified tests with subtests instead of showing all them at once. |
| |
| * public/admin/admin.css: |
| (.action-field, .notice): |
| (label): |
| * public/admin/header.php: Specify paths by absolute paths so that tests.php can use PATH_INFO. |
| (execute_query_and_expect_one_row_to_be_affected): Return a boolean. Used in tests.php while adding test_metrics. |
| (add_job): Extracted. |
| * public/admin/tests.php: See above. |
| (array_item_set_default): Added. |
| (array_item_or_default): Renamed from get_value_with_default. |
| (compute_full_name): Extracted. |
| (sort_tests): Ditto. |
| (map_metrics_to_tests): Ditto. |
| |
| 2012-12-06 Ryosuke Niwa <rniwa@webkit.org> |
| |
| <rdar://problem/12832324> SafariPerfMonitor: Linkify test names |
| |
| Reviewed by Simon Fraser. |
| |
| Linkify the headers using metric.test.url when it's provided. |
| |
| * public/index.html: |
| |
| 2012-12-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Use parameterized pg_query_params in query_and_fetch_all |
| |
| Reviewed by Conrad Shultz. |
| |
| Address a review comment by Mark by using pg_query_params instead of pg_query in query_and_fetch_all. |
| |
| * public/api/runs.php: |
| * public/db.php: |
| (ctype_alnum_underscore): Added. |
| |
| 2012-12-04 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update the migration tool to support test_metrics. |
| |
| Reviewed by Mark Rowe. |
| |
| Updated the migration tool from webkit-perf.appspot.com to support test_metrics. |
| Also import run_iteration rows as runs JSON files now include individual values. |
| |
| * database/database-common.js: |
| (addJob): Extracted. |
| * database/perf-webkit-migrator.js: |
| (migrateTestConfig): Interchange the order in which we fetch runs and add configurations |
| so that we can pass in the metric name and unit to getOrCreateConfigurationId. |
| (getOrCreateConfigurationId): Updated to add both test configuration and test metric. |
| (ensureCheckout): |
| |
| 2012-12-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Build fix. Suppress "Undefined index" warning. |
| |
| * public/admin/tests.php: |
| |
| 2012-12-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a commit error in r46756. api/ should obviously be added under public/ |
| |
| * api: Removed. |
| * api/json-header.php: Removed. |
| * api/runs.php: Removed. |
| * public/api: Copied from api. |
| |
| 2012-12-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Linkify revisions and revisions range |
| <rdar://problem/12801010> |
| |
| Reviewed by Mark Rowe. |
| |
| Linkify revisions in TestBuild.label. Pass in manifest.repositories to TestBuild's constructor |
| since it needs to know "url" and "blameUrl". |
| |
| Also tweaked the appearance of graphs on charts page to better align graphs when unit names are long. |
| |
| * public/index.html: |
| * public/js/helper-classes.js: |
| (TestBuild): |
| (TestBuild.revision): Renamed from webkitRevision. Now returns an arbitrary revision number. |
| (TestBuild.label): Add labels for all revisions. |
| (TestBuild): |
| (.ensureContainer): |
| |
| 2012-12-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Make the generation of "runs" JSON dynamic and support test_metrics. |
| |
| Reviewed by Mark Rowe. |
| |
| It turned out that we can fetch all runs for a given configuration in roughly 100-200ms. |
| |
| Since there could be hundreds, if not thousands, of tests for each configuration and users |
| aren't necessarily interested in looking at all test results, it's much more efficient to |
| generate runs JSON dynamically (i.e. polling) upon a request instead of generating all of them |
| when bots report new results (i.e. pushing). |
| |
| Rewrote the script to generate runs JSON in php and also supported test_metrics table. |
| |
| * api: Added. |
| * api/json-header.php: Added. Sets Content-Type and cache policies (10 minutes by default). |
| (exit_with_error): Added. |
| (successful_exit): Added. |
| * api/runs.php: Added. Ported database/database-common.js. It's much shorter in php! |
| * database/generate-runs.js: Removed. |
| * database/process-jobs.js: No longer supports "runs". |
| * public/.htaccess: Added. Always add MultiView so that api/runs can receive a path info. |
| * public/db.php: Print "Nothing to see here." when it's accessed directly. |
| (ends_with): Added. |
| * public/index.html: Fetch runs JSONs from /api/runs/ instead of data/. |
| |
| 2012-12-03 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Update tests.php and sample-data.sql per addition of test_metrics. |
| |
| Rubber-stamped by Timothy Hatcher. |
| |
| Remove a useless code from tests.php that used to update the unit and the url of a test |
| since it's no longer used, and add the UI and the ability to add a new aggregator to a test. |
| |
| Also update the sample data to reflect the addition of test_metrics. |
| |
| * database/sample-data.sql: |
| * public/admin/tests.php: |
| |
| 2012-11-30 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Share more code between admin pages. |
| |
| Reviewed by Timothy Hatcher. |
| |
| Added notice and execute_query_and_expect_one_row_to_be_affected helper functions to share more code |
| between admin pages. |
| |
| Also moved the code to connect to the database into header.php to be shared. Admin pages just need |
| to check the nullity of global $db now. |
| |
| * public/admin/aggregators.php: |
| * public/admin/header.php: |
| (notice): Added |
| (execute_query_and_expect_one_row_to_be_affected): Added. |
| * public/admin/index.php: |
| * public/admin/jobs.php: |
| * public/admin/tests.php: |
| |
| 2012-11-29 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Add admin page to edit aggregators |
| <rdar://problem/12782687> |
| |
| Reviewed by Mark Rowe. |
| |
| Add aggregators.php. It's very simple. We should probably share more code between various admin pages. |
| |
| * public/admin/aggregators.php: Added. |
| * public/admin/header.php: |
| * public/admin/jobs.php: Removed an erroneous hidden input element. |
| |
| 2012-11-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Fix a syntax error in init-database.sql and add the missing drop table at the beginning. |
| |
| * database/init-database.sql: |
| |
| 2012-11-28 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Allow multiple metrics per test |
| <rdar://problem/12773506> |
| |
| Rubber-stamped by Mark Rowe. |
| |
| Introduce a new table test_metrics. This table represents metrics each test can have |
| such as time, memory allocation, frame rate as well as aggregation such as arithmetic mean |
| and geometric mean. |
| |
| Updated admin/tests.php and index.html accordingly. |
| |
| Also create few indexes based on postgres' "explain analysis" as suggested by Mark. |
| |
| * database/generate-manifest.js: |
| (buildPlatformMapIfPossible): |
| * database/generate-runs.js: |
| (fetchRuns): |
| * database/init-database.sql: |
| * database/schema.graffle: |
| * public/admin/admin.css: |
| (table): |
| (tbody.odd): |
| * public/admin/tests.php: |
| * public/index.html: |
| |
| 2012-11-27 Ryosuke Niwa <rniwa@webkit.org> |
| |
| SafariPerfMonitor: Improve the webkit-perf migration tool |
| <rdar://problem/12760882> |
| |
| Reviewed by Mark Rowe. |
| |
| Make the migrator tool skip runs when fetching runs failed since webkit-perf.appspot.com is unreliable |
| and we don't want to pause the whole importation process until the user comes back to decide whether |
| to retry or not. |
| |
| Also place form controls next to each test in tests.php so that users don't have to scroll all the way |
| down to make modifications. |
| |
| Finally, add unique constraint to (run_config, run_build) in test_runs table in order to optimize a query |
| of the form: "SELECT run_id FROM test_runs WHERE run_config = $1 AND run_build = $2", |
| |
| * database/init-database.sql: |
| * database/perf-webkit-migrator.js: |
| (migrateTestConfig): |
| * database/schema.graffle: |
| * public/admin/admin.css: |
| (table): |
| * public/admin/tests.php: |
| |
| 2012-11-16 Ryosuke Niwa <rniwa@webkit.org> |
| |
| Create a new performance dashboard |
| <rdar://problem/12625582> |
| |
| Rubber-stamped by Mark Rowe. |
| |
| Add the initial implementation of the perf dashboard. |
| |
| * database: Added. |
| * database/config.json: Added. |
| * database/database-common.js: Added. |
| (connect): |
| (fetchTable): |
| (manifestPath): |
| (pathToRunsJSON): |
| (pathToLocalScript): |
| (config): |
| * database/generate-manifest.js: Added. |
| (ensureProperty): |
| (buildTestMap): |
| (buildPlatformMapIfPossible): |
| (generateFileIfPossible): |
| * database/perf-webkit-migrator.js: Added. |
| * database/process-jobs.js: Added. |
| * database/sample-data.sql: Added. |
| * database/schema.graffle: Added. |
| * public: Added. |
| * public/admin: Added. |
| * public/admin/README: Added. |
| * public/admin/admin.css: Added. |
| * public/admin/footer.php: Added. |
| * public/admin/header.php: Added. |
| * public/admin/index.php: Added. |
| * public/admin/jobs.php: Added. |
| * public/admin/tests.php: Added. |
| * public/common.css: Added. |
| * public/data: Added. |
| * public/db.php: Added. |
| * public/index.html: Added. |
| * public/js: Added. |
| * public/js/helper-classes.js: Added. |
| * public/js/jquery-1.8.2.min.js: Added. |
| * public/js/jquery.flot.min.js: Added. |
| * public/js/jquery.flot.plugins.js: Added. |
| * public/js/shared.js: Added. |
| (fileNameFromPlatformAndTest): |
| * public/js/statistics.js: Added. |
| |