@samitouri / QOS-React-2 / commits / ef95128ae2

Remove unnecessary indirection in events

Ben Alpert committed Oct 15, 2015 at 20:13 UTC ef95128ae28e77793330b391c4512532a58181c5
7 files changed +60 -77
src/renderers/dom/client/ReactBrowserEventEmitter.js
+1 -20
@@ -13,10 +13,8 @@
13 'use strict';
14
15 var EventConstants = require('EventConstants');
16 -var EventPluginHub = require('EventPluginHub');
16 var EventPluginRegistry = require('EventPluginRegistry');
17 var ReactEventEmitterMixin = require('ReactEventEmitterMixin');
19 -var ReactPerf = require('ReactPerf');
18 var ViewportMetrics = require('ViewportMetrics');
19
20 var assign = require('Object.assign');
@@ -166,7 +164,7 @@ function getListeningForDocument(mountAt) {
164 * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
165 * example:
166 *
169 - * ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);
167 + * EventPluginHub.putListener('myID', 'onClick', myFunction);
168 *
169 * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
170 *
@@ -360,23 +358,6 @@ var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {
358 }
359 },
360
363 - eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,
364 -
365 - registrationNameModules: EventPluginHub.registrationNameModules,
366 -
367 - putListener: EventPluginHub.putListener,
368 -
369 - getListener: EventPluginHub.getListener,
370 -
371 - deleteListener: EventPluginHub.deleteListener,
372 -
373 - deleteAllListeners: EventPluginHub.deleteAllListeners,
374 -
375 -});
376 -
377 -ReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {
378 - putListener: 'putListener',
379 - deleteListener: 'deleteListener',
361 });
362
363 module.exports = ReactBrowserEventEmitter;
src/renderers/dom/client/__tests__/ReactBrowserEventEmitter-test.js
+40 -43
@@ -25,6 +25,7 @@ var oldGetNode;
25 var oldGetFirstReactDOM;
26
27 var EventPluginHub;
28 +var EventPluginRegistry;
29 var ReactBrowserEventEmitter;
30 var ReactTestUtils;
31 var TapEventPlugin;
@@ -66,11 +67,10 @@ setID(PARENT, '.0.0.0');
67 setID(GRANDPARENT, '.0.0');
68
69 function registerSimpleTestHandler() {
69 - ReactBrowserEventEmitter.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER);
70 - var listener =
71 - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
70 + EventPluginHub.putListener(getID(CHILD), ON_CLICK_KEY, LISTENER);
71 + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
72 expect(listener).toEqual(LISTENER);
73 - return ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
73 + return EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
74 }
75
76
@@ -79,6 +79,7 @@ describe('ReactBrowserEventEmitter', function() {
79 require('mock-modules').dumpCache();
80 LISTENER.mockClear();
81 EventPluginHub = require('EventPluginHub');
82 + EventPluginRegistry = require('EventPluginRegistry');
83 TapEventPlugin = require('TapEventPlugin');
84 ReactMount = require('ReactMount');
85 EventListener = require('EventListener');
@@ -108,23 +109,20 @@ describe('ReactBrowserEventEmitter', function() {
109
110 it('should store a listener correctly', function() {
111 registerSimpleTestHandler();
111 - var listener =
112 - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
112 + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
113 expect(listener).toBe(LISTENER);
114 });
115
116 it('should retrieve a listener correctly', function() {
117 registerSimpleTestHandler();
118 - var listener =
119 - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
118 + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
119 expect(listener).toEqual(LISTENER);
120 });
121
122 it('should clear all handlers when asked to', function() {
123 registerSimpleTestHandler();
125 - ReactBrowserEventEmitter.deleteAllListeners(getID(CHILD));
126 - var listener =
127 - ReactBrowserEventEmitter.getListener(getID(CHILD), ON_CLICK_KEY);
124 + EventPluginHub.deleteAllListeners(getID(CHILD));
125 + var listener = EventPluginHub.getListener(getID(CHILD), ON_CLICK_KEY);
126 expect(listener).toBe(undefined);
127 });
128
@@ -148,17 +146,17 @@ describe('ReactBrowserEventEmitter', function() {
146 );
147
148 it('should bubble simply', function() {
151 - ReactBrowserEventEmitter.putListener(
149 + EventPluginHub.putListener(
150 getID(CHILD),
151 ON_CLICK_KEY,
152 recordID.bind(null, getID(CHILD))
153 );
156 - ReactBrowserEventEmitter.putListener(
154 + EventPluginHub.putListener(
155 getID(PARENT),
156 ON_CLICK_KEY,
157 recordID.bind(null, getID(PARENT))
158 );
161 - ReactBrowserEventEmitter.putListener(
159 + EventPluginHub.putListener(
160 getID(GRANDPARENT),
161 ON_CLICK_KEY,
162 recordID.bind(null, getID(GRANDPARENT))
@@ -171,12 +169,12 @@ describe('ReactBrowserEventEmitter', function() {
169 });
170
171 it('should continue bubbling if an error is thrown', function() {
174 - ReactBrowserEventEmitter.putListener(
172 + EventPluginHub.putListener(
173 getID(CHILD),
174 ON_CLICK_KEY,
175 recordID.bind(null, getID(CHILD))
176 );
179 - ReactBrowserEventEmitter.putListener(
177 + EventPluginHub.putListener(
178 getID(PARENT),
179 ON_CLICK_KEY,
180 function() {
@@ -184,7 +182,7 @@ describe('ReactBrowserEventEmitter', function() {
182 throw new Error('Handler interrupted');
183 }
184 );
187 - ReactBrowserEventEmitter.putListener(
185 + EventPluginHub.putListener(
186 getID(GRANDPARENT),
187 ON_CLICK_KEY,
188 recordID.bind(null, getID(GRANDPARENT))
@@ -199,7 +197,7 @@ describe('ReactBrowserEventEmitter', function() {
197 });
198
199 it('should set currentTarget', function() {
202 - ReactBrowserEventEmitter.putListener(
200 + EventPluginHub.putListener(
201 getID(CHILD),
202 ON_CLICK_KEY,
203 function(event) {
@@ -207,7 +205,7 @@ describe('ReactBrowserEventEmitter', function() {
205 expect(event.currentTarget).toBe(CHILD);
206 }
207 );
210 - ReactBrowserEventEmitter.putListener(
208 + EventPluginHub.putListener(
209 getID(PARENT),
210 ON_CLICK_KEY,
211 function(event) {
@@ -215,7 +213,7 @@ describe('ReactBrowserEventEmitter', function() {
213 expect(event.currentTarget).toBe(PARENT);
214 }
215 );
218 - ReactBrowserEventEmitter.putListener(
216 + EventPluginHub.putListener(
217 getID(GRANDPARENT),
218 ON_CLICK_KEY,
219 function(event) {
@@ -231,17 +229,17 @@ describe('ReactBrowserEventEmitter', function() {
229 });
230
231 it('should support stopPropagation()', function() {
234 - ReactBrowserEventEmitter.putListener(
232 + EventPluginHub.putListener(
233 getID(CHILD),
234 ON_CLICK_KEY,
235 recordID.bind(null, getID(CHILD))
236 );
239 - ReactBrowserEventEmitter.putListener(
237 + EventPluginHub.putListener(
238 getID(PARENT),
239 ON_CLICK_KEY,
240 recordIDAndStopPropagation.bind(null, getID(PARENT))
241 );
244 - ReactBrowserEventEmitter.putListener(
242 + EventPluginHub.putListener(
243 getID(GRANDPARENT),
244 ON_CLICK_KEY,
245 recordID.bind(null, getID(GRANDPARENT))
@@ -253,17 +251,17 @@ describe('ReactBrowserEventEmitter', function() {
251 });
252
253 it('should stop after first dispatch if stopPropagation', function() {
256 - ReactBrowserEventEmitter.putListener(
254 + EventPluginHub.putListener(
255 getID(CHILD),
256 ON_CLICK_KEY,
257 recordIDAndStopPropagation.bind(null, getID(CHILD))
258 );
261 - ReactBrowserEventEmitter.putListener(
259 + EventPluginHub.putListener(
260 getID(PARENT),
261 ON_CLICK_KEY,
262 recordID.bind(null, getID(PARENT))
263 );
266 - ReactBrowserEventEmitter.putListener(
264 + EventPluginHub.putListener(
265 getID(GRANDPARENT),
266 ON_CLICK_KEY,
267 recordID.bind(null, getID(GRANDPARENT))
@@ -274,17 +272,17 @@ describe('ReactBrowserEventEmitter', function() {
272 });
273
274 it('should not stopPropagation if false is returned', function() {
277 - ReactBrowserEventEmitter.putListener(
275 + EventPluginHub.putListener(
276 getID(CHILD),
277 ON_CLICK_KEY,
278 recordIDAndReturnFalse.bind(null, getID(CHILD))
279 );
282 - ReactBrowserEventEmitter.putListener(
280 + EventPluginHub.putListener(
281 getID(PARENT),
282 ON_CLICK_KEY,
283 recordID.bind(null, getID(PARENT))
284 );
287 - ReactBrowserEventEmitter.putListener(
285 + EventPluginHub.putListener(
286 getID(GRANDPARENT),
287 ON_CLICK_KEY,
288 recordID.bind(null, getID(GRANDPARENT))
@@ -310,14 +308,14 @@ describe('ReactBrowserEventEmitter', function() {
308 it('should invoke handlers that were removed while bubbling', function() {
309 var handleParentClick = mocks.getMockFunction();
310 var handleChildClick = function(event) {
313 - ReactBrowserEventEmitter.deleteAllListeners(getID(PARENT));
311 + EventPluginHub.deleteAllListeners(getID(PARENT));
312 };
315 - ReactBrowserEventEmitter.putListener(
313 + EventPluginHub.putListener(
314 getID(CHILD),
315 ON_CLICK_KEY,
316 handleChildClick
317 );
320 - ReactBrowserEventEmitter.putListener(
318 + EventPluginHub.putListener(
319 getID(PARENT),
320 ON_CLICK_KEY,
321 handleParentClick
@@ -329,13 +327,13 @@ describe('ReactBrowserEventEmitter', function() {
327 it('should not invoke newly inserted handlers while bubbling', function() {
328 var handleParentClick = mocks.getMockFunction();
329 var handleChildClick = function(event) {
332 - ReactBrowserEventEmitter.putListener(
330 + EventPluginHub.putListener(
331 getID(PARENT),
332 ON_CLICK_KEY,
333 handleParentClick
334 );
335 };
338 - ReactBrowserEventEmitter.putListener(
336 + EventPluginHub.putListener(
337 getID(CHILD),
338 ON_CLICK_KEY,
339 handleChildClick
@@ -345,7 +343,7 @@ describe('ReactBrowserEventEmitter', function() {
343 });
344
345 it('should have mouse enter simulated by test utils', function() {
348 - ReactBrowserEventEmitter.putListener(
346 + EventPluginHub.putListener(
347 getID(CHILD),
348 ON_MOUSE_ENTER_KEY,
349 recordID.bind(null, getID(CHILD))
@@ -356,7 +354,7 @@ describe('ReactBrowserEventEmitter', function() {
354 });
355
356 it('should infer onTouchTap from a touchStart/End', function() {
359 - ReactBrowserEventEmitter.putListener(
357 + EventPluginHub.putListener(
358 getID(CHILD),
359 ON_TOUCH_TAP_KEY,
360 recordID.bind(null, getID(CHILD))
@@ -374,7 +372,7 @@ describe('ReactBrowserEventEmitter', function() {
372 });
373
374 it('should infer onTouchTap from when dragging below threshold', function() {
377 - ReactBrowserEventEmitter.putListener(
375 + EventPluginHub.putListener(
376 getID(CHILD),
377 ON_TOUCH_TAP_KEY,
378 recordID.bind(null, getID(CHILD))
@@ -392,7 +390,7 @@ describe('ReactBrowserEventEmitter', function() {
390 });
391
392 it('should not onTouchTap from when dragging beyond threshold', function() {
395 - ReactBrowserEventEmitter.putListener(
393 + EventPluginHub.putListener(
394 getID(CHILD),
395 ON_TOUCH_TAP_KEY,
396 recordID.bind(null, getID(CHILD))
@@ -439,8 +437,7 @@ describe('ReactBrowserEventEmitter', function() {
437 setEventListeners.push(captureCalls[i][1]);
438 }
439
442 - var module =
443 - ReactBrowserEventEmitter.registrationNameModules[ON_CHANGE_KEY];
440 + var module = EventPluginRegistry.registrationNameModules[ON_CHANGE_KEY];
441 var dependencies = module.eventTypes.change.dependencies;
442 expect(setEventListeners.length).toEqual(dependencies.length);
443
@@ -450,17 +447,17 @@ describe('ReactBrowserEventEmitter', function() {
447 });
448
449 it('should bubble onTouchTap', function() {
453 - ReactBrowserEventEmitter.putListener(
450 + EventPluginHub.putListener(
451 getID(CHILD),
452 ON_TOUCH_TAP_KEY,
453 recordID.bind(null, getID(CHILD))
454 );
458 - ReactBrowserEventEmitter.putListener(
455 + EventPluginHub.putListener(
456 getID(PARENT),
457 ON_TOUCH_TAP_KEY,
458 recordID.bind(null, getID(PARENT))
459 );
463 - ReactBrowserEventEmitter.putListener(
460 + EventPluginHub.putListener(
461 getID(GRANDPARENT),
462 ON_TOUCH_TAP_KEY,
463 recordID.bind(null, getID(GRANDPARENT))
src/renderers/dom/shared/ReactDOMComponent.js
+6 -4
@@ -20,6 +20,8 @@ var DOMNamespaces = require('DOMNamespaces');
20 var DOMProperty = require('DOMProperty');
21 var DOMPropertyOperations = require('DOMPropertyOperations');
22 var EventConstants = require('EventConstants');
23 +var EventPluginHub = require('EventPluginHub');
24 +var EventPluginRegistry = require('EventPluginRegistry');
25 var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
26 var ReactComponentBrowserEnvironment =
27 require('ReactComponentBrowserEnvironment');
@@ -45,9 +47,9 @@ var shallowEqual = require('shallowEqual');
47 var validateDOMNesting = require('validateDOMNesting');
48 var warning = require('warning');
49
48 -var deleteListener = ReactBrowserEventEmitter.deleteListener;
50 +var deleteListener = EventPluginHub.deleteListener;
51 var listenTo = ReactBrowserEventEmitter.listenTo;
50 -var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;
52 +var registrationNameModules = EventPluginRegistry.registrationNameModules;
53
54 // For quickly matching children type, to test if can be treated as content.
55 var CONTENT_TYPES = {'string': true, 'number': true};
@@ -312,7 +314,7 @@ function enqueuePutListener(id, registrationName, listener, transaction) {
314
315 function putListener() {
316 var listenerToPut = this;
315 - ReactBrowserEventEmitter.putListener(
317 + EventPluginHub.putListener(
318 listenerToPut.id,
319 listenerToPut.registrationName,
320 listenerToPut.listener
@@ -1122,7 +1124,7 @@ ReactDOMComponent.Mixin = {
1124 this._nativeNode = null;
1125
1126 this.unmountChildren();
1125 - ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);
1127 + EventPluginHub.deleteAllListeners(this._rootNodeID);
1128 ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
1129 this._rootNodeID = null;
1130 this._wrapperState = null;
src/renderers/dom/shared/__tests__/ReactDOMComponent-test.js
+3 -3
@@ -819,7 +819,7 @@ describe('ReactDOMComponent', function() {
819
820 describe('unmountComponent', function() {
821 it('should clean up listeners', function() {
822 - var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
822 + var EventPluginHub = require('EventPluginHub');
823 var ReactMount = require('ReactMount');
824
825 var container = document.createElement('div');
@@ -832,14 +832,14 @@ describe('ReactDOMComponent', function() {
832 var rootNode = ReactDOM.findDOMNode(instance);
833 var rootNodeID = ReactMount.getID(rootNode);
834 expect(
835 - ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick')
835 + EventPluginHub.getListener(rootNodeID, 'onClick')
836 ).toBe(callback);
837 expect(rootNode).toBe(ReactDOM.findDOMNode(instance));
838
839 ReactDOM.unmountComponentAtNode(container);
840
841 expect(
842 - ReactBrowserEventEmitter.getListener(rootNodeID, 'onClick')
842 + EventPluginHub.getListener(rootNodeID, 'onClick')
843 ).toBe(undefined);
844 });
845 });
src/renderers/shared/event/EventPluginHub.js
+6 -4
@@ -14,6 +14,7 @@
14 var EventPluginRegistry = require('EventPluginRegistry');
15 var EventPluginUtils = require('EventPluginUtils');
16 var ReactErrorUtils = require('ReactErrorUtils');
17 +var ReactPerf = require('ReactPerf');
18
19 var accumulateInto = require('accumulateInto');
20 var forEachAccumulated = require('forEachAccumulated');
@@ -137,10 +138,6 @@ var EventPluginHub = {
138
139 },
140
140 - eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,
141 -
142 - registrationNameModules: EventPluginRegistry.registrationNameModules,
143 -
141 /**
142 * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
143 *
@@ -311,4 +308,9 @@ var EventPluginHub = {
308
309 };
310
311 +ReactPerf.measureMethods(EventPluginHub, 'EventPluginHub', {
312 + putListener: 'putListener',
313 + deleteListener: 'deleteListener',
314 +});
315 +
316 module.exports = EventPluginHub;
src/test/ReactDefaultPerf.js
+1 -1
@@ -165,7 +165,7 @@ var ReactDefaultPerf = {
165 ].totalTime = performanceNow() - start;
166 return rv;
167 } else if (fnName === '_mountImageIntoNode' ||
168 - moduleName === 'ReactBrowserEventEmitter' ||
168 + moduleName === 'EventPluginHub' ||
169 moduleName === 'ReactDOMIDOperations' ||
170 moduleName === 'CSSPropertyOperations' ||
171 moduleName === 'DOMChildrenOperations' ||
src/test/ReactTestUtils.js
+3 -2
@@ -14,6 +14,7 @@
14 var ClientReactRootIndex = require('ClientReactRootIndex');
15 var EventConstants = require('EventConstants');
16 var EventPluginHub = require('EventPluginHub');
17 +var EventPluginRegistry = require('EventPluginRegistry');
18 var EventPropagators = require('EventPropagators');
19 var React = require('React');
20 var ReactDOM = require('ReactDOM');
@@ -474,7 +475,7 @@ function makeSimulator(eventType) {
475 }
476
477 var dispatchConfig =
477 - ReactBrowserEventEmitter.eventNameDispatchConfigs[eventType];
478 + EventPluginRegistry.eventNameDispatchConfigs[eventType];
479
480 var fakeNativeEvent = new Event();
481 fakeNativeEvent.target = node;
@@ -505,7 +506,7 @@ function buildSimulators() {
506 ReactTestUtils.Simulate = {};
507
508 var eventType;
508 - for (eventType in ReactBrowserEventEmitter.eventNameDispatchConfigs) {
509 + for (eventType in EventPluginRegistry.eventNameDispatchConfigs) {
510 /**
511 * @param {!Element|ReactDOMComponent} domComponentOrNode
512 * @param {?object} eventData Fake event data to use in SyntheticEvent.