commit 672e46b96b93a3f9ec5269a5f11a8277ba794953 Author: Ole Date: Fri Oct 9 16:46:24 2020 +0200 Refactor reload 1: Promisify callback This function is very hard to follow. Making small steps to ensure careful review. Separate promisifying the callback from the logic to run in response to confine the harder to read callback code to less lines of code. Change-Id: I68712224bad01ee0cc0c11297c84417028b2b7f7 diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts index 951a56c..b573305 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts @@ -381,30 +381,32 @@ export class GrDiffHost extends GestureEventListeners( return Promise.resolve(); } this.filesWeblinks = this._getFilesWeblinks(diff); - return new Promise(resolve => { + this.diff = diff; + return new Promise(resolve => { const callback = (event: CustomEvent) => { - const needsSyntaxHighlighting = - event.detail && event.detail.contentRendered; - if (needsSyntaxHighlighting) { - this.reporting.time(TimingLabel.SYNTAX); - this.$.syntaxLayer.process().finally(() => { - this.reporting.timeEnd(TimingLabel.SYNTAX); - this.reporting.timeEnd(TimingLabel.TOTAL); - resolve(); - }); - } else { - this.reporting.timeEnd(TimingLabel.TOTAL); - resolve(); - } this.removeEventListener('render', callback); - if (shouldReportMetric) { - // We report diffViewContentDisplayed only on reload caused - // by params changed - expected only on Diff Page. - this.reporting.diffViewContentDisplayed(); - } + resolve(event); }; this.addEventListener('render', callback); - this.diff = diff; + }).then((event: CustomEvent) => { + const needsSyntaxHighlighting = + event.detail && event.detail.contentRendered; + let result: Promise = Promise.resolve(); + if (needsSyntaxHighlighting) { + this.reporting.time(TimingLabel.SYNTAX); + result = this.$.syntaxLayer.process().finally(() => { + this.reporting.timeEnd(TimingLabel.SYNTAX); + }); + } + result.finally(() => { + this.reporting.timeEnd(TimingLabel.TOTAL); + }); + if (shouldReportMetric) { + // We report diffViewContentDisplayed only on reload caused + // by params changed - expected only on Diff Page. + this.reporting.diffViewContentDisplayed(); + } + return result; }); }) .catch(err => { diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js index c772d51..a7b7c6d 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js @@ -328,8 +328,8 @@ suite('gr-diff-host tests', () => { // Multiple cascading microtasks are scheduled. setTimeout(() => { notifySyntaxProcessed(); - // Assert after the notification task is processed. - Promise.resolve().then(() => { + // Multiple cascading microtasks are scheduled. + setTimeout(() => { assert.isTrue(element.reporting.timeEnd.calledWithExactly( 'Diff Total Render')); assert.isTrue(element.reporting.timeEnd.calledWithExactly(