Krinkle has uploaded a new change for review. https://gerrit.wikimedia.org/r/320555
Change subject: Track visibilitychange events to statsd ...................................................................... Track visibilitychange events to statsd Track whether the page was hidden at some point while the page is loading. This may help correlate performance regressions to cases where performance is intentionally deminished by browsers when the page is not visible to the user (e.g. in a background tab, background window, or minimized window). Bug: T146510 Change-Id: I86601b41a3cf813077730bb0a28588cc4d391292 (cherry picked from commit b20df90dac0269058bbc62ba61519f50c793a5e2) --- M extension.json A modules/ext.wikimediaEvents.visibilitychange.js 2 files changed, 78 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikimediaEvents refs/changes/55/320555/1 diff --git a/extension.json b/extension.json index be79cbe..6f4fadb 100644 --- a/extension.json +++ b/extension.json @@ -126,6 +126,7 @@ "ext.wikimediaEvents.events.js", "ext.wikimediaEvents.statsd.js", "ext.wikimediaEvents.rlfeature.js", + "ext.wikimediaEvents.visibilitychange.js", "ext.wikimediaEvents.searchSatisfaction.js", "ext.wikimediaEvents.geoFeatures.js" ], diff --git a/modules/ext.wikimediaEvents.visibilitychange.js b/modules/ext.wikimediaEvents.visibilitychange.js new file mode 100644 index 0000000..473cebd --- /dev/null +++ b/modules/ext.wikimediaEvents.visibilitychange.js @@ -0,0 +1,77 @@ +/*! + * Track hiding and showing of pages to help investigate performance regressions + * that may be the result of the browser intentionally lowering the load priority + * of a page that is in a background tab or hidden window. + * + * - All page loads in the sample will record one of 'supported' or 'unsupported'. + * - A subset of 'supported' may also record 'vendor' and/or 'hidden'. + * - Each event will only be recorded at most once from a single page view. + * - 'hidden' is recorded if document.hidden was true at any point before + * window.onload and mwLoadEnd. Once these are both done, visibility changes + * are ignored. + * + * Inspiration: + * - https://github.com/SOASTA/boomerang/blob/d49b90d6d1/boomerang.js + * - https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API + * + * Supported browsers per MDN: + * - Chrome 13+ + * - Firefox 18+ + * - MSIE 10 + * - Opera 12.10 + * - Safari 7+ + */ +( function ( mw ) { + var hidden, vendor, eventName, mwLoadEnd, + tracked = {}; + + function trackOnce( state ) { + if ( tracked[ state ] !== true ) { + tracked[ state ] = true; + mw.track( 'counter.mw.js.visibility.' + state, 1 ); + } + + } + + function check() { + if ( document[ hidden ] === true && !( mwLoadEnd && document.readyState === 'complete' ) ) { + trackOnce( 'hidden' ); + } + } + + // Filter: Sample 1 in 1000 page views + if ( !mw.eventLog.inSample( 1000 ) ) { + return; + } + + if ( typeof document.hidden !== 'undefined' ) { + hidden = 'hidden'; + eventName = 'visibilitychange'; + } else if ( typeof document.mozHidden !== 'undefined' ) { + hidden = 'mozHidden'; + eventName = 'mozvisibilitychange'; + vendor = true; + } else if ( typeof document.msHidden !== 'undefined' ) { + hidden = 'msHidden'; + eventName = 'msvisibilitychange'; + vendor = true; + } else if ( typeof document.webkitHidden !== 'undefined' ) { + hidden = 'webkitHidden'; + eventName = 'webkitvisibilitychange'; + vendor = true; + } else { + trackOnce( 'unsupported' ); + return; + } + + check(); + document.addEventListener( eventName, check, false ); + trackOnce( 'supported' ); + if ( vendor ) { + trackOnce( 'vendor' ); + } + mw.hook( 'resourceloader.loadEnd' ).add( function () { + mwLoadEnd = true; + } ); + +}( mediaWiki ) ); -- To view, visit https://gerrit.wikimedia.org/r/320555 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I86601b41a3cf813077730bb0a28588cc4d391292 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikimediaEvents Gerrit-Branch: wmf/1.28.0-wmf.23 Gerrit-Owner: Krinkle <krinklem...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits