From a6749a686f79c7732467aa0e80d1837aecb222ae Mon Sep 17 00:00:00 2001 From: Pete Hunt Date: Wed, 12 Feb 2014 11:36:21 -0800 Subject: [PATCH] [perf] Change how ReactDefaultPerf is injected ReactDefaultPerf should inject itself when require()'d. This continues to support the ?react_perf use case for logging on initial page load. --- src/browser/ReactDefaultInjection.js | 12 ++++++++---- src/test/ReactDefaultPerf.js | 17 ++++++++++++++++- src/test/ReactPerf.js | 13 +++++-------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/browser/ReactDefaultInjection.js b/src/browser/ReactDefaultInjection.js index fe3ac4441d..544ca566c9 100644 --- a/src/browser/ReactDefaultInjection.js +++ b/src/browser/ReactDefaultInjection.js @@ -91,10 +91,6 @@ function inject() { ReactInjection.DOMProperty.injectDOMPropertyConfig(DefaultDOMPropertyConfig); - if (__DEV__) { - ReactInjection.Perf.injectMeasure(require('ReactDefaultPerf').measure); - } - ReactInjection.Updates.injectBatchingStrategy( ReactDefaultBatchingStrategy ); @@ -104,6 +100,14 @@ function inject() { ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex ); + + if (__DEV__) { + var url = (ExecutionEnvironment.canUseDOM && window.location.href) || ''; + if ((/[?&]react_perf\b/).test(url)) { + var ReactDefaultPerf = require('ReactDefaultPerf'); + ReactDefaultPerf.start(); + } + } } module.exports = { diff --git a/src/test/ReactDefaultPerf.js b/src/test/ReactDefaultPerf.js index 8f7f1b7f9a..c09528836c 100644 --- a/src/test/ReactDefaultPerf.js +++ b/src/test/ReactDefaultPerf.js @@ -19,12 +19,27 @@ "use strict"; +var ReactPerf = require('ReactPerf'); + var performanceNow = require('performanceNow'); var ReactDefaultPerf = {}; if (__DEV__) { ReactDefaultPerf = { + _injected: false, + + start: function() { + if (!ReactDefaultPerf._injected) { + ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure); + } + ReactPerf.enableMeasure = true; + }, + + stop: function() { + ReactPerf.enableMeasure = false; + }, + /** * Gets the stored information for a given object's function. * @@ -293,7 +308,7 @@ if (__DEV__) { var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; var fnStr = fn.toString().replace(STRIP_COMMENTS, ''); fnStr = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')); - return fnStr.match(/([^\s,]+)/g); + return fnStr.match(/([^\s,]+)/g) || []; }; /** diff --git a/src/test/ReactPerf.js b/src/test/ReactPerf.js index 6516769710..8a839cc233 100644 --- a/src/test/ReactPerf.js +++ b/src/test/ReactPerf.js @@ -19,6 +19,10 @@ "use strict"; +/** + * ReactPerf is a general AOP system designed to measure performance. This + * module only has the hooks: see ReactDefaultPerf for the analysis tool. + */ var ReactPerf = { /** * Boolean to enable/disable measurement. Set to false by default to prevent @@ -33,7 +37,7 @@ var ReactPerf = { storedMeasure: _noMeasure, /** - * Use this to wrap methods you want to measure. + * Use this to wrap methods you want to measure. Zero overhead in production. * * @param {string} objName * @param {string} fnName @@ -66,13 +70,6 @@ var ReactPerf = { } }; -if (__DEV__) { - var ExecutionEnvironment = require('ExecutionEnvironment'); - var url = (ExecutionEnvironment.canUseDOM && window.location.href) || ''; - ReactPerf.enableMeasure = ReactPerf.enableMeasure || - (/[?&]react_perf\b/).test(url); -} - /** * Simply passes through the measured function, without measuring it. *