From: Piotr Kosko/Tizen API (PLT) /SRPOL/Engineer/Samsung Electronics Date: Wed, 16 Mar 2022 13:12:30 +0000 (+0100) Subject: [Messageport] Optimization of ports creation X-Git-Tag: submit/tizen/20220325.070959~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F30%2F272430%2F3;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Messageport] Optimization of ports creation [Verification] Code compiles without errors. Checked in chrome console, requesting same port name reuses previously constructed object. TCT passrate is 100%. Change-Id: Icd8c398dbbba2e7df0c767a8af0d339e06c1bba1 --- diff --git a/src/messageport/messageport_api.js b/src/messageport/messageport_api.js index 09391fc9..0fe58264 100755 --- a/src/messageport/messageport_api.js +++ b/src/messageport/messageport_api.js @@ -62,24 +62,26 @@ MessagePortManager.prototype.requestLocalMessagePort = function(localMessagePort ); } - var localPortId; // TODO remove - var nativeParam = { - localMessagePortName: args.localMessagePortName - }; - - var result = native_.callSync( - 'MessagePortManagerRequestLocalMessagePort', - nativeParam - ); + // call C++ layer only if port does not already exist + if (!ports[args.localMessagePortName]) { + var nativeParam = { + localMessagePortName: args.localMessagePortName + }; + + var result = native_.callSync( + 'MessagePortManagerRequestLocalMessagePort', + nativeParam + ); - if (native_.isSuccess(result)) { - var returnObject = new LocalMessagePort(args.localMessagePortName, false); - ports[nativeParam.localMessagePortName] = native_.getResultObject(result); - } else { - throw native_.getErrorObject(result); + if (native_.isSuccess(result)) { + var id = native_.getResultObject(result); + ports[nativeParam.localMessagePortName] = new LocalMessagePort(args.localMessagePortName, false, id); + } else { + throw native_.getErrorObject(result); + } } - return returnObject; + return args.localMessagePortName; }; MessagePortManager.prototype.requestTrustedLocalMessagePort = function( @@ -96,23 +98,26 @@ MessagePortManager.prototype.requestTrustedLocalMessagePort = function( ); } - var nativeParam = { - localMessagePortName: args.localMessagePortName - }; + // call C++ layer only if port does not already exist + if (!ports[args.localMessagePortName]) { + var nativeParam = { + localMessagePortName: args.localMessagePortName + }; - var result = native_.callSync( - 'MessagePortManagerRequestTrustedLocalMessagePort', - nativeParam - ); + var result = native_.callSync( + 'MessagePortManagerRequestTrustedLocalMessagePort', + nativeParam + ); - if (native_.isSuccess(result)) { - var returnObject = new LocalMessagePort(args.localMessagePortName, true); - ports[nativeParam.localMessagePortName] = native_.getResultObject(result); - } else { - throw native_.getErrorObject(result); + if (native_.isSuccess(result)) { + var id = native_.getResultObject(result); + ports[nativeParam.localMessagePortName] = new LocalMessagePort(args.localMessagePortName, true, id); + } else { + throw native_.getErrorObject(result); + } } - return returnObject; + return ports[args.localMessagePortName]; }; MessagePortManager.prototype.requestRemoteMessagePort = function( @@ -179,10 +184,11 @@ MessagePortManager.prototype.requestTrustedRemoteMessagePort = function( return returnObject; }; -function LocalMessagePort(messagePortName, isTrusted) { +function LocalMessagePort(messagePortName, isTrusted, id) { Object.defineProperties(this, { messagePortName: { value: messagePortName, writable: false, enumerable: true }, - isTrusted: { value: !!isTrusted, writable: false, enumerable: true } + isTrusted: { value: !!isTrusted, writable: false, enumerable: true }, + _id: { value: id, writable: false, enumerable: false } }); } @@ -193,7 +199,7 @@ LocalMessagePort.prototype.addMessagePortListener = function(listener) { native_.addListener(LOCAL_MESSAGE_PORT_LISTENER_ID, MessagePortChangeCallback); - var portId = ports[this.messagePortName]; + var portId = ports[this.messagePortName]._id; if (!callbacks.hasOwnProperty(portId)) callbacks[portId] = []; @@ -209,7 +215,7 @@ LocalMessagePort.prototype.removeMessagePortListener = function(watchId) { ]); var toDelete; - var listeners = callbacks[ports[this.messagePortName]]; + var listeners = callbacks[ports[this.messagePortName]._id]; for (var key in listeners) { var listenerId = listeners[key][1]; @@ -343,7 +349,7 @@ RemoteMessagePort.prototype.sendMessage = function() { data: filteredData, trusted: this.isTrusted, localPortId: args.localMessagePort - ? ports[args.localMessagePort.messagePortName] + ? ports[args.localMessagePort.messagePortName]._id : -1 };