Mitigasi termal

Dengan framework Android, produsen perangkat dan pengembang 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 pekerjaan akan dibatasi dan, jika perlu, penghentian termal kerangka kerja akan dimulai. Aplikasi yang menerima pemberitahuan tekanan panas melalui panggilan balik terdaftar di kelas PowerManager dapat menyesuaikan UX-nya dengan baik.

HAL termal

Android 9 dan lebih rendah menggunakan antarmuka polling yang ditentukan dalam Thermal HAL 1.0 untuk mendapatkan pembacaan suhu. HAL ini memungkinkan framework Android dan klien tepercaya lainnya, seperti HAL produsen perangkat, membaca suhu saat ini serta ambang pembatasan dan penghentian khusus kebijakan produk untuk setiap sensor melalui API yang sama.

Android 10 memperkenalkan sistem termal dalam kerangka Android dan versi baru HAL, Thermal HAL 2.0, yang mengabstraksi antarmuka ke perangkat keras subsistem termal. Antarmuka perangkat keras mencakup sensor suhu dan termistor untuk kulit, baterai, GPU, CPU, dan port USB. Suhu kulit perangkat adalah sistem yang paling penting untuk dilacak guna menjaga suhu permukaan perangkat dalam batas termal yang ditentukan.

Selain itu, Thermal HAL 2.0 memberi banyak klien pembacaan sensor termal dan tingkat keparahan terkait untuk menunjukkan tekanan termal. Gambar berikut menunjukkan dua pesan peringatan dari UI Sistem Android. Pesan-pesan ini ditampilkan ketika antarmuka panggilan balik 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 ITermal HAL . Setiap pemanggilan fungsi mengembalikan nilai status SUCCESS atau FAILURE . Jika SUCCESS dikembalikan, proses dilanjutkan. Jika FAILURE dikembalikan, pesan kesalahan, yang harus dapat dibaca manusia, dikirim ke status.debugMessage .

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

Selain informasi sensor termal, daftar perangkat pendingin yang dimitigasi juga ditampilkan di getCurrentCoolingDevices . Urutan daftar ini tetap ada, meskipun perangkat pendingin sedang offline. Produsen perangkat dapat menggunakan daftar tersebut untuk mengumpulkan metrik statsd .

Untuk informasi lebih lanjut, lihat implementasi Referensi .

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

Layanan termal

Di Android 10 dan lebih tinggi, layanan termal dalam framework ini menyediakan pemantauan konstan menggunakan berbagai sinyal mitigasi dari Thermal HAL 2.0, dan memberikan masukan tingkat keparahan pembatasan kepada kliennya. Klien ini mencakup komponen internal dan aplikasi Android. Layanan ini menggunakan dua antarmuka panggilan balik pengikat, IThermalEventListener dan IThermalStatusListener , yang diekspos sebagai panggilan balik. Yang pertama ditujukan untuk penggunaan platform internal dan produsen perangkat, dan yang terakhir untuk aplikasi Android.

Melalui antarmuka panggilan balik, status termal perangkat saat ini dapat diambil sebagai nilai integer mulai dari 0x00000000 (tidak ada pembatasan) hingga 0x00000006 (perangkat dimatikan). Hanya layanan sistem tepercaya, seperti API Android atau API produsen perangkat, yang dapat mengakses detail sensor termal dan informasi kejadian termal. Gambar berikut menunjukkan model alur proses mitigasi termal di Android 10 dan lebih tinggi:

Alur proses mitigasi termal di Android 10 dan lebih tinggi.

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

Pedoman produsen perangkat

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

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

Apa pun yang menghambat kinerja perangkat, termasuk kendala daya baterai, harus dilaporkan melalui HAL termal. Untuk memastikan hal ini terjadi, letakkan semua sensor yang mungkin mengindikasikan perlunya mitigasi (berdasarkan perubahan status) ke dalam HAL termal, dan laporkan tingkat keparahan tindakan mitigasi yang diambil. Nilai suhu yang dihasilkan dari pembacaan sensor tidak harus berupa suhu sebenarnya, asalkan secara akurat mencerminkan ambang batas tingkat keparahan yang sesuai. Misalnya, Anda dapat meneruskan nilai numerik yang berbeda, bukan nilai ambang batas suhu sebenarnya, atau Anda dapat membuat pita pengaman ke dalam spesifikasi ambang batas untuk memberikan histeresis. Namun, tingkat keparahan yang sesuai dengan nilai tersebut harus sesuai dengan apa yang dibutuhkan pada ambang batas tersebut. Misalnya, Anda mungkin memutuskan untuk mengembalikan 72°C sebagai ambang batas suhu kritis, padahal suhu sebenarnya adalah 65°C, dan suhu tersebut sesuai dengan tingkat keparahan kritis yang Anda tentukan. Tingkat keparahan harus akurat untuk fungsionalitas kerangka termal terbaik.

Untuk membaca lebih lanjut tentang tingkat ambang batas dalam kerangka kerja dan kaitannya dengan tindakan mitigasi, lihat Menggunakan kode status termal .

Gunakan API termal

Aplikasi dapat menambah dan menghapus pendengar, dan mengakses informasi status termal melalui kelas PowerManager . Antarmuka IThermal menyediakan semua fungsi yang diperlukan, termasuk mengembalikan nilai status termal. Antarmuka pengikat ITermal digabungkan sebagai antarmuka OnThermalStatusChangedListener , yang dapat digunakan aplikasi saat mendaftarkan atau menghapus pemroses status termal.

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

Gunakan kode status termal

Kode status termal diterjemahkan ke tingkat pembatasan tertentu, yang dapat Anda gunakan untuk mengumpulkan data dan merancang UX yang optimal. Misalnya, aplikasi mungkin menerima status 0x00000000 ( THERMAL_STATUS_NONE ), yang nantinya mungkin berubah menjadi 0x00000001 ( THERMAL_STATUS_LIGHT ). Menandai status 0x00000000 sebagai t0, lalu mengukur waktu yang berlalu dari status THERMAL_STATUS_NONE ke status THERMAL_STATUS_LIGHT sebagai t1 memungkinkan produsen perangkat merancang 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 ) Tidak ada pembatasan. Gunakan status ini untuk menerapkan tindakan perlindungan, seperti mendeteksi awal periode waktu (t0 hingga t1) dari THERMAL_STATUS_NONE ( 0 ) hingga THERMAL_STATUS_LIGHT ( 1 ).
THERMAL_STATUS_LIGHT ( 0x00000001 ) Pelambatan ringan, UX tidak terpengaruh. Gunakan mitigasi perangkat yang lembut untuk tahap ini. Misalnya, lewati peningkatan atau penggunaan frekuensi yang tidak efisien, tetapi hanya pada core yang besar.
THERMAL_STATUS_MODERATE ( 0x00000002 ) Pembatasan sedang, UX tidak terlalu terpengaruh. Mitigasi termal berdampak pada aktivitas di latar depan, sehingga aplikasi harus segera mengurangi daya.
THERMAL_STATUS_SEVERE ( 0x00000003 ) Pembatasan yang parah; UX sebagian besar terkena dampaknya. Pada tahap ini, mitigasi termal perangkat harus membatasi kapasitas sistem. Keadaan ini mungkin menyebabkan efek samping, seperti tampilan jank dan audio jitter.
THERMAL_STATUS_CRITICAL ( 0x00000004 ) Platform telah melakukan segalanya untuk mengurangi daya. Perangkat lunak mitigasi termal perangkat telah menempatkan semua komponen untuk bekerja pada kapasitas terendahnya.
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) Komponen utama dalam platform dimatikan karena kondisi termal dan fungsionalitas perangkat terbatas. Kode status ini mewakili peringatan terakhir sebelum perangkat dimatikan. Dalam keadaan ini, beberapa fungsi seperti modem dan data seluler dimatikan sepenuhnya.
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) Segera matikan. Karena beratnya tahapan ini, aplikasi mungkin tidak dapat menerima notifikasi ini.

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