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

Reply via email to