diff --git a/spec/regexper_spec.js b/spec/regexper_spec.js index 1e29fca..01f08de 100644 --- a/spec/regexper_spec.js +++ b/spec/regexper_spec.js @@ -484,6 +484,15 @@ describe('regexper.js', function() { .done(); }); + it('tracks the total rendering time', function(done) { + this.regexper.renderRegexp('example expression') + .then(() => { + expect(window._gaq.push).toHaveBeenCalledWith(['_trackTiming', 'visualization', 'total time', jasmine.any(Number)]); + }, fail) + .finally(done) + .done(); + }); + }); describe('when the rendering is cancelled', function() { diff --git a/src/js/regexper.js b/src/js/regexper.js index 13a2908..0a750a5 100644 --- a/src/js/regexper.js +++ b/src/js/regexper.js @@ -125,7 +125,8 @@ export default class Regexper { } renderRegexp(expression) { - var parseError = false; + var parseError = false, + startTime, endTime; if (this.running) { let deferred = Q.defer(); @@ -141,6 +142,7 @@ export default class Regexper { this.state = 'is-loading'; window._gaq.push(['_trackEvent', 'visualization', 'start']); + startTime = new Date().getTime(); this.running = new Parser(this.svgContainer); @@ -161,6 +163,9 @@ export default class Regexper { this.updateLinks(); this.displayWarnings(this.running.warnings); window._gaq.push(['_trackEvent', 'visualization', 'complete']); + + endTime = new Date().getTime(); + window._gaq.push(['_trackTiming', 'visualization', 'total time', endTime - startTime]); }) .then(null, message => { if (message === 'Render cancelled') {