Mitigasi panas

Dengan framework Android, produsen perangkat dan developer aplikasi dapat menggunakan data termal untuk memastikan pengalaman pengguna (UX) yang konsisten jika perangkat mulai terlalu panas. Misalnya, saat sistem mengalami tekanan termal, tugas jobscheduler akan di-throttle dan, jika perlu, penonaktifan termal framework akan dimulai. Aplikasi yang menerima notifikasi stres termal melalui callback terdaftar di class PowerManager dapat menyesuaikan UX-nya dengan baik.

HAL Termal

Android 9 dan yang lebih lama menggunakan antarmuka polling yang ditentukan di Thermal HAL 1.0 untuk mendapatkan pembacaan suhu. HAL ini memungkinkan framework Android dan klien tepercaya lainnya, seperti HAL produsen perangkat, untuk membaca suhu saat ini dan nilai minimum penonaktifan serta throttling khusus kebijakan produk untuk setiap sensor melalui API yang sama.

Android 10 memperkenalkan sistem termal dalam framework Android dan versi HAL baru, Thermal HAL 2.0, yang memisahkan antarmuka ke perangkat hardware subsistem termal. Antarmuka hardware mencakup sensor suhu dan termistor untuk kulit, baterai, GPU, CPU, dan port USB. Suhu kulit perangkat adalah sistem terpenting yang harus dilacak untuk menjaga suhu permukaan perangkat dalam batas termal yang ditentukan.

Selain itu, Thermal HAL 2.0 menyediakan pembacaan sensor termal dan tingkat keparahan terkait kepada beberapa klien untuk menunjukkan stres termal. Gambar berikut menunjukkan dua pesan peringatan dari UI Sistem Android. Pesan ini ditampilkan saat antarmuka callback IThermalEventListener untuk sensor USB_PORT dan SKIN masing-masing mencapai tingkat keparahan THERMAL_STATUS_EMERGENCY.

Peringatan panas berlebih.

Gambar 1. Peringatan panas berlebih.

Suhu saat ini diambil untuk berbagai jenis sensor termal melalui IThermal HAL. Setiap panggilan fungsi menampilkan nilai status SUCCESS atau FAILURE. Jika SUCCESS ditampilkan, proses akan dilanjutkan. Jika FAILURE ditampilkan, pesan error, yang harus dapat dibaca manusia, akan dikirim ke status.debugMessage.

Selain sebagai antarmuka polling yang menampilkan suhu saat ini, Anda dapat menggunakan callback IThermalChangedCallback (HIDL, Android 10 hingga 13) atau IThermalChangedCallback (AIDL, Android 14 dan yang lebih baru) dengan antarmuka callback dari klien HAL termal, seperti layanan termal framework. Misalnya, RegisterIThermalChangedCallback dan UnregisterIThermalChangedCallback untuk mendaftarkan atau membatalkan pendaftaran peristiwa yang berubah tingkat keparahannya. Jika tingkat keparahan termal sensor tertentu telah berubah, notifyThrottling akan mengirimkan callback peristiwa throttling termal ke pemroses peristiwa termal.

Selain informasi sensor termal, daftar perangkat pendingin yang dimitigasi ditampilkan di getCurrentCoolingDevices. Urutan daftar ini bersifat persisten, meskipun perangkat pendingin telah offline. Produsen perangkat dapat menggunakan daftar untuk mengumpulkan metrik statsd.

Untuk informasi selengkapnya, lihat Implementasi referensi.

Meskipun Anda dapat menambahkan ekstensi sendiri, Anda tidak boleh menonaktifkan fungsi mitigasi termal.

Layanan termal

Di Android 10 dan yang lebih tinggi, layanan termal dalam framework memberikan pemantauan konstanta menggunakan berbagai sinyal mitigasi dari Thermal HAL 2.0, dan memberikan masukan tingkat throttling kepada kliennya. Klien ini mencakup komponen internal dan aplikasi Android. Layanan ini menggunakan dua antarmuka callback binder, IThermalEventListener dan IThermalStatusListener, yang ditampilkan sebagai callback. Yang pertama adalah untuk penggunaan platform internal dan produsen perangkat, dan yang kedua adalah untuk aplikasi Android.

Melalui antarmuka callback, status termal perangkat saat ini dapat diambil sebagai nilai bilangan bulat yang berkisar dari 0x00000000 (tanpa throttling) hingga 0x00000006 (penonaktifan perangkat). Hanya layanan sistem tepercaya, seperti Android API atau API produsen perangkat, yang dapat mengakses sensor termal dan informasi peristiwa termal yang mendetail. Gambar berikut memberikan model alur proses mitigasi termal di Android 10 dan yang lebih baru:

Alur proses mitigasi termal di Android 10 dan yang lebih tinggi.

Gambar 2. Alur proses mitigasi termal di Android 10 dan yang lebih tinggi.

Panduan produsen perangkat

Untuk melaporkan sensor suhu perangkat dan status throttling untuk Android 10 hingga 13, produsen perangkat harus menerapkan aspek HIDL dari Thermal HAL 2.0 (IThermal.hal).

Untuk melaporkan status throttling dan sensor suhu perangkat untuk Android 14, produsen perangkat harus mengimplementasikan aspek AIDL dari Thermal HAL 2.0 (IThermal.aidl).

Apa pun yang membatasi performa perangkat, termasuk batasan daya baterai, harus dilaporkan melalui HAL termal. Untuk memastikan hal ini terjadi, masukkan semua sensor yang mungkin menunjukkan perlunya mitigasi (berdasarkan perubahan status) ke dalam HAL termal, dan laporkan tingkat keparahan tindakan mitigasi yang dilakukan. Nilai suhu yang ditampilkan dari pembacaan sensor tidak harus berupa suhu sebenarnya, selama nilai tersebut secara akurat mencerminkan batas tingkat keparahan yang sesuai. Misalnya, Anda dapat meneruskan nilai numerik yang berbeda, bukan nilai nilai minimum suhu yang sebenarnya, atau Anda dapat membuat guardbanding ke dalam spesifikasi nilai minimum untuk memberikan histeresis. Namun, keparahan yang sesuai dengan nilai tersebut harus cocok dengan yang diperlukan pada nilai minimum tersebut. Misalnya, Anda dapat memutuskan untuk menampilkan 72°C sebagai batas suhu kritis, jika suhu sebenarnya adalah 65°C, dan sesuai dengan tingkat keparahan kritis yang Anda tentukan. Tingkat keparahan harus akurat untuk fungsi framework termal terbaik.

Untuk membaca selengkapnya tentang tingkat nilai minimum dalam framework dan cara nilai minimum tersebut sesuai dengan tindakan mitigasi, lihat Menggunakan kode status termal.

Menggunakan API termal

Aplikasi dapat menambahkan dan menghapus pemroses, serta mengakses informasi status termal melalui class PowerManager. Antarmuka IThermal menyediakan semua fungsi yang diperlukan, termasuk menampilkan nilai status termal. Antarmuka binder IThermal digabungkan sebagai antarmuka OnThermalStatusChangedListener, yang dapat digunakan aplikasi saat mendaftarkan atau menghapus pemroses status termal.

API termal Android memiliki metode callback dan polling untuk aplikasi agar aplikasi diberi tahu tentang tingkat keparahan termal melalui kode status, yang ditentukan dalam class PowerManager. Metode tersebut adalah:

Menggunakan kode status termal

Kode status termal diterjemahkan ke tingkat throttling tertentu, yang dapat Anda gunakan untuk mengumpulkan data dan mendesain UX yang optimal. Misalnya, aplikasi mungkin menerima status 0x00000000 (THERMAL_STATUS_NONE), yang nantinya akan berubah menjadi 0x00000001 (THERMAL_STATUS_LIGHT). Dengan menandai status 0x00000000 sebagai t0, lalu mengukur waktu yang berlalu dari status THERMAL_STATUS_NONE ke status THERMAL_STATUS_LIGHT sebagai t1, produsen perangkat dapat mendesain dan menguji strategi mitigasi untuk kasus penggunaan tertentu. Tabel berikut menguraikan cara yang disarankan untuk menggunakan kode status termal:

Kode status termal Deskripsi dan penggunaan yang disarankan
THERMAL_STATUS_NONE (0x00000000) Tanpa throttling. Gunakan status ini untuk menerapkan tindakan perlindungan, seperti mendeteksi awal jangka waktu (t0 hingga t1) dari THERMAL_STATUS_NONE (0) hingga THERMAL_STATUS_LIGHT (1).
THERMAL_STATUS_LIGHT (0x00000001) Throttling ringan, UX tidak terpengaruh. Gunakan mitigasi perangkat yang lembut untuk tahap ini. Misalnya, lewati peningkatan atau gunakan frekuensi yang tidak efisien, tetapi hanya pada inti yang besar.
THERMAL_STATUS_MODERATE (0x00000002) Throttling sedang, UX tidak terlalu terpengaruh. Mitigasi termal memengaruhi aktivitas latar depan, sehingga aplikasi harus segera mengurangi daya.
THERMAL_STATUS_SEVERE (0x00000003) Throttling yang parah; UX sangat terpengaruh. Pada tahap ini, mitigasi termal perangkat harus membatasi kapasitas sistem. Status ini dapat menyebabkan efek samping, seperti jank tampilan dan jitter audio.
THERMAL_STATUS_CRITICAL (0x00000004) Platform telah melakukan segala hal untuk mengurangi daya. Software mitigasi termal perangkat telah menempatkan semua komponen untuk berjalan pada kapasitas terendah.
THERMAL_STATUS_EMERGENCY (0x00000005) Komponen utama di platform dinonaktifkan karena kondisi termal dan fungsi perangkat dibatasi. Kode status ini menunjukkan peringatan terakhir sebelum perangkat dimatikan. Dalam situasi ini, beberapa fungsi, seperti modem dan data seluler, dinonaktifkan sepenuhnya.
THERMAL_STATUS_SHUTDOWN (0x00000006) Matikan segera. Karena tingkat keparahan tahap ini, aplikasi mungkin tidak dapat menerima notifikasi ini.

Produsen perangkat harus lulus pengujian VTS untuk HAL termal, dan dapat menggunakan emul_temp dari antarmuka sysfs kernel untuk menyimulasikan perubahan suhu.