diff --git a/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/LiteSession.java b/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/LiteSession.java index 692b97fb64..b589ee5013 100644 --- a/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/LiteSession.java +++ b/mindspore/lite/java/java/app/src/main/java/com/mindspore/lite/LiteSession.java @@ -16,6 +16,7 @@ package com.mindspore.lite; +import java.nio.MappedByteBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -29,17 +30,39 @@ public class LiteSession { System.loadLibrary("mindspore-lite-jni"); } - private long sessionPtr; + private long sessionPtr = 0; + // Deprecated, please use "public static LiteSession createSession(final MSConfig config)" instead. public LiteSession() { this.sessionPtr = 0; } + // Deprecated, please use "public static LiteSession createSession(final MSConfig config)" instead. public boolean init(MSConfig config) { this.sessionPtr = createSession(config.getMSConfigPtr()); return this.sessionPtr != 0; } + public static LiteSession createSession(final MSConfig config) { + LiteSession liteSession = new LiteSession(); + liteSession.sessionPtr = liteSession.createSession(config.getMSConfigPtr()); + if (liteSession.sessionPtr == 0) { + return null; + } else { + return liteSession; + } + } + + public static LiteSession createSession(final MappedByteBuffer buffer, final MSConfig config) { + LiteSession liteSession = new LiteSession(); + liteSession.sessionPtr = liteSession.createSessionWithModel(buffer, config.getMSConfigPtr()); + if (liteSession.sessionPtr == 0) { + return null; + } else { + return liteSession; + } + } + public long getSessionPtr() { return sessionPtr; } @@ -124,6 +147,8 @@ public class LiteSession { private native long createSession(long msConfigPtr); + private native long createSessionWithModel(MappedByteBuffer buffer, long msConfigPtr); + private native boolean compileGraph(long sessionPtr, long modelPtr); private native void bindThread(long sessionPtr, boolean if_bind); diff --git a/mindspore/lite/java/java/linux_x86/src/main/java/com.mindspore.lite/LiteSession.java b/mindspore/lite/java/java/linux_x86/src/main/java/com.mindspore.lite/LiteSession.java index 692b97fb64..b589ee5013 100644 --- a/mindspore/lite/java/java/linux_x86/src/main/java/com.mindspore.lite/LiteSession.java +++ b/mindspore/lite/java/java/linux_x86/src/main/java/com.mindspore.lite/LiteSession.java @@ -16,6 +16,7 @@ package com.mindspore.lite; +import java.nio.MappedByteBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -29,17 +30,39 @@ public class LiteSession { System.loadLibrary("mindspore-lite-jni"); } - private long sessionPtr; + private long sessionPtr = 0; + // Deprecated, please use "public static LiteSession createSession(final MSConfig config)" instead. public LiteSession() { this.sessionPtr = 0; } + // Deprecated, please use "public static LiteSession createSession(final MSConfig config)" instead. public boolean init(MSConfig config) { this.sessionPtr = createSession(config.getMSConfigPtr()); return this.sessionPtr != 0; } + public static LiteSession createSession(final MSConfig config) { + LiteSession liteSession = new LiteSession(); + liteSession.sessionPtr = liteSession.createSession(config.getMSConfigPtr()); + if (liteSession.sessionPtr == 0) { + return null; + } else { + return liteSession; + } + } + + public static LiteSession createSession(final MappedByteBuffer buffer, final MSConfig config) { + LiteSession liteSession = new LiteSession(); + liteSession.sessionPtr = liteSession.createSessionWithModel(buffer, config.getMSConfigPtr()); + if (liteSession.sessionPtr == 0) { + return null; + } else { + return liteSession; + } + } + public long getSessionPtr() { return sessionPtr; } @@ -124,6 +147,8 @@ public class LiteSession { private native long createSession(long msConfigPtr); + private native long createSessionWithModel(MappedByteBuffer buffer, long msConfigPtr); + private native boolean compileGraph(long sessionPtr, long modelPtr); private native void bindThread(long sessionPtr, boolean if_bind); diff --git a/mindspore/lite/java/native/runtime/lite_session.cpp b/mindspore/lite/java/native/runtime/lite_session.cpp index 9cba223855..0c69f2ad23 100644 --- a/mindspore/lite/java/native/runtime/lite_session.cpp +++ b/mindspore/lite/java/native/runtime/lite_session.cpp @@ -15,9 +15,35 @@ */ #include +#include #include "common/ms_log.h" #include "include/lite_session.h" #include "include/errorcode.h" +extern "C" JNIEXPORT jlong JNICALL Java_com_mindspore_lite_LiteSession_createSessionWithModel(JNIEnv *env, jobject thiz, + jobject model_buffer, + jlong ms_config_ptr) { + // decode model buffer and buffer size + if (model_buffer == nullptr) { + MS_LOGE("Buffer from java is nullptr"); + return reinterpret_cast(nullptr); + } + jlong buffer_len = env->GetDirectBufferCapacity(model_buffer); + auto *model_buf = static_cast(env->GetDirectBufferAddress(model_buffer)); + // decode ms context + auto *pointer = reinterpret_cast(ms_config_ptr); + if (pointer == nullptr) { + MS_LOGE("Context pointer from java is nullptr"); + return jlong(nullptr); + } + auto *lite_context_ptr = static_cast(pointer); + // create session + auto session = mindspore::session::LiteSession::CreateSession(model_buf, buffer_len, lite_context_ptr); + if (session == nullptr) { + MS_LOGE("CreateSession failed"); + return jlong(nullptr); + } + return jlong(session); +} extern "C" JNIEXPORT jlong JNICALL Java_com_mindspore_lite_LiteSession_createSession(JNIEnv *env, jobject thiz, jlong ms_config_ptr) {