Fix irregular java TC crashes.
authorChanhee Lee <ch2102.lee@samsung.com>
Tue, 26 Oct 2021 01:18:29 +0000 (10:18 +0900)
committerYoungjae Shin <yj99.shin@samsung.com>
Thu, 28 Oct 2021 10:51:40 +0000 (19:51 +0900)
Change-Id: Ic0d17d73971093e32c0923498c166c1a1f2956e0

subprojects/libbeyond-android/src/androidTest/java/com/samsung/android/beyond/InferenceUnitTest/InferenceAsyncTest.java
subprojects/libbeyond-android/src/androidTest/java/com/samsung/android/beyond/InferenceUnitTest/InferenceHandlerUnitTest.java
subprojects/libbeyond-android/src/androidTest/java/com/samsung/android/beyond/InferenceUnitTest/InferencePeerUnitTest.java
subprojects/libbeyond-android/src/androidTest/java/com/samsung/android/beyond/InferenceUnitTest/TensorHandlerUnitTest.java
subprojects/libbeyond-android/src/main/java/com/samsung/android/beyond/inference/InferenceHandler.java
subprojects/libbeyond-android/src/main/java/com/samsung/android/beyond/inference/Peer.java
subprojects/libbeyond-android/src/main/java/com/samsung/android/beyond/inference/PeerInfo.java [new file with mode: 0644]
subprojects/libbeyond-android/src/main/jni/inference/beyond-inference_jni.cc
subprojects/libbeyond-android/src/main/jni/inference/beyond-inference_jni.h
subprojects/libbeyond-android/src/main/jni/inference/beyond-peer_jni.cc

index 255fb6967632baa6597d96e3a497c539b25cda37..df69151580eded0ea83e162e7bd390e916eedbbf 100644 (file)
@@ -45,12 +45,14 @@ import com.samsung.android.beyond.inference.InferenceMode;
 import com.samsung.android.beyond.inference.InferenceModuleFactory;
 import com.samsung.android.beyond.inference.TensorOutputCallback;
 import com.samsung.android.beyond.inference.Peer;
+import com.samsung.android.beyond.inference.PeerInfo;
 import com.samsung.android.beyond.inference.tensor.Tensor;
 import com.samsung.android.beyond.inference.tensor.TensorHandler;
 import com.samsung.android.beyond.inference.tensor.TensorInfo;
 import com.samsung.android.beyond.inference.tensor.TensorSet;
 import com.samsung.android.beyond.module.peer.NN.NNModule;
 
+import org.junit.After;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -62,12 +64,14 @@ public class InferenceAsyncTest {
 
     private static String modelAbsolutePath = null;
 
+    private Peer serverPeer = null;
+
+    private Peer inferencePeer = null;
+
     private InferenceHandler inferenceHandler = null;
 
     private TensorHandler tensorHandler = null;
 
-    private Peer inferencePeer = null;
-
     @BeforeClass
     public static void initialize() {
         context = getInstrumentation().getContext();
@@ -83,10 +87,7 @@ public class InferenceAsyncTest {
 
     @Test
     public void testAsyncSetOutputCallback() {
-        inferenceHandler = InferenceModuleFactory.createHandler(InferenceMode.REMOTE);
-        assertNotNull(inferenceHandler);
-
-        Peer serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
         assertNotNull(serverPeer);
         assertTrue(serverPeer.setInfo());
         assertTrue(serverPeer.activateControlChannel());
@@ -106,10 +107,10 @@ public class InferenceAsyncTest {
             assert(false);
         }
 
-        Peer.Info info = new Peer.Info();
-        info.host = TEST_SERVER_IP;
-        info.port = TEST_SERVER_PORT;
-        assertTrue(inferencePeer.setInfo(info));
+        assertTrue(inferencePeer.setInfo(new PeerInfo(TEST_SERVER_IP, TEST_SERVER_PORT)));
+
+        inferenceHandler = InferenceModuleFactory.createHandler(InferenceMode.REMOTE);
+        assertNotNull(inferenceHandler);
         assertTrue(inferenceHandler.addInferencePeer(inferencePeer));   // Cover activateControlChannel()
         assertTrue(inferenceHandler.loadModel(modelAbsolutePath));
         assertTrue(inferenceHandler.prepare());
@@ -161,7 +162,17 @@ public class InferenceAsyncTest {
         assertTrue(inferenceHandler.run(inputTensorSet));
 
         Looper.loop();
+    }
 
+    @After
+    public void destroyInferenceModules() {
         assertTrue(inferencePeer.deactivateControlChannel());
+        assertTrue(serverPeer.deactivateControlChannel());
+
+        assertTrue(inferenceHandler.removeInferencePeer(inferencePeer));
+
+        serverPeer.close();
+        inferencePeer.close();
+        inferenceHandler.close();
     }
 }
index fda655a791f3f00b0ca658cd6cefd5479292a141..dd42e5294245f3013acc2ec97933426731cd34d8 100644 (file)
@@ -22,12 +22,14 @@ import com.samsung.android.beyond.inference.InferenceHandler;
 import com.samsung.android.beyond.inference.InferenceMode;
 import com.samsung.android.beyond.inference.InferenceModuleFactory;
 import com.samsung.android.beyond.inference.Peer;
+import com.samsung.android.beyond.inference.PeerInfo;
 import com.samsung.android.beyond.inference.tensor.Tensor;
 import com.samsung.android.beyond.inference.tensor.TensorHandler;
 import com.samsung.android.beyond.inference.tensor.TensorInfo;
 import com.samsung.android.beyond.inference.tensor.TensorSet;
 import com.samsung.android.beyond.module.peer.NN.NNModule;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -54,12 +56,14 @@ public class InferenceHandlerUnitTest {
 
     private static String modelAbsolutePath = null;
 
+    private Peer serverPeer = null;
+
+    private Peer inferencePeer = null;
+
     private InferenceHandler inferenceHandler = null;
 
     private TensorHandler tensorHandler = null;
 
-    private Peer inferencePeer = null;
-
     @BeforeClass
     public static void initialize() {
         context = getInstrumentation().getContext();
@@ -69,10 +73,7 @@ public class InferenceHandlerUnitTest {
 
     @Before
     public void prepareInferenceModules() {
-        inferenceHandler = InferenceModuleFactory.createHandler(InferenceMode.REMOTE);
-        assertNotNull(inferenceHandler);
-
-        Peer serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
         assertNotNull(serverPeer);
         assertTrue(serverPeer.setInfo());
         assertTrue(serverPeer.activateControlChannel());
@@ -80,17 +81,15 @@ public class InferenceHandlerUnitTest {
         inferencePeer = InferenceModuleFactory.createPeerClient(context, NNModule.NAME);
         assertNotNull(inferencePeer);
 
-        Peer.Info info = new Peer.Info();
-        info.host = TEST_SERVER_IP;
-        info.port = TEST_SERVER_PORT;
-        assertTrue(inferencePeer.setInfo(info));
+        assertTrue(inferencePeer.setInfo(new PeerInfo(TEST_SERVER_IP, TEST_SERVER_PORT)));
+
+        inferenceHandler = InferenceModuleFactory.createHandler(InferenceMode.REMOTE);
+        assertNotNull(inferenceHandler);
     }
 
     @Test
     public void testAddInferencePeer() {
         assertTrue(inferenceHandler.addInferencePeer(inferencePeer));   // Cover activateControlChannel()
-
-        assertTrue(inferencePeer.deactivateControlChannel());
     }
 
     @Test
@@ -98,8 +97,6 @@ public class InferenceHandlerUnitTest {
         assertTrue(inferenceHandler.addInferencePeer(inferencePeer));   // Cover activateControlChannel()
 
         assertTrue(inferenceHandler.loadModel(modelAbsolutePath));
-
-        assertTrue(inferencePeer.deactivateControlChannel());
     }
 
     @Test
@@ -108,8 +105,6 @@ public class InferenceHandlerUnitTest {
         assertTrue(inferenceHandler.loadModel(modelAbsolutePath));
 
         assertTrue(inferenceHandler.prepare());
-
-        assertTrue(inferencePeer.deactivateControlChannel());
     }
 
     @Test
@@ -137,7 +132,17 @@ public class InferenceHandlerUnitTest {
         }
 
         assertTrue(inferenceHandler.run(inputTensorSet));
+    }
 
+    @After
+    public void destroyInferenceModules() {
         assertTrue(inferencePeer.deactivateControlChannel());
+        assertTrue(serverPeer.deactivateControlChannel());
+
+        assertTrue(inferenceHandler.removeInferencePeer(inferencePeer));
+
+        serverPeer.close();
+        inferencePeer.close();
+        inferenceHandler.close();
     }
 }
index 2822a3a35e0f4ce1ec6efe3a566fee74d872c06c..d50f03abe87cdac66ec0dbeede9ec5b0014d0915 100644 (file)
@@ -22,6 +22,7 @@ import com.samsung.android.beyond.ConfigType;
 import com.samsung.android.beyond.authenticator.Authenticator;
 import com.samsung.android.beyond.inference.InferenceModuleFactory;
 import com.samsung.android.beyond.inference.Peer;
+import com.samsung.android.beyond.inference.PeerInfo;
 import com.samsung.android.beyond.module.authenticator.SSL.SSLModule;
 import com.samsung.android.beyond.module.peer.NN.NNModule;
 
@@ -38,6 +39,8 @@ public class InferencePeerUnitTest {
 
     private static Context context;
 
+    private Peer serverPeer = null;
+
     private Peer inferencePeer = null;
 
     @BeforeClass
@@ -47,34 +50,44 @@ public class InferencePeerUnitTest {
 
     @Test
     public void testCreatePeerServer() {
-        inferencePeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
-        assertNotNull(inferencePeer);
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        assertNotNull(serverPeer);
+
+        serverPeer.close();
     }
 
     @Test
     public void testPeerServerSetInfo() {
-        inferencePeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
 
-        assertEquals(true, inferencePeer.setInfo());
+        assertEquals(true, serverPeer.setInfo());
+
+        serverPeer.close();
     }
 
     @Test
     public void testPeerServerGetInfo() {
-        inferencePeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
-        inferencePeer.setInfo();
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        serverPeer.setInfo();
 
-        Peer.Info info = inferencePeer.getInfo();
+        PeerInfo info = serverPeer.getInfo();
         assertNotNull(info);
-        assertEquals(info.port, 3000);
-        assertEquals(info.host, "0.0.0.0");
+        assertEquals(info.getHost(), "0.0.0.0");
+        assertEquals(info.getPort(), 3000);
+
+        serverPeer.close();
     }
 
     @Test
-    public void testPeerServerActivateControlChannel() {
-        inferencePeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
-        inferencePeer.setInfo();
+    public void testPeerServerActivateAndDeactivateControlChannel() {
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        serverPeer.setInfo();
 
-        assertEquals(true, inferencePeer.activateControlChannel());
+        assertEquals(true, serverPeer.activateControlChannel());
+
+        assertEquals(true, serverPeer.deactivateControlChannel());
+
+        serverPeer.close();
     }
 
     @Test
@@ -88,26 +101,18 @@ public class InferencePeerUnitTest {
         assertTrue(auth.activate());
         assertTrue(auth.prepare());
 
-        inferencePeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
-        assertNotNull(inferencePeer);
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        assertNotNull(serverPeer);
 
-        boolean status = inferencePeer.configure(ConfigType.AUTHENTICATOR, auth);
+        boolean status = serverPeer.configure(ConfigType.AUTHENTICATOR, auth);
         assertTrue(status);
 
         // TODO:
         // GC the inferencePeer and destroy its native instance
-        inferencePeer = null;
         auth.close();
         auth = null;
-    }
 
-    @Test
-    public void testPeerServerDeactivateControlChannel() {
-        inferencePeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
-        inferencePeer.setInfo();
-        inferencePeer.activateControlChannel();
-
-        assertEquals(true, inferencePeer.deactivateControlChannel());
+        serverPeer.close();
     }
 
     @Test
@@ -115,38 +120,34 @@ public class InferencePeerUnitTest {
         inferencePeer = InferenceModuleFactory.createPeerClient(context, NNModule.NAME);
 
         assertNotNull(inferencePeer);
+
+        inferencePeer.close();
     }
 
     @Test
     public void testPeerClientSetInfo() {
         inferencePeer = InferenceModuleFactory.createPeerClient(context, NNModule.NAME);
-        Peer.Info info = new Peer.Info();
-        info.host = TEST_SERVER_IP;
-        info.port = TEST_SERVER_PORT;
+        PeerInfo info = new PeerInfo(TEST_SERVER_IP, TEST_SERVER_PORT);
         assertEquals(true, inferencePeer.setInfo(info));
-    }
 
-    @Test
-    public void testPeerClientActivateControlChannel() {
-        inferencePeer = InferenceModuleFactory.createPeerClient(context, NNModule.NAME);
-        Peer.Info info = new Peer.Info();
-        info.host = TEST_SERVER_IP;
-        info.port = TEST_SERVER_PORT;
-        inferencePeer.setInfo(info);
-
-        assertEquals(true, inferencePeer.activateControlChannel());
+        inferencePeer.close();
     }
 
     @Test
-    public void testPeerClientDeactivateControlChannel() {
-        Peer serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+    public void testPeerClientActivateAndDeactivateControlChannel() {
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
         serverPeer.setInfo();
         serverPeer.activateControlChannel();
 
         inferencePeer = InferenceModuleFactory.createPeerClient(context, NNModule.NAME);
-        inferencePeer.setInfo();
-        inferencePeer.activateControlChannel();
+        inferencePeer.setInfo(new PeerInfo(TEST_SERVER_IP, TEST_SERVER_PORT));
+
+        assertEquals(true, inferencePeer.activateControlChannel());
+
+        assertTrue(inferencePeer.deactivateControlChannel());
+        assertTrue(serverPeer.deactivateControlChannel());
 
-        assertEquals(true, inferencePeer.deactivateControlChannel());
+        inferencePeer.close();
+        serverPeer.close();
     }
 }
index 39b0f204620ddb612d32710e114b6213ac768456..f93af6cda8d932e9098ca1ddf4667d00a934c155 100644 (file)
@@ -23,12 +23,14 @@ import com.samsung.android.beyond.inference.InferenceHandler;
 import com.samsung.android.beyond.inference.InferenceMode;
 import com.samsung.android.beyond.inference.InferenceModuleFactory;
 import com.samsung.android.beyond.inference.Peer;
+import com.samsung.android.beyond.inference.PeerInfo;
 import com.samsung.android.beyond.inference.tensor.Tensor;
 import com.samsung.android.beyond.inference.tensor.TensorHandler;
 import com.samsung.android.beyond.inference.tensor.TensorInfo;
 import com.samsung.android.beyond.inference.tensor.TensorSet;
 import com.samsung.android.beyond.module.peer.NN.NNModule;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -51,8 +53,12 @@ public class TensorHandlerUnitTest {
 
     private TensorHandler tensorHandler = null;
 
+    private Peer serverPeer = null;
+
     private Peer inferencePeer = null;
 
+    private TensorSet inputTensorSet = null;
+
     private static String uint8ModelAbsolutePath = null;
 
     private static String float32ModelAbsolutePath = null;
@@ -73,7 +79,7 @@ public class TensorHandlerUnitTest {
         inferenceHandler = InferenceModuleFactory.createHandler(InferenceMode.REMOTE);
         assertNotNull(inferenceHandler);
 
-        Peer serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
+        serverPeer = InferenceModuleFactory.createPeerServer(context, NNModule.NAME);
         assertNotNull(serverPeer);
         assertTrue(serverPeer.setInfo());
         assertTrue(serverPeer.activateControlChannel());
@@ -81,10 +87,8 @@ public class TensorHandlerUnitTest {
         inferencePeer = InferenceModuleFactory.createPeerClient(context, NNModule.NAME);
         assertNotNull(inferencePeer);
 
-        Peer.Info info = new Peer.Info();
-        info.host = TEST_SERVER_IP;
-        info.port = TEST_SERVER_PORT;
-        assertTrue(inferencePeer.setInfo(info));
+        assertTrue(inferencePeer.setInfo(new PeerInfo(TEST_SERVER_IP, TEST_SERVER_PORT)));
+
         assertTrue(inferenceHandler.addInferencePeer(inferencePeer));   // Cover activateControlChannel()
 
         tensorHandler = new TensorHandler(inferenceHandler);
@@ -108,12 +112,6 @@ public class TensorHandlerUnitTest {
         for (TensorInfo tensorInfo : outputTensorsInfo) {
             assertArrayEquals(tensorInfo.getDimensions(), MOBILENET_OUTPUT_TENSOR_DIMENSIONS);
         }
-
-        destroyModules();
-    }
-
-    private void destroyModules() {
-        assertTrue(inferencePeer.deactivateControlChannel());
     }
 
     @Test
@@ -148,8 +146,6 @@ public class TensorHandlerUnitTest {
         for (Tensor tensor : outputTensors) {
             assertArrayEquals(MOBILENET_OUTPUT_TENSOR_DIMENSIONS, tensor.getTensorInfo().getDimensions());
         }
-
-        destroyModules();
     }
 
     @Test
@@ -162,7 +158,7 @@ public class TensorHandlerUnitTest {
         for (TensorInfo tensorInfo : inputTensorsInfo) {
             assertArrayEquals(MOBILENET_INPUT_TENSOR_DIMENSIONS, tensorInfo.getDimensions());
         }
-        TensorSet inputTensorSet = tensorHandler.allocateTensorSet(inputTensorsInfo);
+        inputTensorSet = tensorHandler.allocateTensorSet(inputTensorsInfo);
         assertNotNull(inputTensorSet);
         Tensor[] inputTensors = inputTensorSet.getTensors();
         assertEquals(MOBILENET_INPUT_TENSOR_NUMBER, inputTensors.length);
@@ -175,8 +171,6 @@ public class TensorHandlerUnitTest {
             assertNotNull(byteBuffer);
             assertArrayEquals(TEST_DATA_UINT8.array(), byteBuffer.array());
         }
-
-        destroyModules();
     }
 
     @Test
@@ -202,8 +196,6 @@ public class TensorHandlerUnitTest {
             assertNotNull(floatBuffer);
             assertArrayEquals(TEST_DATA_FLOAT32.array(), floatBuffer.array(), 0);
         }
-
-        destroyModules();
     }
 
     @Test
@@ -238,8 +230,6 @@ public class TensorHandlerUnitTest {
         TensorSet outputTensors = tensorHandler.getOutput(outputTensorsProperties);
         assertNotNull(outputTensors);
         assertTrue(isOrange(outputTensors.getTensors()));
-
-        destroyModules();
     }
 
     public static boolean isOrange(Tensor[] tensors) {
@@ -263,4 +253,17 @@ public class TensorHandlerUnitTest {
         }
         return true;
     }
+
+    @After
+    public void destroyInferenceModules() {
+        assertTrue(inferencePeer.deactivateControlChannel());
+        assertTrue(serverPeer.deactivateControlChannel());
+
+        assertTrue(inferenceHandler.removeInferencePeer(inferencePeer));
+
+        serverPeer.close();
+        inferencePeer.close();
+        inferenceHandler.close();
+        Log.i(TAG, "Inference modules are destroyed!!");
+    }
 }
index 2e828d5e5025e387517f1df84ede11b655e106e7..16880b18236a3530257dc354a68e8867d3d765df 100644 (file)
@@ -96,6 +96,15 @@ public class InferenceHandler extends NativeInstance {
         return run(instance, inputTensors.getTensorsInstance(), inputTensors.getTensors().length);
     }
 
+    public boolean removeInferencePeer(@NonNull Peer inferencePeer) {
+        if (instance == 0L) {
+            Log.e(TAG, "Instance is invalid.");
+            return false;
+        }
+
+        return removePeer(instance, inferencePeer.getNativeInstance());
+    }
+
     public boolean setOutputCallback(@NonNull TensorOutputCallback tensorOutputCallback) {
         if (instance == 0L) {
             Log.e(TAG, "Instance is invalid.");
@@ -122,6 +131,8 @@ public class InferenceHandler extends NativeInstance {
 
     private native boolean run(long inferenceHandle, long tensorsInstance, int numberOfTensors);
 
+    private native boolean removePeer(long inferenceHandle, long peerHandle);
+
     private static native void destroy(long inferenceHandle);
 
     private native int setCallback(long instance, TensorOutputCallback tensorOutputCallback);
index 27ddf06d633190ce40a6a6343b7c3ba5289b6b5b..0889bb141de6619d65d0f460475f73539e1b865c 100644 (file)
@@ -34,22 +34,6 @@ public class Peer extends NativeInstance {
         initialize();
     }
 
-    public static class Info {
-        public String host;
-        public int port;
-        public String uuid;
-
-        // TODO:
-        // List of runtimes
-
-        public Info() {}
-
-        public Info(@NonNull String host, int port) {
-            this.host = host;
-            this.port = port;
-        }
-    }
-
     private EventListener eventListener;
 
     Peer(@NonNull Context context, @NonNull String peerType, @NonNull NodeType nodeType) {
@@ -97,7 +81,7 @@ public class Peer extends NativeInstance {
             return false;
         }
 
-        return setInfo(instance, new Info(IP, port));
+        return setInfo(instance, new PeerInfo(IP, port));
     }
 
     private boolean validateIPv4(@NonNull String IP) {
@@ -112,14 +96,10 @@ public class Peer extends NativeInstance {
             return false;
         }
 
-        Info info = new Info();
-        info.host = "0.0.0.0";
-        info.port = 3000;
-        info.uuid = "N/A";
-        return setInfo(instance, info);
+        return setInfo(instance, new PeerInfo("0.0.0.0", 3000));
     }
 
-    public boolean setInfo(@NonNull Info info) {
+    public boolean setInfo(@NonNull PeerInfo info) {
         if (instance == 0L) {
             Log.e(TAG, "Instance is invalid.");
             return false;
@@ -128,7 +108,7 @@ public class Peer extends NativeInstance {
         return setInfo(instance, info);
     }
 
-    public Info getInfo() {
+    public PeerInfo getInfo() {
         if (instance == 0L) {
             Log.e(TAG, "Instance is invalid.");
             return null;
@@ -196,9 +176,9 @@ public class Peer extends NativeInstance {
 
     private native long create(String[] args);
 
-    private native boolean setInfo(long handle, Info info);
+    private native boolean setInfo(long handle, PeerInfo info);
 
-    private native Info getInfo(long handle);
+    private native PeerInfo getInfo(long handle);
 
     private native boolean activate(long handle);
 
diff --git a/subprojects/libbeyond-android/src/main/java/com/samsung/android/beyond/inference/PeerInfo.java b/subprojects/libbeyond-android/src/main/java/com/samsung/android/beyond/inference/PeerInfo.java
new file mode 100644 (file)
index 0000000..5748dd7
--- /dev/null
@@ -0,0 +1,33 @@
+package com.samsung.android.beyond.inference;
+
+public class PeerInfo {
+
+    private final String host;
+    private final int port;
+    private String uuid;
+
+    // TODO:
+    // List of runtimes
+
+    public PeerInfo(String host, int port) {
+        this.host = host;
+        this.port = port;
+    }
+
+    public PeerInfo(String host, int port, String uuid) {
+        this.host = host;
+        this.port = port;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String getUuid() {
+        return uuid;
+    }
+}
index afcf5cecb1315b2839b261fd1674cfe8d44c9e15..19f14cfe83d49c2ed95d9537aeaa8da30deecb94 100644 (file)
@@ -374,9 +374,29 @@ jboolean InferenceNativeInterface::Java_com_samsung_android_beyond_InferenceHand
     return true;
 }
 
+jboolean InferenceNativeInterface::Java_com_samsung_android_beyond_InferenceHandler_removePeer(JNIEnv *env, jobject thiz, jlong inference_handle, jlong peer_handle) // TODO: Device a better idea to transfer peer_handle.
+{
+    InferenceNativeInterface *inference_handle_ = reinterpret_cast<InferenceNativeInterface *>(inference_handle);
+    PeerNativeInterface *peer_handle_ = reinterpret_cast<PeerNativeInterface *>(peer_handle);
+    int ret = inference_handle_->inference->RemovePeer(static_cast<beyond::InferenceInterface::PeerInterface *>(peer_handle_->GetBeyonDInstance()));
+    if (ret < 0) {
+        ErrPrint("Fail to remove the given peer to the inference handler, ret = %d\n", ret);
+        return false;
+    }
+
+    return true;
+}
+
 void InferenceNativeInterface::Java_com_samsung_android_beyond_InferenceHandler_destroy(JNIEnv *env, jclass klass, jlong inference_handle)
 {
-    return;
+    InferenceNativeInterface *inference_handle_ = reinterpret_cast<InferenceNativeInterface *>(inference_handle);
+    if (inference_handle_ == nullptr) {
+        ErrPrint("inference_handle_ == nullptr");
+        return;
+    }
+
+    inference_handle_->inference->Destroy();
+    inference_handle_ = nullptr;
 }
 
 jint InferenceNativeInterface::Java_com_samsung_android_beyond_InferenceHandler_setOutputCallback(JNIEnv *env, jobject thiz, jlong inference_handle, jobject callback_object)
@@ -409,6 +429,7 @@ int InferenceNativeInterface::RegisterInferenceNatives(JNIEnv *env)
         { "loadModel", "(JLjava/lang/String;)Z", (void *)Java_com_samsung_android_beyond_InferenceHandler_loadModel },
         { "prepare", "(J)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferenceHandler_prepare) },
         { "run", "(JJI)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferenceHandler_run) },
+        { "removePeer", "(JJ)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferenceHandler_removePeer) },
         { "destroy", "(J)V", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferenceHandler_destroy) },
         { "setCallback", "(JLcom/samsung/android/beyond/inference/TensorOutputCallback;)I", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferenceHandler_setOutputCallback) },
     };
index d682dd7c950dd2b19a7f5de345aaaebc6f2d0afe..ef59b44ff6b41e531227c98af4b63a09b29154ba 100644 (file)
@@ -52,6 +52,7 @@ private:
     static jboolean Java_com_samsung_android_beyond_InferenceHandler_loadModel(JNIEnv *env, jobject thiz, jlong inference_handle, jstring model_path);
     static jboolean Java_com_samsung_android_beyond_InferenceHandler_prepare(JNIEnv *env, jobject thiz, jlong inference_handle);
     static jboolean Java_com_samsung_android_beyond_InferenceHandler_run(JNIEnv *env, jobject thiz, jlong inference_handle, jlong tensors_instance, jint num_tensors);
+    static jboolean Java_com_samsung_android_beyond_InferenceHandler_removePeer(JNIEnv *env, jobject thiz, jlong inference_handle, jlong peer_handle);
     static jint Java_com_samsung_android_beyond_InferenceHandler_setOutputCallback(JNIEnv *env, jobject thiz, jlong inference_handle, jobject callback_object);
 
     int AttachEventLoop(JNIEnv *env);
index 38c5620885ae1539e76c33d2037ba6ab38902d87..131dd18343da24fa5b290336677f24fbc3d0a20d 100644 (file)
@@ -434,6 +434,7 @@ void PeerNativeInterface::Java_com_samsung_android_beyond_InferencePeer_destroy(
     }
 
     peer_handle->peer->Destroy();
+    peer_handle = nullptr;
 }
 
 jboolean PeerNativeInterface::Java_com_samsung_android_beyond_InferencePeer_configure(JNIEnv *env, jobject thiz, jlong handle, jchar type, jobject obj)
@@ -473,7 +474,7 @@ jboolean PeerNativeInterface::Java_com_samsung_android_beyond_InferencePeer_conf
 
 void PeerNativeInterface::Java_com_samsung_android_beyond_InferencePeer_initialize(JNIEnv *env, jclass klass)
 {
-    jclass infoKlass = env->FindClass("com/samsung/android/beyond/inference/Peer$Info");
+    jclass infoKlass = env->FindClass("com/samsung/android/beyond/inference/PeerInfo");
     if (infoKlass == nullptr) {
         ErrPrint("Unable to get the class");
         return;
@@ -601,8 +602,8 @@ int PeerNativeInterface::RegisterPeerNatives(JNIEnv *env)
     static JNINativeMethod peer_jni_methods[] = {
         { "initialize", "()V", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_initialize) },
         { "create", "([Ljava/lang/String;)J", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_create) },
-        { "setInfo", "(JLcom/samsung/android/beyond/inference/Peer$Info;)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_set_info) },
-        { "getInfo", "(J)Lcom/samsung/android/beyond/inference/Peer$Info;", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_get_info) },
+        { "setInfo", "(JLcom/samsung/android/beyond/inference/PeerInfo;)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_set_info) },
+        { "getInfo", "(J)Lcom/samsung/android/beyond/inference/PeerInfo;", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_get_info) },
         { "activate", "(J)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_activate) },
         { "configure", "(JCLjava/lang/Object;)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_configure) },
         { "deactivate", "(J)Z", reinterpret_cast<void *>(Java_com_samsung_android_beyond_InferencePeer_deactivate) },