blob: a2e38a85466737c4cab71b6847b72491570fdfb1 [file] [log] [blame] [edit]
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <jni.h>
#include <aws/common/system_info.h>
#include "crt.h"
#include "java_class_ids.h"
JNIEXPORT
jint JNICALL Java_software_amazon_awssdk_crt_SystemInfo_processorCount(JNIEnv *env, jclass cls) {
(void)cls;
aws_cache_jni_ids(env);
return (jint)aws_system_info_processor_count();
}
JNIEXPORT
jshort JNICALL Java_software_amazon_awssdk_crt_SystemInfo_cpuGroupCount(JNIEnv *env, jclass cls) {
(void)cls;
aws_cache_jni_ids(env);
return aws_get_cpu_group_count();
}
JNIEXPORT
jobjectArray JNICALL
Java_software_amazon_awssdk_crt_SystemInfo_cpuInfoForGroup(JNIEnv *env, jclass cls, jshort groupIdx) {
(void)cls;
aws_cache_jni_ids(env);
size_t cpu_count = aws_get_cpu_count_for_group(groupIdx);
struct aws_cpu_info *cpu_info = aws_mem_calloc(aws_default_allocator(), cpu_count, sizeof(struct aws_cpu_info));
AWS_FATAL_ASSERT(cpu_info && "allocation failed in Java_software_amazon_awssdk_crt_SystemInfo_getCpuIdsForGroup");
aws_get_cpu_ids_for_group(groupIdx, cpu_info, cpu_count);
jobjectArray cpu_info_array =
(*env)->NewObjectArray(env, (jsize)cpu_count, cpu_info_properties.cpu_info_class, NULL);
for (size_t i = 0; i < cpu_count; ++i) {
jobject cpu_info_obj = (*env)->NewObject(
env,
cpu_info_properties.cpu_info_class,
cpu_info_properties.cpu_info_constructor,
cpu_info[i].cpu_id,
cpu_info[i].suspected_hyper_thread);
(*env)->SetObjectArrayElement(env, cpu_info_array, (jsize)i, cpu_info_obj);
(*env)->DeleteLocalRef(env, cpu_info_obj);
}
aws_mem_release(aws_default_allocator(), cpu_info);
return cpu_info_array;
}