User timing shim
Using https://raw.githubusercontent.com/nicjansma/usertiming.js/v0.1.3/src/usertiming.js
by fiddlegrimbo
JavaScript
// https://raw.githubusercontent.com/nicjansma/usertiming.js/v0.1.3/src/usertiming.js
//
// usertiming.js
//
// A polyfill for UserTiming (http://www.w3.org/TR/user-timing/)
//
// Copyright 2013 Nic Jansma
// http://nicj.net
//
// https://github.com/nicjansma/usertiming.js
//
// Licensed under the MIT license
//
(function(window) {
'use strict';
// allow running in Node.js environment
if (typeof(window) === 'undefined') {
window = {};
}
// prepare base perf object
if (typeof(window.performance) === 'undefined') {
window.performance = {};
}
//
// Note what we shimmed
//
window.performance.userTimingJsNow = false;
window.performance.userTimingJsNowPrefixed = false;
window.performance.userTimingJsUserTiming = false;
window.performance.userTimingJsUserTimingPrefixed = false;
window.performance.userTimingJsPerformanceTimeline = false;
window.performance.userTimingJsPerformanceTimelinePrefixed = false;
// for prefixed support
var prefixes = [];
var methods = [];
var methodTest = null;
var i, j;
//
// window.performance.now() shim
// http://www.w3.org/TR/hr-time/
//
if (typeof(window.performance.now) !== 'function') {
window.performance.userTimingJsNow = true;
// copy prefixed version over if it exists
methods = ['webkitNow', 'msNow', 'mozNow'];
for (i = 0; i < methods.length; i++) {
if (typeof(window.performance[methods[i]]) === 'function') {
window.performance.now = window.performance[methods[i]];
window.performance.userTimingJsNowPrefixed = true;
break;
}
}
//
// now() should be a DOMHighResTimeStamp, which is defined as being a time relative
// to navigationStart of the PerformanceTiming (PT) interface. If this browser supports
// PT, use that as our relative start. Otherwise, use "now" as...