From 8dcee62be937311e387b17cfa2c901dfe2a2d03c Mon Sep 17 00:00:00 2001 From: Spencer Ahrens Date: Wed, 17 Jul 2019 14:05:43 -0700 Subject: [PATCH] Use `Map`s instead of `Object`s for `MessageQueue` callbacks Summary: This lead to exceeding the Object property count limit in Hermes: ``` Unhandled JS Exception: Property storage can't accommodate 254464 properties, js engine: hermes ``` Reviewed By: PeteTheHeat Differential Revision: D16212572 fbshipit-source-id: 8fcedb55ebd1f8b289ec759ea1ad4e81cf903dfd --- Libraries/BatchedBridge/MessageQueue.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Libraries/BatchedBridge/MessageQueue.js b/Libraries/BatchedBridge/MessageQueue.js index 7347df36121..935bde9a512 100644 --- a/Libraries/BatchedBridge/MessageQueue.js +++ b/Libraries/BatchedBridge/MessageQueue.js @@ -40,8 +40,8 @@ const DEBUG_INFO_LIMIT = 32; class MessageQueue { _lazyCallableModules: {[key: string]: (void) => Object}; _queue: [number[], number[], any[], number]; - _successCallbacks: {[key: number]: ?Function}; - _failureCallbacks: {[key: number]: ?Function}; + _successCallbacks: Map; + _failureCallbacks: Map; _callID: number; _lastFlush: number; _eventLoopStartTime: number; @@ -56,8 +56,8 @@ class MessageQueue { constructor() { this._lazyCallableModules = {}; this._queue = [[], [], [], 0]; - this._successCallbacks = {}; - this._failureCallbacks = {}; + this._successCallbacks = new Map(); + this._failureCallbacks = new Map(); this._callID = 0; this._lastFlush = 0; this._eventLoopStartTime = Date.now(); @@ -217,8 +217,8 @@ class MessageQueue { onFail && params.push(this._callID << 1); // eslint-disable-next-line no-bitwise onSucc && params.push((this._callID << 1) | 1); - this._successCallbacks[this._callID] = onSucc; - this._failureCallbacks[this._callID] = onFail; + this._successCallbacks.set(this._callID, onSucc); + this._failureCallbacks.set(this._callID, onFail); } if (__DEV__) { global.nativeTraceBeginAsyncFlow && @@ -423,8 +423,8 @@ class MessageQueue { // eslint-disable-next-line no-bitwise const isSuccess = cbID & 1; const callback = isSuccess - ? this._successCallbacks[callID] - : this._failureCallbacks[callID]; + ? this._successCallbacks.get(callID) + : this._failureCallbacks.get(callID); if (__DEV__) { const debug = this._debugInfo[callID]; @@ -453,8 +453,8 @@ class MessageQueue { return; } - delete this._successCallbacks[callID]; - delete this._failureCallbacks[callID]; + this._successCallbacks.delete(callID); + this._failureCallbacks.delete(callID); callback(...args); if (__DEV__) {