[Messageport] Optimization of ports creation 30/272430/3
authorPiotr Kosko/Tizen API (PLT) /SRPOL/Engineer/Samsung Electronics <p.kosko@samsung.com>
Wed, 16 Mar 2022 13:12:30 +0000 (14:12 +0100)
committerPiotr Kosko/Tizen API (PLT) /SRPOL/Engineer/Samsung Electronics <p.kosko@samsung.com>
Fri, 18 Mar 2022 12:59:02 +0000 (13:59 +0100)
[Verification] Code compiles without errors.
Checked in chrome console, requesting same port name reuses previously
constructed object.
TCT passrate is 100%.

Change-Id: Icd8c398dbbba2e7df0c767a8af0d339e06c1bba1

src/messageport/messageport_api.js

index 09391fc..0fe5826 100755 (executable)
@@ -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
     };