From 2e130553142940670c4d520957db8208e6122d67 Mon Sep 17 00:00:00 2001 From: Nigel Heron Date: Thu, 15 Sep 2016 09:24:01 -0400 Subject: [PATCH] Round duration for measures to nearest ms (#4) --- README.md | 3 ++- bower.json | 2 +- dist/usertiming-compression.min.js | 2 +- package.json | 2 +- src/usertiming-compression.js | 5 +++-- test/test-usertiming-compression.js | 9 +++++++++ 6 files changed, 17 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3a3e4eb..a856d02 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # usertiming-compression.js -v0.1.3 +v0.1.4 [http://nicj.net](http://nicj.net) @@ -205,6 +205,7 @@ Or via ``gulp``: * v0.1.1 - 2016-04-04: `getCompressedUserTiming()` gathers Measures that end after the specified `from` * v0.1.2 - 2016-04-04: Protect against X-O frame access that crashes some browsers * v0.1.3 - 2016-07-25: `getCompressedUserTiming()` accepts an alternate window param passed into options +* v0.1.4 - 2016-08-10: Round `duration` values on Measures to nearest millisecond ## Thanks diff --git a/bower.json b/bower.json index defb804..17ee29e 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "usertiming-compression", - "version": "0.1.3", + "version": "0.1.4", "homepage": "https://github.com/nicjansma/usertiming-compression.js", "authors": [ "Nic Jansma " diff --git a/dist/usertiming-compression.min.js b/dist/usertiming-compression.min.js index 6b9e462..1f90af2 100644 --- a/dist/usertiming-compression.min.js +++ b/dist/usertiming-compression.min.js @@ -1 +1 @@ -!function(e){"use strict";var r,n;"undefined"!=typeof e?(r=e,n=r.UserTimingCompression):r={};var t,i=t={};i.noConflict=function(){return r.UserTimingCompression=n,i},i.trimTiming=function(e,r){"number"!=typeof e&&(e=0),"number"!=typeof r&&(r=0);var n=Math.round(e),t=Math.round(r);return 0===n?0:n-t},i.toBase36=function(e){return"number"==typeof e?e.toString(36):""},i.findUserTimingForFrame=function(e){var r;if(!e)return[];try{e.location&&e.location.href;if(!("performance"in e&&e.performance&&e.performance.getEntriesByType))return r;r=e.performance.getEntriesByType("mark"),r=r.concat(e.performance.getEntriesByType("measure"))}catch(n){return r}return r},i.compressUserTiming=function(e,r){var n,i,o,a=0,f={};if(r=r||{},!e||!e.length)return[];for(n=0;n0?(n+=(""!==n?".":"")+i+"*",r>=2&&(n+=r+1),r=0):n+=(""!==n?".":"")+i}return/^\d+$/.test(n)?parseInt(n,10):n},i.getCompressedUserTiming=function(r){var n,i;return r=r||{},n=r.window||e,i=this.findUserTimingForFrame(n),r.from&&(i=i.filter(function(e){return e.startTime+e.duration>=r.from})),r.to&&(i=i.filter(function(e){return e.startTime<=r.to})),t.compressUserTiming(i,r)},i.compressForUri=function(e){if("object"!=typeof e)return"";var r=!1;for(var n in e)if(e.hasOwnProperty(n)){if(isNaN(n)){r=!1;break}r=!0}if(r)return"1"+t.flattenMap(e);var i=t.convertToTrie(e),o=t.optimizeTrie(i,!0),a=t.jsUrl(o),f=t.flattenArray(e);if("string"!=typeof f||0===f.length)return"";var u=encodeURIComponent(a),s=encodeURIComponent(f);return u.length1331)continue;o.length>1&&(o=t.toBase36(i-36),o="-"+(1===o.length?"0":"")+o),r.push(o+e[n])}return r.sort(),r=r.join("~")},i.jsUrl=function(e){function r(e){return/[^\w-.]/.test(e)?e=e.replace(/[^\w-.]/g,function(e){return"$"===e?"!":(e=e.charCodeAt(0),e<256?"*"+("00"+e.toString(16)).slice(-2):"**"+("0000"+e.toString(16)).slice(-4))}):e}switch(typeof e){case"number":return isFinite(e)?"~"+e:"~null";case"string":return"~'"+r(e);case"boolean":return"~"+e;case"object":return e?Array.isArray(e)?"~("+(e.map(function(e){return t.jsUrl(e)||"~null"}).join("")||"~")+")":"~("+Object.keys(e).map(function(n){var i=t.jsUrl(e[n]);return i&&r(n)+i}).filter(function(e){return e}).sort().join("~")+")":"~null";default:return}},"function"==typeof define&&define.amd?define([],function(){return i}):"undefined"!=typeof module&&module.exports?module.exports=i:"undefined"!=typeof r&&(r.UserTimingCompression=i)}("undefined"!=typeof window?window:void 0); \ No newline at end of file +!function(e){"use strict";var r,n;"undefined"!=typeof e?(r=e,n=r.UserTimingCompression):r={};var t,i=t={};i.noConflict=function(){return r.UserTimingCompression=n,i},i.trimTiming=function(e,r){"number"!=typeof e&&(e=0),"number"!=typeof r&&(r=0);var n=Math.round(e),t=Math.round(r);return 0===n?0:n-t},i.toBase36=function(e){return"number"==typeof e?e.toString(36):""},i.findUserTimingForFrame=function(e){var r;if(!e)return[];try{e.location&&e.location.href;if(!("performance"in e&&e.performance&&e.performance.getEntriesByType))return r;r=e.performance.getEntriesByType("mark"),r=r.concat(e.performance.getEntriesByType("measure"))}catch(n){return r}return r},i.compressUserTiming=function(e,r){var n,i,o,a=0,f={};if(r=r||{},!e||!e.length)return[];for(n=0;n0?(n+=(""!==n?".":"")+i+"*",r>=2&&(n+=r+1),r=0):n+=(""!==n?".":"")+i}return/^\d+$/.test(n)?parseInt(n,10):n},i.getCompressedUserTiming=function(r){var n,i;return r=r||{},n=r.window||e,i=this.findUserTimingForFrame(n),r.from&&(i=i.filter(function(e){return e.startTime+e.duration>=r.from})),r.to&&(i=i.filter(function(e){return e.startTime<=r.to})),t.compressUserTiming(i,r)},i.compressForUri=function(e){if("object"!=typeof e)return"";var r=!1;for(var n in e)if(e.hasOwnProperty(n)){if(isNaN(n)){r=!1;break}r=!0}if(r)return"1"+t.flattenMap(e);var i=t.convertToTrie(e),o=t.optimizeTrie(i,!0),a=t.jsUrl(o),f=t.flattenArray(e);if("string"!=typeof f||0===f.length)return"";var u=encodeURIComponent(a),s=encodeURIComponent(f);return u.length1331)continue;o.length>1&&(o=t.toBase36(i-36),o="-"+(1===o.length?"0":"")+o),r.push(o+e[n])}return r.sort(),r=r.join("~")},i.jsUrl=function(e){function r(e){return/[^\w-.]/.test(e)?e=e.replace(/[^\w-.]/g,function(e){return"$"===e?"!":(e=e.charCodeAt(0),e<256?"*"+("00"+e.toString(16)).slice(-2):"**"+("0000"+e.toString(16)).slice(-4))}):e}switch(typeof e){case"number":return isFinite(e)?"~"+e:"~null";case"string":return"~'"+r(e);case"boolean":return"~"+e;case"object":return e?Array.isArray(e)?"~("+(e.map(function(e){return t.jsUrl(e)||"~null"}).join("")||"~")+")":"~("+Object.keys(e).map(function(n){var i=t.jsUrl(e[n]);return i&&r(n)+i}).filter(function(e){return e}).sort().join("~")+")":"~null";default:return}},"function"==typeof define&&define.amd?define([],function(){return i}):"undefined"!=typeof module&&module.exports?module.exports=i:"undefined"!=typeof r&&(r.UserTimingCompression=i)}("undefined"!=typeof window?window:void 0); \ No newline at end of file diff --git a/package.json b/package.json index 859c90e..5561718 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "UserTiming compression and decompression", "main": "./src/usertiming-compression", "author": "Nic Jansma", - "version": "0.1.3", + "version": "0.1.4", "repository": { "type": "git", "url": "http://github.com/nicjansma/usertiming-compression.js.git" diff --git a/src/usertiming-compression.js b/src/usertiming-compression.js index 4028456..0251035 100644 --- a/src/usertiming-compression.js +++ b/src/usertiming-compression.js @@ -195,8 +195,9 @@ var finalValue = time; // if this is a measure (with a duration), tack on "_[duration]" - if (typeof value.duration !== "undefined") { - var duration = self.toBase36(value.duration); + if (typeof value.duration === "number") { + // round duration to nearest ms + var duration = self.toBase36(Math.round(value.duration)); finalValue += "_"; diff --git a/test/test-usertiming-compression.js b/test/test-usertiming-compression.js index 71f2e02..150dffc 100644 --- a/test/test-usertiming-compression.js +++ b/test/test-usertiming-compression.js @@ -118,6 +118,15 @@ }])).to.deep.equal({"measure1": "1_1"}); }); + it("should compress a single measure with a rounded duration", function() { + expect(utc.compressUserTiming([{ + entryType: "measure", + name: "measure1", + startTime: 1, + duration: 0.750 + }])).to.deep.equal({"measure1": "1_1"}); + }); + it("should compress a single measure with a duration of 0", function() { expect(utc.compressUserTiming([{ entryType: "measure",