Термическое смягчение

С помощью фреймворка Android производители устройств и разработчики приложений могут использовать тепловые данные для обеспечения стабильного пользовательского опыта (UX) при перегреве устройства. Например, когда система подвергается термическому стрессу, задания jobscheduler заданий (jobscheduler) приостанавливаются, и при необходимости инициируется тепловое отключение фреймворка. Приложения, получающие уведомления о термическом стрессе через зарегистрированный обратный вызов в классе PowerManager , могут корректно корректировать свой UX.

Тепловой HAL

В Android 9 и более ранних версиях для получения показаний температуры используется интерфейс опроса, определённый в Thermal HAL 1.0. Этот HAL позволял фреймворку Android и другим доверенным клиентам, таким как HAL производителя устройства, считывать текущую температуру и пороговые значения регулирования и отключения, заданные политикой продукта, для каждого датчика через тот же API.

В Android 10 появилась система управления температурой в фреймворке Android и новая версия HAL, Thermal HAL 2.0, которая абстрагирует интерфейс от аппаратных устройств тепловой подсистемы. Аппаратный интерфейс включает в себя датчики температуры и термисторы для кожи, аккумулятора, графического процессора, центрального процессора и USB-порта. Отслеживание температуры кожи устройства является важнейшей функцией для поддержания температуры поверхности устройства в заданных температурных пределах.

Кроме того, Thermal HAL 2.0 предоставляет нескольким клиентам показания термодатчиков и соответствующие уровни критичности для индикации теплового стресса. На следующем рисунке показаны два предупреждающих сообщения из системного пользовательского интерфейса Android. Эти сообщения отображаются, когда интерфейс обратного вызова IThermalEventListener для датчиков USB_PORT и SKIN соответственно достигает уровня критичности THERMAL_STATUS_EMERGENCY .

Предупреждения о перегреве.

Рисунок 1. Предупреждения о перегреве.

Текущие температуры для различных типов термодатчиков извлекаются через IThermal HAL . Каждый вызов функции возвращает значение статуса: SUCCESS или FAILURE . Если возвращается SUCCESS , процесс продолжается. Если возвращается FAILURE , сообщение об ошибке, которое должно быть понятно человеку, отправляется в status.debugMessage .

Помимо интерфейса опроса, возвращающего текущие температуры, вы можете использовать функцию обратного вызова IThermalChangedCallback (HIDL, Android 10–13) или IThermalChangedCallback (AIDL, Android 14 и выше) с интерфейсом обратного вызова от клиентов HAL для работы с температурой, таких как тепловой сервис фреймворка. Например, RegisterIThermalChangedCallback и UnregisterIThermalChangedCallback позволяют регистрировать или отменять регистрацию событий изменения уровня интенсивности. Если уровень интенсивности температуры для данного датчика изменился, notifyThrottling отправляет обратный вызов события регулирования температуры прослушивателям событий.

Помимо информации с термодатчиков, в getCurrentCoolingDevices доступен список охлаждающих устройств с пониженным уровнем нагрузки. Этот список сохраняется даже при отключении охлаждающего устройства. Производители устройств могут использовать этот список для сбора показателей statsd .

Более подробную информацию см. в Справочной реализации .

Хотя вы можете добавлять собственные расширения, отключать функцию снижения теплового воздействия не следует.

Тепловое обслуживание

В Android 10 и более поздних версиях тепловой сервис фреймворка обеспечивает постоянный мониторинг, используя различные сигналы смягчения из Thermal HAL 2.0, и предоставляет своим клиентам обратную связь о степени ограничения. К таким клиентам относятся внутренние компоненты и приложения Android. Сервис использует два интерфейса обратного вызова связующего компонента, IThermalEventListener и IThermalStatusListener , предоставляемые как обратные вызовы. Первый предназначен для внутреннего использования платформой и производителем устройства, а второй — для приложений Android.

Через интерфейсы обратного вызова текущее тепловое состояние устройства можно получить в виде целого значения в диапазоне от 0x00000000 (без регулирования) до 0x00000006 (устройство выключено). Только доверенная системная служба, такая как API Android или API производителя устройства, может получить доступ к подробной информации о термодатчике и событиях, связанных с температурой. На следующем рисунке представлена ​​модель процесса снижения температуры в Android 10 и более поздних версиях:

Поток процесса смягчения теплового воздействия в Android 10 и выше.

Рисунок 2. Процесс смягчения теплового воздействия в Android 10 и выше.

Рекомендации производителя устройства

Чтобы сообщать данные датчика температуры устройства и статус регулирования для Android 10–13, производители устройств должны реализовать аспект HIDL Thermal HAL 2.0 ( IThermal.hal ).

Чтобы сообщать о состоянии датчика температуры устройства и регулирования для Android 14, производители устройств должны реализовать аспект AIDL Thermal HAL 2.0 ( IThermal.aidl ).

Все, что снижает производительность устройства, включая ограничения мощности батареи, должно сообщаться через тепловой HAL. Для этого поместите все датчики, которые могут указывать на необходимость смягчения (на основе изменений состояния), в тепловой HAL и сообщайте о серьезности любых предпринятых мер по смягчению. Значение температуры, возвращаемое из показаний датчика, не обязательно должно быть фактической температурой, если оно точно отражает соответствующий порог серьезности. Например, вы можете передавать другие числовые значения вместо фактических пороговых значений температуры или можете встроить защитные полосы в характеристики пороговых значений для обеспечения гистерезиса. Однако серьезность, соответствующая этому значению, должна соответствовать необходимой для этого порога. Например, вы можете решить вернуть 72 °C в качестве критического порогового значения температуры, когда фактическая температура составляет 65 °C, и это соответствует указанному вами критическому уровню серьезности. Уровень серьезности должен быть точным для лучшей работы тепловой инфраструктуры.

Дополнительную информацию о пороговых уровнях в структуре и о том, как они соотносятся с мерами по смягчению последствий, см. в разделе Использование кодов теплового состояния .

Использовать тепловые API

Приложения могут добавлять и удалять прослушиватели, а также получать доступ к информации о тепловом состоянии через класс PowerManager . Интерфейс IThermal предоставляет всю необходимую функциональность, включая возврат значений теплового состояния. Интерфейс связывателя IThermal реализован в виде интерфейса OnThermalStatusChangedListener , который приложения могут использовать при регистрации или удалении прослушивателей теплового состояния.

API для работы с температурой в Android предоставляют как методы обратного вызова, так и методы опроса, позволяющие приложениям получать уведомления об уровнях интенсивности температурных воздействий посредством кодов состояния, которые определены в классе PowerManager . Эти методы перечислены ниже:

  • getCurrentThermalStatus() возвращает текущее тепловое состояние устройства в виде целого числа, если только устройство не находится в режиме регулирования.
  • addThermalStatusListener() добавляет прослушиватель.
  • removeThermalStatusListener() удаляет ранее добавленный прослушиватель.

Используйте коды теплового состояния

Коды состояния термопары преобразуются в определённые уровни регулирования, которые можно использовать для сбора данных и разработки оптимального пользовательского интерфейса. Например, приложения могут получать статус 0x00000000 ( THERMAL_STATUS_NONE ), который впоследствии может измениться на 0x00000001 ( THERMAL_STATUS_LIGHT ). Обозначение состояния 0x00000000 как t0 и последующее измерение времени, прошедшего от состояния THERMAL_STATUS_NONE до состояния THERMAL_STATUS_LIGHT как t1, позволяет производителям устройств разрабатывать и тестировать стратегии снижения нагрузки для конкретных случаев использования. В следующей таблице представлены рекомендуемые способы использования кодов состояния термопары:

Код теплового состояния Описание и рекомендации по использованию
THERMAL_STATUS_NONE ( 0x00000000 ) Регулирование не применяется. Используйте этот статус для реализации защитных мер, таких как определение начала периода времени (от t0 до t1) от THERMAL_STATUS_NONE ( 0 ) до THERMAL_STATUS_LIGHT ( 1 ).
THERMAL_STATUS_LIGHT ( 0x00000001 ) Небольшое ограничение производительности, пользовательский интерфейс не страдает. Используйте щадящие методы снижения нагрузки на устройство на этом этапе. Например, откажитесь от повышения производительности или использования неэффективных частот, но только на больших ядрах.
THERMAL_STATUS_MODERATE ( 0x00000002 ) Умеренное ограничение, пользовательский интерфейс не сильно страдает. Снижение температуры влияет на активные процессы, поэтому приложениям следует немедленно снизить энергопотребление.
THERMAL_STATUS_SEVERE ( 0x00000003 ) Серьёзное ограничение производительности; пользовательский интерфейс значительно страдает. На этом этапе тепловая защита устройства должна ограничивать производительность системы. Это состояние может вызывать побочные эффекты, такие как рывки изображения и дрожание звука.
THERMAL_STATUS_CRITICAL ( 0x00000004 ) Платформа сделала всё возможное для снижения энергопотребления. Программное обеспечение для снижения тепловыделения устройства перевело все компоненты в режим работы на минимальной мощности.
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) Ключевые компоненты платформы отключаются из-за перегрева, и функциональность устройства ограничена. Этот код состояния представляет собой последнее предупреждение перед выключением устройства. В этом состоянии некоторые функции, такие как модем и сотовая связь, полностью отключены.
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) Немедленно завершить работу. Из-за серьёзности этой стадии приложения могут не получить это уведомление.

Производители устройств должны пройти тест VTS на тепловой HAL и могут использовать emul_temp из интерфейса ядра sysfs для имитации изменений температуры.