Mitigação térmica

Com a estrutura do Android, os fabricantes de dispositivos e desenvolvedores de aplicativos podem usar dados térmicos para garantir uma experiência do usuário (UX) consistente se um dispositivo começar a superaquecer. Por exemplo, quando um sistema sofre estresse térmico, os trabalhos jobscheduler são acelerados e, se necessário, um desligamento térmico da estrutura é iniciado. Os aplicativos que recebem notificações de estresse térmico por meio de um retorno de chamada registrado na classe PowerManager podem ajustar sua experiência do usuário com facilidade.

HAL térmico

O Android 9 e versões anteriores usam uma interface de pesquisa definida no Thermal HAL 1.0 para obter leituras de temperatura. Esse HAL permitiu que a estrutura do Android e outros clientes confiáveis, como o HAL de um fabricante de dispositivo, lessem a temperatura atual e os limites de limitação e desligamento específicos da política do produto para cada sensor por meio da mesma API.

O Android 10 introduziu um sistema térmico na estrutura do Android e uma nova versão do HAL, Thermal HAL 2.0, que abstrai a interface para os dispositivos de hardware do subsistema térmico. A interface de hardware inclui sensores de temperatura e termistores para capa, bateria, GPU, CPU e porta USB. A temperatura da superfície do dispositivo é o sistema mais importante a ser monitorado para manter a temperatura da superfície do dispositivo dentro dos limites térmicos especificados.

Além disso, o Thermal HAL 2.0 fornece a vários clientes leituras de sensores térmicos e níveis de severidade associados para indicar estresse térmico. A figura a seguir mostra duas mensagens de aviso da IU do sistema Android. Essas mensagens são exibidas quando a interface de retorno de chamada IThermalEventListener para os sensores USB_PORT e SKIN , respectivamente, atinge o nível de severidade THERMAL_STATUS_EMERGENCY .

Avisos de superaquecimento.

Figura 1. Avisos de superaquecimento.

As temperaturas atuais são recuperadas para os diferentes tipos de sensores térmicos através do IThermal HAL . Cada chamada de função retorna um valor de status SUCCESS ou FAILURE . Se SUCCESS for retornado, o processo continua. Se FAILURE for retornado, uma mensagem de erro, que deve ser legível por humanos, será enviada para status.debugMessage .

Além de ser uma interface de pesquisa que retorna as temperaturas atuais, você pode usar o retorno de chamada IThermalChangedCallback (HIDL, Android 10 a 13) ou IThermalChangedCallback (AIDL, Android 14 e superior) com a interface de retorno de chamada de clientes HAL térmicos, como o da estrutura serviço térmico. Por exemplo, RegisterIThermalChangedCallback e UnregisterIThermalChangedCallback para registrar ou cancelar o registro de eventos com gravidade alterada. Se a gravidade térmica de um determinado sensor tiver mudado, notifyThrottling enviará um retorno de chamada de evento de limitação térmica para ouvintes de eventos térmicos.

Além das informações do sensor térmico, uma lista de dispositivos de resfriamento mitigados é exposta em getCurrentCoolingDevices . A ordem desta lista é persistente, mesmo se um dispositivo de resfriamento estiver offline. Os fabricantes de dispositivos podem usar a lista para coletar métricas statsd .

Para obter mais informações, consulte a implementação de referência .

Embora você possa adicionar suas próprias extensões, não deve desativar a função de mitigação térmica.

Serviço térmico

No Android 10 e versões posteriores, o serviço térmico na estrutura fornece monitoramento constante usando vários sinais de mitigação do Thermal HAL 2.0 e fornece feedback da severidade da limitação aos seus clientes. Esses clientes incluem componentes internos e aplicativos Android. O serviço usa duas interfaces de retorno de chamada do fichário, IThermalEventListener e IThermalStatusListener , expostas como retornos de chamada. O primeiro é para uso interno da plataforma e do fabricante do dispositivo, e o último é para aplicativos Android.

Através das interfaces de retorno de chamada, o status térmico atual de um dispositivo pode ser recuperado como um valor inteiro que varia de 0x00000000 (sem limitação) a 0x00000006 (desligamento do dispositivo). Somente um serviço de sistema confiável, como uma API do Android ou uma API do fabricante do dispositivo, pode acessar o sensor térmico detalhado e as informações de eventos térmicos. A figura a seguir fornece um modelo do fluxo do processo de mitigação térmica no Android 10 e versões posteriores:

Fluxo do processo de mitigação térmica no Android 10 e versões posteriores.

Figura 2. Fluxo do processo de mitigação térmica no Android 10 e superior.

Diretrizes do fabricante do dispositivo

Para relatar o sensor de temperatura do dispositivo e o status de aceleração do Android 10 a 13, os fabricantes de dispositivos devem implementar o aspecto HIDL do Thermal HAL 2.0 ( IThermal.hal ).

Para relatar o sensor de temperatura do dispositivo e o status de aceleração para Android 14, os fabricantes de dispositivos devem implementar o aspecto AIDL do Thermal HAL 2.0 ( IThermal.aidl ).

Qualquer coisa que acelere o desempenho do dispositivo, incluindo restrições de energia da bateria, deve ser relatada por meio do HAL térmico. Para garantir que isso aconteça, coloque todos os sensores que possam indicar a necessidade de mitigação (com base nas alterações de status) no HAL térmico e relate a gravidade de quaisquer ações de mitigação tomadas. O valor da temperatura retornado pela leitura de um sensor não precisa ser a temperatura real, desde que reflita com precisão o limite de gravidade correspondente. Por exemplo, você pode transmitir valores numéricos diferentes em vez dos valores reais de limite de temperatura ou pode criar faixas de proteção nas especificações de limite para fornecer histerese. No entanto, a gravidade correspondente a esse valor deve corresponder ao que é necessário nesse limite. Por exemplo, você pode decidir retornar 72°C como limite de temperatura crítica, quando a temperatura real for 65°C e corresponder à severidade crítica especificada. O nível de severidade deve ser preciso para melhor funcionalidade da estrutura térmica.

Para ler mais sobre os níveis de limite na estrutura e como eles correspondem às ações de mitigação, consulte Usar códigos de status térmico .

Use APIs térmicas

Os aplicativos podem adicionar e remover ouvintes e acessar informações de status térmico por meio da classe PowerManager . A interface IThermal fornece todas as funcionalidades necessárias, incluindo o retorno dos valores do status térmico. A interface do fichário IThermal é encapsulada como a interface OnThermalStatusChangedListener , que os aplicativos podem usar ao registrar ou remover ouvintes de status térmico.

As APIs térmicas do Android têm métodos de retorno de chamada e de pesquisa para que os aplicativos sejam notificados sobre os níveis de severidade térmica por meio de códigos de status, que são definidos na classe PowerManager . Os métodos são:

Use códigos de status térmico

Os códigos de status térmico se traduzem em níveis de limitação específicos, que você pode usar para coletar dados e projetar uma experiência de usuário ideal. Por exemplo, os aplicativos podem receber um status 0x00000000 ( THERMAL_STATUS_NONE ), que pode posteriormente mudar para 0x00000001 ( THERMAL_STATUS_LIGHT ). Marcar o estado 0x00000000 como t0 e, em seguida, medir o tempo decorrido do status THERMAL_STATUS_NONE até o status THERMAL_STATUS_LIGHT como t1 permite que os fabricantes de dispositivos projetem e testem estratégias de mitigação para casos de uso específicos. A tabela a seguir descreve maneiras sugeridas de usar os códigos de status térmico:

Código de status térmico Descrição e uso sugerido
THERMAL_STATUS_NONE ( 0x00000000 ) Sem estrangulamento. Use este status para implementar ações de proteção, como detectar o início do período de tempo (t0 a t1) de THERMAL_STATUS_NONE ( 0 ) a THERMAL_STATUS_LIGHT ( 1 ).
THERMAL_STATUS_LIGHT ( 0x00000001 ) Aceleração leve, a UX não é afetada. Use uma mitigação suave do dispositivo para este estágio. Por exemplo, pule o aumento ou use frequências ineficientes, mas apenas em núcleos grandes.
THERMAL_STATUS_MODERATE ( 0x00000002 ) Aceleração moderada, a UX não é muito afetada. A mitigação térmica afeta as atividades em primeiro plano, portanto os aplicativos devem reduzir a energia imediatamente.
THERMAL_STATUS_SEVERE ( 0x00000003 ) Estrangulamento severo; A UX é amplamente impactada. Nesta fase, a mitigação térmica do dispositivo deve limitar a capacidade do sistema. Esse estado pode causar efeitos colaterais, como instabilidade de exibição e instabilidade de áudio.
THERMAL_STATUS_CRITICAL ( 0x00000004 ) A plataforma fez de tudo para reduzir o consumo de energia. O software de mitigação térmica do dispositivo colocou todos os componentes para funcionar em sua capacidade mais baixa.
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) Os principais componentes da plataforma estão desligando devido às condições térmicas e a funcionalidade do dispositivo é limitada. Este código de status representa o último aviso antes do desligamento do dispositivo. Nesse estado, algumas funções, como modem e dados do celular, ficam completamente desligadas.
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) Desligue imediatamente. Devido à gravidade deste estágio, os aplicativos podem não conseguir receber esta notificação.

Os fabricantes de dispositivos devem passar no teste VTS para HAL térmico e podem usar emul_temp da interface sysfs do kernel para simular mudanças de temperatura.