ChangedDisplayed event called only on parameter change Added event ChangeReloaded - it is fired on all reload of change like param changed, reply sent, label removed. ChangedDisplayed is fired only on param changed same as ChangedFullyDisplayed. Change-Id: Ifd346b629e3e643d1a8529c99fd113f2eb295660
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js index 3a5f326..c607b1c 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.js
@@ -60,6 +60,7 @@ }; const CHANGE_DATA_TIMING_LABEL = 'ChangeDataLoaded'; + const CHANGE_RELOAD_TIMING_LABEL = 'ChangeReloaded'; const SEND_REPLY_TIMING_LABEL = 'SendReply'; Polymer({ @@ -1358,15 +1359,17 @@ /** * Reload the change. - * @param {boolean=} opt_reloadRelatedChanges Reloads the related chanegs - * when true. + * @param {boolean=} opt_isLocationChange Reloads the related changes + * when true and ends reporting events that started on location change. * @return {Promise} A promise that resolves when the core data has loaded. * Some non-core data loading may still be in-flight when the core data * promise resolves. */ - _reload(opt_reloadRelatedChanges) { + _reload(opt_isLocationChange) { this._loading = true; this._relatedChangesCollapsed = true; + this.$.reporting.time(CHANGE_RELOAD_TIMING_LABEL); + this.$.reporting.time(CHANGE_DATA_TIMING_LABEL); // Array to house all promises related to data requests. const allDataPromises = []; @@ -1380,7 +1383,12 @@ // change content may start appearing. const loadingFlagSet = detailCompletes .then(() => { this._loading = false; }) - .then(() => { this.$.reporting.changeDisplayed(); }); + .then(() => { + this.$.reporting.timeEnd(CHANGE_RELOAD_TIMING_LABEL); + if (opt_isLocationChange) { + this.$.reporting.changeDisplayed(); + } + }); // Resolves when the project config has loaded. const projectConfigLoaded = detailCompletes @@ -1440,16 +1448,17 @@ coreDataPromise = mergeabilityLoaded; } - if (opt_reloadRelatedChanges) { + if (opt_isLocationChange) { const relatedChangesLoaded = coreDataPromise .then(() => this.$.relatedChanges.reload()); allDataPromises.push(relatedChangesLoaded); } - this.$.reporting.time(CHANGE_DATA_TIMING_LABEL); Promise.all(allDataPromises).then(() => { this.$.reporting.timeEnd(CHANGE_DATA_TIMING_LABEL); - this.$.reporting.changeFullyLoaded(); + if (opt_isLocationChange) { + this.$.reporting.changeFullyLoaded(); + } }); return coreDataPromise;
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html index e8de93b..79d8d93 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.html
@@ -1844,5 +1844,50 @@ MockInteractions.tap(element.$.changeStar.$$('button')); assert.isTrue(stub.called); }); + + suite('gr-reporting tests', () => { + setup(() => { + element._patchRange = { + basePatchNum: 'PARENT', + patchNum: 1, + }; + sandbox.stub(element, '_getChangeDetail').returns(Promise.resolve()); + sandbox.stub(element, '_getProjectConfig').returns(Promise.resolve()); + sandbox.stub(element, '_reloadComments').returns(Promise.resolve()); + sandbox.stub(element, '_getMergeability').returns(Promise.resolve()); + sandbox.stub(element, '_getLatestCommitMessage') + .returns(Promise.resolve()); + }); + + test('don\'t report changedDisplayed on reply', done => { + const changeDisplayStub = + sandbox.stub(element.$.reporting, 'changeDisplayed'); + const changeFullyLoadedStub = + sandbox.stub(element.$.reporting, 'changeFullyLoaded'); + element._handleReplySent(); + flush(() => { + assert.isFalse(changeDisplayStub.called); + assert.isFalse(changeFullyLoadedStub.called); + done(); + }); + }); + + test('report changedDisplayed on _paramsChanged', done => { + const changeDisplayStub = + sandbox.stub(element.$.reporting, 'changeDisplayed'); + const changeFullyLoadedStub = + sandbox.stub(element.$.reporting, 'changeFullyLoaded'); + element._paramsChanged({ + view: Gerrit.Nav.View.CHANGE, + changeNum: 101, + project: 'test-project', + }); + flush(() => { + assert.isTrue(changeDisplayStub.called); + assert.isTrue(changeFullyLoadedStub.called); + done(); + }); + }); + }); }); </script>