From c41e86c990efbd4b6c8315bb105381079eceb45a Mon Sep 17 00:00:00 2001 From: Pete Hunt Date: Fri, 30 Aug 2013 13:15:11 -0700 Subject: [PATCH] Make ReactDefaultPerf work server-side We were reading from window which was throwing when ReactDefaultPerf was injected. --- src/test/ReactDefaultPerf.js | 19 +++++----------- src/test/performanceNow.js | 42 ++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 src/test/performanceNow.js diff --git a/src/test/ReactDefaultPerf.js b/src/test/ReactDefaultPerf.js index adfbe4a515..7492281c9d 100644 --- a/src/test/ReactDefaultPerf.js +++ b/src/test/ReactDefaultPerf.js @@ -19,6 +19,8 @@ "use strict"; +var performanceNow = require('performanceNow'); + var ReactDefaultPerf = {}; if (__DEV__) { @@ -186,9 +188,9 @@ if (__DEV__) { var fnArgs = _getFnArguments(func); return function() { - var timeBeforeFn = now(); + var timeBeforeFn = performanceNow(); var fnReturn = func.apply(this, arguments); - var timeAfterFn = now(); + var timeAfterFn = performanceNow(); /** * Hold onto arguments in a readable way: args[1] -> args.component. @@ -224,7 +226,7 @@ if (__DEV__) { var callback = _getCallback(objName, fnName); callback && callback(this, args, fnReturn, log, info); - log.timing.timeToLog = now() - timeAfterFn; + log.timing.timeToLog = performanceNow() - timeAfterFn; return fnReturn; }; @@ -400,17 +402,6 @@ if (__DEV__) { var _microTime = function(time) { return Math.round(time * 1000) / 1000; }; - - /** - * Shim window.performance.now - * We can't assign window.performance.now and then call it, so need to bind. - * TODO: Support Firefox < 15 for now - */ - var performance = window && (window.performance || window.webkitPeformance); - if (!performance || !performance.now) { - performance = Date; - } - var now = performance.now.bind(performance); } module.exports = ReactDefaultPerf; diff --git a/src/test/performanceNow.js b/src/test/performanceNow.js new file mode 100644 index 0000000000..736b82af04 --- /dev/null +++ b/src/test/performanceNow.js @@ -0,0 +1,42 @@ +/** + * Copyright 2013 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @providesModule performanceNow + * @typechecks static-only + */ + +"use strict"; + +var ExecutionEnvironment = require('ExecutionEnvironment'); + +/** + * Detect if we can use window.performance.now() and gracefully + * fallback to Date.now() if it doesn't exist. + * We need to support Firefox < 15 for now due to Facebook's webdriver + * infrastructure. + */ +var performance = null; + +if (ExecutionEnvironment.canUseDOM) { + performance = window.performance || window.webkitPerformance; +} + +if (!performance || !performance.now) { + performance = Date; +} + +var performanceNow = performance.now.bind(performance); + +module.exports = performanceNow;