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