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