onnxruntime/java/src/main/native/ai_onnxruntime_OnnxRuntime.c
Adam Pocock fddbd8935c
Adding Java support for getAvailableProviders and other small methods (#5366)
* Adding Java support for getAvailableProviders, addFreeDimensionOverrideByName, disablePerSessionThreads and getProfilingStartTimeNs.

* Fixing copyright years, running spotless and adding javadoc and an accessor to OrtProvider.

* Renaming OrtSession.getProfilingStartTimeInNs.

* Removing ngraph as it's been deprecated.
2020-11-24 21:42:57 -08:00

54 lines
1.9 KiB
C

/*
* Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
* Licensed under the MIT License.
*/
#include <jni.h>
#include "onnxruntime/core/session/onnxruntime_c_api.h"
#include "ai_onnxruntime_OnnxRuntime.h"
#include "OrtJniUtil.h"
/*
* Class: ai_onnxruntime_OnnxRuntime
* Method: initialiseAPIBase
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_ai_onnxruntime_OnnxRuntime_initialiseAPIBase
(JNIEnv * jniEnv, jclass clazz, jint apiVersion) {
(void) jniEnv; (void) clazz; // required JNI parameters not needed by functions which don't call back into Java.
const OrtApi* ortPtr = OrtGetApiBase()->GetApi((uint32_t) apiVersion);
return (jlong) ortPtr;
}
/*
* Class: ai_onnxruntime_OnnxRuntime
* Method: getAvailableProviders
* Signature: (J)[Ljava/lang/String;
*/
JNIEXPORT jobjectArray JNICALL Java_ai_onnxruntime_OnnxRuntime_getAvailableProviders
(JNIEnv * jniEnv, jclass clazz, jlong apiHandle) {
(void) jniEnv; (void) clazz; // required JNI parameters not needed by functions which don't call back into Java.
const OrtApi* api = (const OrtApi*) apiHandle;
char** providers = NULL;
int numProviders = 0;
// Extract the provider array
checkOrtStatus(jniEnv,api,api->GetAvailableProviders(&providers,&numProviders));
// Convert to Java String Array
char *stringClassName = "java/lang/String";
jclass stringClazz = (*jniEnv)->FindClass(jniEnv, stringClassName);
jobjectArray providerArray = (*jniEnv)->NewObjectArray(jniEnv,numProviders,stringClazz,NULL);
for (int i = 0; i < numProviders; i++) {
// Read out the provider name and convert it to a java.lang.String
jstring provider = (*jniEnv)->NewStringUTF(jniEnv,providers[i]);
(*jniEnv)->SetObjectArrayElement(jniEnv, providerArray, i, provider);
}
// Release providers
checkOrtStatus(jniEnv,api,api->ReleaseAvailableProviders(providers,numProviders));
providers = NULL;
return providerArray;
}