1 /**
2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 * SPDX-License-Identifier: Apache-2.0.
4 */
5
6 #include <jni.h>
7
8 #include <aws/common/system_info.h>
9
10 #include "crt.h"
11 #include "java_class_ids.h"
12
13 JNIEXPORT
Java_software_amazon_awssdk_crt_SystemInfo_processorCount(JNIEnv * env,jclass cls)14 jint JNICALL Java_software_amazon_awssdk_crt_SystemInfo_processorCount(JNIEnv *env, jclass cls) {
15 (void)cls;
16 aws_cache_jni_ids(env);
17
18 return (jint)aws_system_info_processor_count();
19 }
20
21 JNIEXPORT
Java_software_amazon_awssdk_crt_SystemInfo_cpuGroupCount(JNIEnv * env,jclass cls)22 jshort JNICALL Java_software_amazon_awssdk_crt_SystemInfo_cpuGroupCount(JNIEnv *env, jclass cls) {
23 (void)cls;
24 aws_cache_jni_ids(env);
25
26 return aws_get_cpu_group_count();
27 }
28
29 JNIEXPORT
30 jobjectArray JNICALL
Java_software_amazon_awssdk_crt_SystemInfo_cpuInfoForGroup(JNIEnv * env,jclass cls,jshort groupIdx)31 Java_software_amazon_awssdk_crt_SystemInfo_cpuInfoForGroup(JNIEnv *env, jclass cls, jshort groupIdx) {
32 (void)cls;
33 aws_cache_jni_ids(env);
34
35 size_t cpu_count = aws_get_cpu_count_for_group(groupIdx);
36
37 struct aws_cpu_info *cpu_info = aws_mem_calloc(aws_default_allocator(), cpu_count, sizeof(struct aws_cpu_info));
38 AWS_FATAL_ASSERT(cpu_info && "allocation failed in Java_software_amazon_awssdk_crt_SystemInfo_getCpuIdsForGroup");
39
40 aws_get_cpu_ids_for_group(groupIdx, cpu_info, cpu_count);
41
42 jobjectArray cpu_info_array =
43 (*env)->NewObjectArray(env, (jsize)cpu_count, cpu_info_properties.cpu_info_class, NULL);
44
45 for (size_t i = 0; i < cpu_count; ++i) {
46 jobject cpu_info_obj = (*env)->NewObject(
47 env,
48 cpu_info_properties.cpu_info_class,
49 cpu_info_properties.cpu_info_constructor,
50 cpu_info[i].cpu_id,
51 cpu_info[i].suspected_hyper_thread);
52 (*env)->SetObjectArrayElement(env, cpu_info_array, (jsize)i, cpu_info_obj);
53 (*env)->DeleteLocalRef(env, cpu_info_obj);
54 }
55
56 aws_mem_release(aws_default_allocator(), cpu_info);
57
58 return cpu_info_array;
59 }
60