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...