Ben Alpert
844ca8b6b2
benchmarking: measure and analyze scripts
...
This uses wall-clock time (for now) so it's noisier than alternatives
(cachegrind, CPU perf-counters), but it's still valuable. In a future diff we
can make it use those.
`measure.py` outputs something that `analyze.py` can understand, but you can use `analyze.py` without `measure.py` too. The file format is simple:
```
$ cat measurements.txt
factory_ms_jsc_jit 13.580322265625
factory_ms_jsc_jit 13.659912109375
factory_ms_jsc_jit 13.67919921875
factory_ms_jsc_nojit 12.827880859375
factory_ms_jsc_nojit 13.105224609375
factory_ms_jsc_nojit 13.195068359375
factory_ms_node 40.4891400039196
factory_ms_node 40.6669420003891
factory_ms_node 43.52413299679756
ssr_pe_cold_ms_jsc_jit 43.06005859375
...
```
(The lines do not need to be sorted.)
Comparing 0.14.0 vs master:
```
$ ./measure.py react-0.14.0.min.js >014.txt
Measuring SSR for PE benchmark (30 trials)
..............................
Measuring SSR for PE with warm JIT (3 slow trials)
...
$ ./measure.py react.min.js >master.txt
Measuring SSR for PE benchmark (30 trials)
..............................
Measuring SSR for PE with warm JIT (3 slow trials)
...
$ ./analyze.py 014.txt master.txt
Comparing 014.txt (control) vs master.txt (test)
Significant differences marked by ***
% change from control to test, with 99% CIs:
* factory_ms_jsc_jit
% change: -0.56% [ -2.51%, +1.39%]
means: 14.037 (control), 13.9593 (test)
* factory_ms_jsc_nojit
% change: +1.23% [ -1.18%, +3.64%]
means: 13.2586 (control), 13.4223 (test)
* factory_ms_node
% change: +3.53% [ +0.29%, +6.77%] ***
means: 42.0529 (control), 43.54 (test)
* ssr_pe_cold_ms_jsc_jit
% change: -6.84% [ -9.04%, -4.65%] ***
means: 44.2444 (control), 41.2187 (test)
* ssr_pe_cold_ms_jsc_nojit
% change: -11.81% [-14.66%, -8.96%] ***
means: 52.9449 (control), 46.6953 (test)
* ssr_pe_cold_ms_node
% change: -2.70% [ -4.52%, -0.88%] ***
means: 96.8909 (control), 94.2741 (test)
* ssr_pe_warm_ms_jsc_jit
% change: -17.60% [-22.04%, -13.16%] ***
means: 13.763 (control), 11.3439 (test)
* ssr_pe_warm_ms_jsc_nojit
% change: -20.65% [-22.62%, -18.68%] ***
means: 30.8829 (control), 24.5074 (test)
* ssr_pe_warm_ms_node
% change: -8.76% [-13.48%, -4.03%] ***
means: 30.0193 (control), 27.3964 (test)
$
```
2015-11-18 16:26:01 -08:00
Ben Alpert
c525732147
Merge pull request #5023 from spicyj/jsc-perf
...
Add rudimentary jsc perf-counters runner
2015-10-30 17:06:30 -07:00
Paul O’Shannessy
b5d90f8c6b
Merge pull request #5331 from tbroadley/typescript-test-windows
...
Fix for TypeScript test on Windows
2015-10-30 15:45:51 -07:00
Thomas Broadley
d77e161f99
use path library to normalize filepath
2015-10-31 07:38:47 +09:00
Paul O’Shannessy
f02584d807
Merge pull request #5300 from zpao/lint-eqeqeq
...
[lint] Make eqeqeq a failure
2015-10-29 23:06:44 -07:00
Thomas Broadley
d80710b0ae
fix for TypeScript test on Windows
2015-10-30 10:22:50 +09:00
Ben Alpert
e849819cb6
Add a simple initial-render benchmark test case
2015-10-28 13:14:24 -07:00
Paul O’Shannessy
ad00a6e672
[lint] Make eqeqeq a failure
2015-10-27 15:39:54 -07:00
Ben Alpert
3b28c72142
Add rudimentary jsc perf-counters runner
...
Works at least on a CentOS 7 machine after running `sudo yum install
webkitgtk webkitgtk-devel`.
The only globals you get are `print` and `PerfCounters`. No `console` nor the other globals provided by the `jsc` command-line tool (load, readFile, etc) though they're probably not hard to implement.
You can disable the JIT by setting the environment variable `JSC_useJIT=false`.
Test Plan:
```
~/local/react/scripts/perf-counters$ make
~/local/react/scripts/perf-counters$ build/jsc-perf <(echo 'PerfCounters.init(); var a = PerfCounters.getCounters().instructions; print("moo"); var b = PerfCounters.getCounters().instructions; print(b - a);')
moo
72182
~/local/react/scripts/perf-counters$
```
2015-09-30 23:36:06 -07:00
Sebastian Markbage
41cba2e77b
Enforce NODE_ENV=test
...
You could make the argument that this should be optional, but it doesn't
work without it so we might as well just enforce it.
Makes `jest` work by default.
2015-09-30 17:43:06 -07:00
Ben Alpert
b8c7b13042
Fail jest tests on any un-spied warnings
...
Originally #4223 -- we lost this when we switched to jest.
2015-09-29 17:35:39 -07:00
Paul O’Shannessy
873e3a9816
Cleanup Jest preprocessor, use cache key
2015-09-23 13:46:41 -07:00
Paul O’Shannessy
2afc9a445f
Upgrade to node@4, jest@0.5
2015-09-23 13:46:41 -07:00
Ben Alpert
b3bccf2273
Add node bindings
2015-09-19 11:30:28 -07:00
Ben Alpert
e922f869e6
Make hardware-counter.cpp compile
...
`g++ -std=c++11 -lpthread src/hardware-counter.cpp
src/thread-local.cpp src/test.cpp` works and runs where `src/test.cpp` is:
```
int main() {
bool enable = true;
std::string events = "";
bool recordSubprocesses = false;
HPHP::HardwareCounter::Init(enable, events, recordSubprocesses);
HPHP::HardwareCounter::s_counter.getCheck();
int64_t start = HPHP::HardwareCounter::GetInstructionCount();
volatile int x;
for (int i = 0; i < 1000000; i++) {
x += i;
}
int64_t end = HPHP::HardwareCounter::GetInstructionCount();
printf("%d\n", end - start);
}
```
2015-09-19 11:00:27 -07:00
Ben Alpert
42e523ea4d
Update license to match React repo license
2015-09-19 11:00:27 -07:00
Ben Alpert
cfbf115b26
Add hardware-counter.cpp and deps from HHVM
2015-09-18 22:10:10 -07:00
Ben Alpert
c74977c091
Remove leftover env variable logic in pre-commit hook
2015-09-01 14:35:47 -07:00
Ben Alpert
d9d8aae33e
Merge pull request #4763 from spicyj/pre-commit
...
Add linting pre-commit hook
2015-09-01 14:33:49 -07:00
Ben Alpert
31cb102650
Merge pull request #4762 from spicyj/ts
...
Make TypeScript test work with ReactDOM
2015-09-01 14:30:56 -07:00
Ben Alpert
25fec05ab4
Add linting pre-commit hook
...
Anyone who wants it will have to do
```
ln -s scripts/git/pre-commit .git/hooks/pre-commit
```
or similar.
2015-09-01 14:29:52 -07:00
Ben Alpert
589c8364b0
Make TypeScript test work with ReactDOM
2015-09-01 14:28:12 -07:00
Paul O’Shannessy
52b4c9eabf
Upgrade to fbjs, fbjs-scripts @ 0.2
2015-08-31 17:19:42 -07:00
Paul O’Shannessy
ec9b866bc0
Check for compatible node,npm versions on install
...
This is only for building React and doesnn't apply to production installs.
2015-08-18 23:45:12 -07:00
Ben Alpert
a8b6c8292b
hax to make jest fast
...
Turns out jest is _incredibly_ slow at resolving require paths like `require('fbjs/lib/foo')`. Like several milliseconds per require. Really adds up when all our files require `invariant` and `warning`. Here's a temporary hack to make things fast again.
Test Plan:
```
npm test src/renderers/shared/reconciler/__tests__/ReactCompositeComponent-test.js
```
has a self-proclaimed runtime of ~8 seconds now instead of ~35 seconds.
2015-08-18 21:40:58 -07:00
Paul O’Shannessy
ecb34de574
Upgrade ESLint, fix code
2015-08-10 17:04:29 -07:00
Paul O’Shannessy
be5c09c24d
Update fbjs dependency
...
- remove a file that got moved over there
- update for renamed babel transform
2015-07-27 13:37:48 -07:00
Paul O’Shannessy
1d0c1b1817
Use fbjs package from npm, gulp
...
This reworks a few things in building and distributing React. The biggest change is using fbjs to share dependencies with other libraries. We're also using Gulp for some build steps.
2015-07-23 15:48:02 -07:00
Paul O’Shannessy
63b58cf6b5
AUTHORS
...
Created a .mailmap file with all of the associations, then used
git + perl to create the AUTHORS file. In theory these should all get
picked up by npm.
I used ABC order so it would remain unbiased and automatable. I wish we
could go back and fill out the history or at least fix the commits we
have from CommitSyncScript, but oh well.
This also includes the script I used to automate this process in the
future.
2013-09-09 23:42:54 -07:00