Skip to content

Commit

Permalink
Make ReactDefaultPerf work server-side
Browse files Browse the repository at this point in the history
We were reading from window which was throwing when ReactDefaultPerf was injected.
  • Loading branch information
petehunt authored and zpao committed Aug 30, 2013
1 parent 4d8f044 commit c41e86c
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 14 deletions.
19 changes: 5 additions & 14 deletions src/test/ReactDefaultPerf.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

"use strict";

var performanceNow = require('performanceNow');

var ReactDefaultPerf = {};

if (__DEV__) {
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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;
};
Expand Down Expand Up @@ -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;
42 changes: 42 additions & 0 deletions src/test/performanceNow.js
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit c41e86c

Please sign in to comment.