Adding repoName, inBackgroundTab to metrics
We would like to to understand impact on performance data, once gerrit
is opened in background tab and on different repos.
Change-Id: Id1b44e37a33c849a42193f1c110a789c28c769f3
diff --git a/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting.js b/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting.js
index a0af7f4..0dcd7b8 100644
--- a/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting.js
+++ b/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting.js
@@ -41,14 +41,6 @@
DETECTED: 'Extension detected',
};
- // Page visibility related constants.
- const PAGE_VISIBILITY = {
- TYPE: 'lifecycle',
- CATEGORY: 'Page Visibility',
- // Reported events - alphabetize below.
- STARTED_HIDDEN: 'hidden',
- };
-
// Navigation reporting constants.
const NAVIGATION = {
TYPE: 'nav-report',
@@ -107,8 +99,10 @@
const pending = [];
+ // Variables that hold context info in global scope
const loadedPlugins = [];
const detectedExtensions = [];
+ let reportRepoName = undefined;
const onError = function(oldOnError, msg, url, line, column, error) {
if (oldOnError) {
@@ -189,7 +183,13 @@
reporter(...args) {
const report = (this._isMetricsPluginLoaded() && !pending.length) ?
this.defaultReporter : this.cachingReporter;
- args.splice(4, 0, loadedPlugins, detectedExtensions);
+ const contextInfo = {
+ loadedPlugins,
+ detectedExtensions,
+ repoName: reportRepoName,
+ isInBackgroundTab: document.visibilityState === 'hidden',
+ };
+ args.splice(4, 0, contextInfo);
report.apply(this, args);
},
@@ -199,22 +199,27 @@
* @param {string} category
* @param {string} eventName
* @param {string|number} eventValue
- * @param {Array} plugins
- * @param {Array} extensions
+ * @param {Object} contextInfo
* @param {boolean|undefined} opt_noLog If true, the event will not be
* logged to the JS console.
*/
- defaultReporter(type, category, eventName, eventValue,
- loadedPlugins, detectedExtensions, opt_noLog) {
+ defaultReporter(type, category, eventName, eventValue, contextInfo,
+ opt_noLog) {
const detail = {
type,
category,
name: eventName,
value: eventValue,
};
- if (category === TIMING.CATEGORY_UI_LATENCY) {
- detail.loadedPlugins = loadedPlugins;
- detail.detectedExtensions = detectedExtensions;
+ if (category === TIMING.CATEGORY_UI_LATENCY && contextInfo) {
+ detail.loadedPlugins = contextInfo.loadedPlugins;
+ detail.detectedExtensions = contextInfo.detectedExtensions;
+ }
+ if (contextInfo && contextInfo.repoName) {
+ detail.repoName = contextInfo.repoName;
+ }
+ if (contextInfo && contextInfo.isInBackgroundTab !== undefined) {
+ detail.inBackgroundTab = contextInfo.isInBackgroundTab;
}
document.dispatchEvent(new CustomEvent(type, {detail}));
if (opt_noLog) { return; }
@@ -236,39 +241,34 @@
* @param {string} category
* @param {string} eventName
* @param {string|number} eventValue
- * @param {Array} plugins
- * @param {Array} extensions
+ * @param {Object} contextInfo
* @param {boolean|undefined} opt_noLog If true, the event will not be
* logged to the JS console.
*/
- cachingReporter(type, category, eventName, eventValue,
- plugins, extensions, opt_noLog) {
+ cachingReporter(type, category, eventName, eventValue, contextInfo,
+ opt_noLog) {
if (type === ERROR.TYPE && category === ERROR.CATEGORY) {
console.error(eventValue && eventValue.error || eventName);
}
if (this._isMetricsPluginLoaded()) {
if (pending.length) {
for (const args of pending.splice(0)) {
- this.reporter(...args);
+ this.defaultReporter(...args);
}
}
- this.reporter(type, category, eventName, eventValue,
- plugins, extensions, opt_noLog);
+ this.defaultReporter(type, category, eventName, eventValue, contextInfo,
+ opt_noLog);
} else {
- pending.push([type, category, eventName, eventValue,
- plugins, extensions, opt_noLog]);
+ pending.push([type, category, eventName, eventValue, contextInfo,
+ opt_noLog]);
}
},
/**
* User-perceived app start time, should be reported when the app is ready.
*/
- appStarted(hidden) {
+ appStarted() {
this.timeEnd(TIMING.APP_STARTED);
- if (hidden) {
- this.reporter(PAGE_VISIBILITY.TYPE, PAGE_VISIBILITY.CATEGORY,
- PAGE_VISIBILITY.STARTED_HIDDEN);
- }
},
/**
@@ -297,6 +297,7 @@
this.time(TIMER.DIFF_VIEW_DISPLAYED);
this.time(TIMER.DIFF_VIEW_LOAD_FULL);
this.time(TIMER.FILE_LIST_DISPLAYED);
+ reportRepoName = undefined;
},
locationChanged(page) {
@@ -519,6 +520,10 @@
this.reporter(ERROR_DIALOG.TYPE, ERROR_DIALOG.CATEGORY,
'ErrorDialog: ' + message, {error: new Error(message)});
},
+
+ setRepoName(repoName) {
+ reportRepoName = repoName;
+ },
});
window.GrReporting = GrReporting;
diff --git a/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting_test.html b/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting_test.html
index ec24b19..5513617 100644
--- a/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting_test.html
+++ b/polygerrit-ui/app/elements/core/gr-reporting/gr-reporting_test.html
@@ -64,15 +64,11 @@
test('appStarted', () => {
sandbox.stub(element, 'now').returns(42);
- element.appStarted(true);
+ element.appStarted();
assert.isTrue(
element.reporter.calledWithExactly(
'timing-report', 'UI Latency', 'App Started', 42
));
- assert.isTrue(
- element.reporter.calledWithExactly(
- 'lifecycle', 'Page Visibility', 'hidden'
- ));
});
test('WebComponentsReady', () => {
@@ -290,9 +286,9 @@
// element.pluginLoaded('foo');
element.time('timeAction');
element.timeEnd('timeAction');
- assert.isTrue(element.defaultReporter.getCall(1).calledWith(
+ assert.isTrue(element.defaultReporter.getCall(1).calledWithMatch(
'timing-report', 'UI Latency', 'timeAction', 0,
- ['metrics-xyz1']
+ {loadedPlugins: ['metrics-xyz1']}
));
});
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router.js b/polygerrit-ui/app/elements/core/gr-router/gr-router.js
index fc84ca8..b7a5238 100644
--- a/polygerrit-ui/app/elements/core/gr-router/gr-router.js
+++ b/polygerrit-ui/app/elements/core/gr-router/gr-router.js
@@ -1043,11 +1043,13 @@
},
_handleProjectDashboardRoute(data) {
+ const project = data.params[0];
this._setParams({
view: Gerrit.Nav.View.DASHBOARD,
- project: data.params[0],
+ project,
dashboard: decodeURIComponent(data.params[1]),
});
+ this.$.reporting.setRepoName(project);
},
_handleGroupInfoRoute(data) {
@@ -1122,27 +1124,33 @@
},
_handleRepoCommandsRoute(data) {
+ const repo = data.params[0];
this._setParams({
view: Gerrit.Nav.View.REPO,
detail: Gerrit.Nav.RepoDetailView.COMMANDS,
- repo: data.params[0],
+ repo,
});
+ this.$.reporting.setRepoName(repo);
},
_handleRepoAccessRoute(data) {
+ const repo = data.params[0];
this._setParams({
view: Gerrit.Nav.View.REPO,
detail: Gerrit.Nav.RepoDetailView.ACCESS,
- repo: data.params[0],
+ repo,
});
+ this.$.reporting.setRepoName(repo);
},
_handleRepoDashboardsRoute(data) {
+ const repo = data.params[0];
this._setParams({
view: Gerrit.Nav.View.REPO,
detail: Gerrit.Nav.RepoDetailView.DASHBOARDS,
- repo: data.params[0],
+ repo,
});
+ this.$.reporting.setRepoName(repo);
},
_handleBranchListOffsetRoute(data) {
@@ -1243,10 +1251,12 @@
},
_handleRepoRoute(data) {
+ const repo = data.params[0];
this._setParams({
view: Gerrit.Nav.View.REPO,
- repo: data.params[0],
+ repo,
});
+ this.$.reporting.setRepoName(repo);
},
_handlePluginListOffsetRoute(data) {
@@ -1308,6 +1318,7 @@
view: Gerrit.Nav.View.CHANGE,
};
+ this.$.reporting.setRepoName(params.project);
this._redirectOrNavigate(params);
},
@@ -1327,7 +1338,7 @@
params.leftSide = address.leftSide;
params.lineNum = address.lineNum;
}
-
+ this.$.reporting.setRepoName(params.project);
this._redirectOrNavigate(params);
},
@@ -1369,24 +1380,28 @@
_handleDiffEditRoute(ctx) {
// Parameter order is based on the regex group number matched.
+ const project = ctx.params[0];
this._redirectOrNavigate({
- project: ctx.params[0],
+ project,
changeNum: ctx.params[1],
patchNum: ctx.params[2],
path: ctx.params[3],
view: Gerrit.Nav.View.EDIT,
});
+ this.$.reporting.setRepoName(project);
},
_handleChangeEditRoute(ctx) {
// Parameter order is based on the regex group number matched.
+ const project = ctx.params[0];
this._redirectOrNavigate({
- project: ctx.params[0],
+ project,
changeNum: ctx.params[1],
patchNum: ctx.params[3],
view: Gerrit.Nav.View.CHANGE,
edit: true,
});
+ this.$.reporting.setRepoName(project);
},
/**
diff --git a/polygerrit-ui/app/elements/gr-app-element.js b/polygerrit-ui/app/elements/gr-app-element.js
index 5692969..385f8e5 100644
--- a/polygerrit-ui/app/elements/gr-app-element.js
+++ b/polygerrit-ui/app/elements/gr-app-element.js
@@ -119,7 +119,7 @@
},
ready() {
- this.$.reporting.appStarted(document.visibilityState === 'hidden');
+ this.$.reporting.appStarted();
this.$.router.start();
this.$.restAPI.getAccount().then(account => {