Thermal
摘要
枚举 |
|
---|---|
AThermalStatus{
|
enum 在函数 AThermal_getCurrentThermalStatus 和 AThermal_StatusCallback 中使用的热状态。 |
类型定义 |
|
---|---|
AThermalHeadroomThreshold
|
typedef |
AThermalManager
|
typedef结构体 AThermalManager
表示热管理器句柄的不透明类型。 |
AThermalStatus
|
typedef |
AThermal_StatusCallback)(void *_Nullable data, AThermalStatus status)
|
typedefvoid(*
热状态变化时调用的函数原型。 |
函数 |
|
---|---|
AThermal_acquireManager()
|
AThermalManager *_Nonnull
获取热管理器实例。
|
AThermal_getCurrentThermalStatus(AThermalManager *_Nonnull manager)
|
获取当前热状态。
|
AThermal_getThermalHeadroom(AThermalManager *_Nonnull manager, int forecastSeconds)
|
float
提供设备在达到严重节流之前当前有多少热余量的估算值。
|
AThermal_getThermalHeadroomThresholds(AThermalManager *_Nonnull manager, const AThermalHeadroomThreshold *_Nonnull *_Nullable outThresholds, size_t *_Nonnull size)
|
int
获取所有可用热状态的热余量阈值。
|
AThermal_registerThermalStatusListener(AThermalManager *_Nonnull manager, AThermal_StatusCallback _Nullable callback, void *_Nullable data)
|
int
注册热状态监听器以监听热状态变化。
|
AThermal_releaseManager(AThermalManager *_Nonnull manager)
|
void
释放通过 AThermal_acquireManager 获取的热管理器指针。
|
AThermal_unregisterThermalStatusListener(AThermalManager *_Nonnull manager, AThermal_StatusCallback _Nullable callback, void *_Nullable data)
|
int
注销之前注册的热状态监听器。
|
结构体 |
|
---|---|
AThermalHeadroomThreshold |
此结构体定义了余量阈值及其状态的实例。 |
枚举
AThermalStatus
声明于android/thermal.h
AThermalStatus
在函数 AThermal_getCurrentThermalStatus 和 AThermal_StatusCallback 中使用的热状态。
属性 | |
---|---|
ATHERMAL_STATUS_CRITICAL |
平台已采取一切措施降低功耗。 |
ATHERMAL_STATUS_EMERGENCY |
平台中的关键组件因散热条件而关机。 设备功能将受到限制。 |
ATHERMAL_STATUS_ERROR |
热状态出错。 |
ATHERMAL_STATUS_LIGHT |
轻度节流,用户体验不受影响。 |
ATHERMAL_STATUS_MODERATE |
中度节流,用户体验基本不受影响。 |
ATHERMAL_STATUS_NONE |
未进行节流。 |
ATHERMAL_STATUS_SEVERE |
严重节流,用户体验受到很大影响。 |
ATHERMAL_STATUS_SHUTDOWN |
需要立即关机。 |
类型定义
AThermalHeadroomThreshold
声明于android/thermal.h
struct AThermalHeadroomThreshold AThermalHeadroomThreshold
AThermalManager
声明于android/thermal.h
struct AThermalManager AThermalManager
表示热管理器句柄的不透明类型。
在使用热状态 API 之前必须获取热管理器实例,并在使用后释放。
使用方法
- 通过调用 AThermal_acquireManager 函数创建一个新的热管理器实例。
- 使用 AThermal_getCurrentThermalStatus 获取当前热状态。
- 使用 AThermal_registerThermalStatusListener 注册热状态监听器。
- 使用 AThermal_unregisterThermalStatusListener 注销热状态监听器。
- 使用 AThermal_releaseManager 释放热管理器实例。
AThermalStatus
声明于android/thermal.h
enum AThermalStatus AThermalStatus
AThermal_StatusCallback
声明于android/thermal.h
void(* AThermal_StatusCallback)(void *_Nullable data, AThermalStatus status)
热状态变化时调用的函数原型。
它会作为参数传入更新后的热状态,以及注册回调的客户端提供的指针。
函数
AThermal_getCurrentThermalStatus
声明于android/thermal.h
AThermalStatus AThermal_getCurrentThermalStatus( AThermalManager *_Nonnull manager )
获取当前热状态。
自 API 级别 30 起可用。
详情 | |||
---|---|---|---|
参数 |
|
||
返回值 |
当前热状态;失败时返回 ATHERMAL_STATUS_ERROR。
|
AThermal_getThermalHeadroom
声明于android/thermal.h
float AThermal_getThermalHeadroom( AThermalManager *_Nonnull manager, int forecastSeconds )
提供设备在达到严重节流之前当前有多少热余量的估算值。
请注意,此函数仅尝试跟踪慢速传感器的余量,例如皮肤温度传感器。这意味着每秒调用此函数的频率超过一次并没有益处,并且尝试以显著更高的频率调用可能会导致函数返回 NaN
。
此外,为了能够提供准确的预测,系统直到拥有多个温度样本可用于推断时,才会尝试进行预测。从首次调用时起,这只需花费几秒钟,但在此期间不会进行预测,并且无论 forecastSeconds
的值如何,都会返回当前余量。
返回值是一个非负浮点数,表示热包络的使用量(或预测使用量)。值为 1.0 表示设备当前或将会在 ATHERMAL_STATUS_SEVERE 级别进行节流。这种节流会影响 CPU、GPU 和其他子系统。值可能超过 1.0,但超过该点没有隐含映射到特定的热量级别。这意味着大于 1.0 的值可能对应于 ATHERMAL_STATUS_SEVERE,但也可能表示更严重的节流。
值为 0.0 对应于距离 1.0 的固定距离,但不对应于任何特定的热状态或温度。位于 (0.0, 1.0] 之间的值预计会与温度线性变化,尽管温度随时间的变化通常不是线性的。负值在返回之前将被限制为 0.0。
自 API 级别 31 起可用。
详情 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
大于等于 0.0 的值,其中 1.0 表示上述 SEVERE 节流阈值。如果设备不支持此功能或此函数调用频率远高于每秒一次,则返回 NaN。
|
AThermal_getThermalHeadroomThresholds
声明于android/thermal.h
int AThermal_getThermalHeadroomThresholds( AThermalManager *_Nonnull manager, const AThermalHeadroomThreshold *_Nonnull *_Nullable outThresholds, size_t *_Nonnull size )
获取所有可用热状态的热余量阈值。
仅当设备制造商为其至少一个慢速皮肤温度传感器定义了相应的阈值时,输出中才会存在热状态。如果设置了该阈值,用户也应该能够从 AThermal_getCurrentThermalStatus 或 AThermal_StatusCallback 中获取它。
余量阈值用于根据余量预测解释可能的热节流状态。例如,如果 ATHERMAL_STATUS_LIGHT 的余量阈值为 0.7,并且 10 秒内的余量预测返回 0.75(即 AThermal_getThermalHeadroom(10)=0.75
),则可以预期,如果工作负载保持不变,系统在 10 秒后可能会处于轻度节流状态。应用可以根据余量与阈值之差所对应的最接近的节流状态来考虑采取措施。
对于新设备,保证只有一个传感器;但对于具有多个传感器报告不同阈值的老设备,为了保守预测,会取最小阈值。因此,在读取实时余量时,不能保证超过上方 0.7 阈值的实时值 0.75(或 AThermal_getCurrentThermalStatus()=ATHERMAL_STATUS_LIGHT
)总是会伴随轻度节流状态(或 AThermal_getCurrentThermalStatus()=ATHERMAL_STATUS_NONE
),它可能更低(或 AThermal_getCurrentThermalStatus()=ATHERMAL_STATUS_NONE
)。虽然始终保证设备的节流不会比未达到阈值所对应的状态更严重,因此实时余量为 0.75 绝不会对应 ATHERMAL_STATUS_MODERATE,而总是更低;实时余量为 0.65 绝不会对应 ATHERMAL_STATUS_LIGHT,而总是 ATHERMAL_STATUS_NONE。`
返回的阈值列表在首次成功查询时被缓存,并由热管理器拥有,在此函数调用之间不会改变。调用方只需使用 AThermal_releaseManager 释放管理器即可。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
成功时返回 0;如果 outThresholds 或 size_t 为 nullptr,或 *outThresholds 不为 nullptr,则返回 EINVAL。如果与系统服务通信失败,则返回 EPIPE。如果当前系统禁用此功能,则返回 ENOSYS。
|
AThermal_registerThermalStatusListener
声明于android/thermal.h
int AThermal_registerThermalStatusListener( AThermalManager *_Nonnull manager, AThermal_StatusCallback _Nullable callback, void *_Nullable data )
注册热状态监听器以监听热状态变化。
自 API 级别 30 起可用。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
成功时返回 0;如果监听器和数据指针之前已添加且未移除,则返回 EINVAL。如果未持有所需权限,则返回 EPERM。如果与系统服务通信失败,则返回 EPIPE。
|
AThermal_releaseManager
声明于android/thermal.h
void AThermal_releaseManager( AThermalManager *_Nonnull manager )
AThermal_unregisterThermalStatusListener
声明于android/thermal.h
int AThermal_unregisterThermalStatusListener( AThermalManager *_Nonnull manager, AThermal_StatusCallback _Nullable callback, void *_Nullable data )
注销之前注册的热状态监听器。
自 API 级别 30 起可用。
详情 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
成功时返回 0;如果监听器和数据指针之前未添加,则返回 EINVAL。如果未持有所需权限,则返回 EPERM。如果与系统服务通信失败,则返回 EPIPE。
|