/* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @defgroup SystemHealth * @{ */ /** * @file system_health.h */ #ifndef _ANDROID_SYSTEM_HEALTH_H #define _ANDROID_SYSTEM_HEALTH_H #include /****************************************************************** * * IMPORTANT NOTICE: * * This file is part of Android's set of stable system headers * exposed by the Android NDK (Native Development Kit). * * Third-party source AND binary code relies on the definitions * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. * * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES */ #include #include #if !defined(__INTRODUCED_IN) #define __INTRODUCED_IN(__api_level) /* nothing */ #endif #ifdef __cplusplus extern "C" { #endif /** * Params used to customize the calculation of CPU headroom. * * Also see {@link ASystemHealth_getCpuHeadroom}. */ typedef struct ACpuHeadroomParams ACpuHeadroomParams; /** * Params used to customize the calculation of GPU headroom. * * Also see {@link ASystemHealth_getGpuHeadroom}. */ typedef struct AGpuHeadroomParams AGpuHeadroomParams; /** * Creates a new instance of ACpuHeadroomParams. * * When the client finishes using {@link ACpuHeadroomParams}, * {@link ACpuHeadroomParams_destroy()} must be called to destroy * and free up the resources associated with {@link ACpuHeadroomParams}. * * Available since API level 36. * * @return A new instance of ACpuHeadroomParams. */ ACpuHeadroomParams *_Nonnull ACpuHeadroomParams_create() __INTRODUCED_IN(36); enum ACpuHeadroomCalculationType { /** * Use the minimum headroom value within the calculation window. * Introduced in API level 36. */ ACPU_HEADROOM_CALCULATION_TYPE_MIN = 0, /** * Use the average headroom value within the calculation window. * Introduced in API level 36. */ ACPU_HEADROOM_CALCULATION_TYPE_AVERAGE = 1, }; typedef enum ACpuHeadroomCalculationType ACpuHeadroomCalculationType; enum AGpuHeadroomCalculationType { /** * Use the minimum headroom value within the calculation window. * Introduced in API level 36. */ AGPU_HEADROOM_CALCULATION_TYPE_MIN = 0, /** * Use the average headroom value within the calculation window. * Introduced in API level 36. */ AGPU_HEADROOM_CALCULATION_TYPE_AVERAGE = 1, }; typedef enum AGpuHeadroomCalculationType AGpuHeadroomCalculationType; /** * Sets the headroom calculation window size in ACpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @param windowMillis The window size in milliseconds ranged from [50, 10000]. The smaller the * window size, the larger fluctuation in the headroom value should be expected. * The default value can be retrieved from the * {@link #ACpuHeadroomParams_getCalculationWindowMillis} if not set. The device * will try to use the closest feasible window size to this param. */ void ACpuHeadroomParams_setCalculationWindowMillis(ACpuHeadroomParams *_Nonnull params, int windowMillis) __INTRODUCED_IN(36); /** * Gets the headroom calculation window size in ACpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @return This will return the default value chosen by the device if the params is not set. */ int ACpuHeadroomParams_getCalculationWindowMillis(ACpuHeadroomParams *_Nonnull params) __INTRODUCED_IN(36); /** * Sets the headroom calculation window size in AGpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @param windowMillis The window size in milliseconds ranged from [50, 10000]. The smaller the * window size, the larger fluctuation in the headroom value should be expected. * The default value can be retrieved from the * {@link #AGpuHeadroomParams_getCalculationWindowMillis} if not set. The device * will try to use the closest feasible window size to this param. */ void AGpuHeadroomParams_setCalculationWindowMillis(AGpuHeadroomParams *_Nonnull params, int windowMillis) __INTRODUCED_IN(36); /** * Gets the headroom calculation window size in AGpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @return This will return the default value chosen by the device if the params is not set. */ int AGpuHeadroomParams_getCalculationWindowMillis(AGpuHeadroomParams *_Nonnull params) __INTRODUCED_IN(36); /** * Sets the headroom calculation type in ACpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @param calculationType The headroom calculation type. */ void ACpuHeadroomParams_setCalculationType(ACpuHeadroomParams *_Nonnull params, ACpuHeadroomCalculationType calculationType) __INTRODUCED_IN(36); /** * Gets the headroom calculation type in ACpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @return The headroom calculation type. */ ACpuHeadroomCalculationType ACpuHeadroomParams_getCalculationType(ACpuHeadroomParams *_Nonnull params) __INTRODUCED_IN(36); /** * Sets the headroom calculation type in AGpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @param calculationType The headroom calculation type. */ void AGpuHeadroomParams_setCalculationType(AGpuHeadroomParams *_Nonnull params, AGpuHeadroomCalculationType calculationType) __INTRODUCED_IN(36); /** * Gets the headroom calculation type in AGpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @return The headroom calculation type. */ AGpuHeadroomCalculationType AGpuHeadroomParams_getCalculationType(AGpuHeadroomParams *_Nonnull params) __INTRODUCED_IN(36); /** * Sets the thread TIDs to track in ACpuHeadroomParams. * * Available since API level 36. * * @param params The params to be set. * @param tids Non-null array of TIDs, maximum 5. * @param tidsSize The size of the tids array. */ void ACpuHeadroomParams_setTids(ACpuHeadroomParams *_Nonnull params, const int *_Nonnull tids, int tidsSize) __INTRODUCED_IN(36); /** * Creates a new instance of AGpuHeadroomParams. * * When the client finishes using {@link AGpuHeadroomParams}, * {@link AGpuHeadroomParams_destroy()} must be called to destroy * and free up the resources associated with {@link AGpuHeadroomParams}. * * Available since API level 36. * * @return A new instance of AGpuHeadroomParams. */ AGpuHeadroomParams *_Nonnull AGpuHeadroomParams_create() __INTRODUCED_IN(36); /** * Deletes the ACpuHeadroomParams instance. * * Available since API level 36. * * @param params The params to be deleted. */ void ACpuHeadroomParams_destroy(ACpuHeadroomParams *_Nonnull params) __INTRODUCED_IN(36); /** * Deletes the AGpuHeadroomParams instance. * * Available since API level 36. * * @param params The params to be deleted. */ void AGpuHeadroomParams_destroy(AGpuHeadroomParams *_Nonnull params) __INTRODUCED_IN(36); /** * Provides an estimate of available CPU capacity headroom of the device. * * The value can be used by the calling application to determine if the workload was CPU bound and * then take action accordingly to ensure that the workload can be completed smoothly. It can also * be used with the thermal status and headroom to determine if reducing the CPU bound workload can * help reduce the device temperature to avoid thermal throttling. * * Available since API level 36. * * @param params The params to customize the CPU headroom calculation, or nullptr to use the default * @param outHeadroom Non-null output pointer to a single float, which will be set to the CPU * headroom value. The value will be a single value or `Float.NaN` if it's * temporarily unavailable. * Each valid value ranges from [0, 100], where 0 indicates no more cpu resources * can be granted. * @return 0 on success * EPIPE if failed to get the CPU headroom. * EPERM if the TIDs do not belong to the same process. * ENOTSUP if API or requested params is unsupported. */ int ASystemHealth_getCpuHeadroom(const ACpuHeadroomParams *_Nullable params, float *_Nonnull outHeadroom) __INTRODUCED_IN(36); /** * Provides an estimate of available GPU capacity headroom of the device. * * The value can be used by the calling application to determine if the workload was GPU bound and * then take action accordingly to ensure that the workload can be completed smoothly. It can also * be used with the thermal status and headroom to determine if reducing the GPU bound workload can * help reduce the device temperature to avoid thermal throttling. * * Available since API level 36 * * @param params The params to customize the GPU headroom calculation, or nullptr to use the default * @param outHeadroom Non-null output pointer to a single float, which will be set to the GPU * headroom value. The value will be a single value or `Float.NaN` if it's * temporarily unavailable. * Each valid value ranges from [0, 100], where 0 indicates no more gpu resources * can be granted. * @return 0 on success * EPIPE if failed to get the GPU headroom. * ENOTSUP if API or requested params is unsupported. */ int ASystemHealth_getGpuHeadroom(const AGpuHeadroomParams *_Nullable params, float *_Nonnull outHeadroom) __INTRODUCED_IN(36); /** * Gets minimum polling interval for calling {@link ASystemHealth_getCpuHeadroom} in milliseconds. * * The getCpuHeadroom API may return cached result if called more frequently than the interval. * * Available since API level 36. * * @param outMinIntervalMillis Non-null output pointer to a int64_t, which * will be set to the minimum polling interval in milliseconds. * @return 0 on success * EPIPE if failed to get the minimum polling interval. * ENOTSUP if API is unsupported. */ int ASystemHealth_getCpuHeadroomMinIntervalMillis(int64_t *_Nonnull outMinIntervalMillis) __INTRODUCED_IN(36); /** * Gets minimum polling interval for calling {@link ASystemHealth_getGpuHeadroom} in milliseconds. * * The getGpuHeadroom API may return cached result if called more frequent than the interval. * * Available since API level 36. * * @param outMinIntervalMillis Non-null output pointer to a int64_t, which * will be set to the minimum polling interval in milliseconds. * @return 0 on success * EPIPE if failed to get the minimum polling interval. * ENOTSUP if API is unsupported. */ int ASystemHealth_getGpuHeadroomMinIntervalMillis(int64_t *_Nonnull outMinIntervalMillis) __INTRODUCED_IN(36); #ifdef __cplusplus } #endif #endif // _ANDROID_SYSTEM_HEALTH_H /** @} */