// ==UserScript== // @name window.performance crutch // @version 2 // @include * // @include *.microsoft.com/* // @exclude https://www.twitch.tv/* // ==/UserScript== if (!window.performance) (function(opera, empty){ var Tstart = Date.now(); var marks = []; performance = { // https://developer.mozilla.org/en-US/docs/Web/API/Window/performance mark: function(n){ marks.push({name:n, entryType:'mark', startTime:Date.now(), duration:123}) } , now: Date.now , measure: function(name, startMark, endMark) { marks.push({name:name, entryType:'measure', startTime:Date.now(), duration:12345}) } , getEntriesByType: function(type) { return marks.filter(function(e){return e.entryType==type}) } , getEntriesByName: function(name) { return marks.filter(function(e){return e.name==name}) } , clearMarks: function(){ marks = marks.filter(function(e){return e.entryType!='mark'}) } , clearMeasures: function(){ marks = marks.filter(function(e){return e.entryType!='measure'}) } , clearResourceTimings: function(){marks=[]} , setResourceTimingBufferSize: empty //, onresourcetimingbufferfull https://developer.mozilla.org/en-US/docs/Web/API/Performance/onresourcetimingbufferfull //FF only?, toJSON: function() { return JSON.stringify({timing:performance.timing, navigation:performance.navigation})} , timing: { navigationStart:Tstart, fetchStart:Tstart, domainLookupStart:Tstart, domainLookupEnd:Tstart, connectStart:Tstart, connectEnd: Tstart , requestStart: Tstart, responseStart: Tstart, responseEnd: Tstart, domLoading:Tstart, domInteractive:Tstart, domContentLoadedEventStart:Tstart , domContentLoadedEventEnd: Tstart, domComplete:Tstart , loadEventStart:0, loadEventEnd: 0 , secureConnectionStart:0 , unloadEventStart:0, unloadEventEnd:0, redirectStart:0, redirectEnd:0 // , toJSON: function(){} }/**/ , navigation: {type:0,redirectCount:0 /*,toJSON*/ } } })(opera, function(){}) |