mw.trackSubscriber: Remove action.init.timing value

In Schema:Edit, all action timing durations (ready, loaded, saveAttempt etc.)
are defined as "time since the editor was initialised", which is internally
stored as the timestamp for the "init" action.

The 'init' action itself does not have a timing duratation, but the Edit schema
has a special case for it, definining it as "time since the page was loaded".

In actually, it isn't actually implemented as "time since the page loaded",
and I suspect that as such, this value is probably not used by EventLogging
consumers of the Edit schema. Or, it might be used, but doesn't represent
what the consumers think it does.

Presently, it uses the init time now() - mediaWikiLoadStart, which basically
means the time between the random point at which MediaWiki core JavaScript
finished executing which is quite variable in practice due to the race between
<script async> and browssing parsing/rendering of HTML. That is by design,
and is also why mediaWikiLoadStart is undocumented and internal, and actually
in the process of being removed.

After many iterations on this patch to try and approximate an alternative to
this undocumented variable, I came up with an alternative approach with DLynch
at the Hackathon, which is to simply not record this one timing value, but
preserve the behaviour of all the other timing values exactly as-is.

That is, keep the behaviour of storing `now()` as "init" when the editor
activates, and keep the behaviour of substracting "init" from all other action
times, but only don't report "init" itself to EventLogging (given its value
would be 0, which isn't useful).

Bug: T160315
Change-Id: I778234efe40dde8ff30333339335be1c3910a4e0
This commit is contained in:
Timo Tijhof 2018-04-23 19:04:25 +01:00 committed by Krinkle
parent 725adb2ae3
commit 21f526bffe

View file

@ -25,13 +25,6 @@
}
switch ( action ) {
case 'init':
// Account for second opening
return timeStamp - Math.max(
window.mediaWikiLoadStart,
timing.saveSuccess || 0,
timing.abort || 0
);
case 'ready':
return timeStamp - timing.init;
case 'loaded':
@ -124,7 +117,9 @@
event[ 'action.' + action + '.type' ] = event.type;
event[ 'action.' + action + '.mechanism' ] = event.mechanism;
event[ 'action.' + action + '.timing' ] = Math.round( computeDuration( action, event, timeStamp ) );
if ( action !== 'init' ) {
event[ 'action.' + action + '.timing' ] = Math.round( computeDuration( action, event, timeStamp ) );
}
event[ 'action.' + action + '.message' ] = event.message;
// Remove renamed properties