Mitigasi termal

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 dibatasi dan, jika perlu, penonaktifan termal framework akan dimulai. Aplikasi yang menerima notifikasi tekanan 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 dalam HAL Termal 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 batas throttling serta penonaktifan khusus kebijakan produk untuk setiap sensor melalui API yang sama.

Android 10 memperkenalkan sistem termal di framework Android dan versi HAL baru, HAL Termal 2.0, yang mengabstraksi 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, HAL Termal 2.0 menyediakan beberapa klien dengan pembacaan sensor termal dan tingkat keparahan terkait untuk menunjukkan tekanan 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 terlalu panas.

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 menjadi 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 tinggi) dengan antarmuka callback dari klien HAL termal, seperti layanan termal framework. Misalnya, RegisterIThermalChangedCallback dan UnregisterIThermalChangedCallback untuk mendaftarkan atau membatalkan pendaftaran peristiwa perubahan tingkat keparahan. 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 juga ditampilkan di getCurrentCoolingDevices. Urutan daftar ini bersifat persisten, meskipun perangkat pendingin telah offline. Produsen perangkat dapat menggunakan daftar ini untuk mengumpulkan metrik statsd.

Untuk mengetahui 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 menyediakan pemantauan konstan menggunakan berbagai sinyal mitigasi dari HAL Termal 2.0, dan memberikan masukan tingkat keparahan 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 internal platform dan produsen perangkat, sedangkan 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 produsen perangkat API, yang dapat mengakses informasi sensor termal dan peristiwa termal yang mendetail. Gambar berikut memberikan model alur proses mitigasi termal di Android 10 dan yang lebih tinggi:

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 HAL Termal 2.0 (IThermal.hal).

Untuk melaporkan sensor suhu perangkat dan status throttling untuk Android 14, produsen perangkat harus menerapkan aspek AIDL dari HAL Termal 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 kebutuhan mitigasi (berdasarkan perubahan status) ke dalam HAL termal, dan laporkan tingkat keparahan tindakan mitigasi yang diambil. Nilai suhu yang ditampilkan dari pembacaan sensor tidak harus merupakan suhu sebenarnya, selama nilai tersebut secara akurat mencerminkan batas keparahan yang sesuai. Misalnya, Anda dapat meneruskan nilai numerik yang berbeda, bukan nilai batas suhu sebenarnya, atau Anda dapat membuat guardbanding ke dalam spesifikasi batas untuk memberikan histeresis. Namun, tingkat keparahan yang sesuai dengan nilai tersebut harus cocok dengan yang diperlukan pada batas tersebut. Misalnya, Anda dapat memutuskan untuk menampilkan 72°C sebagai batas suhu kritis, saat 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 lebih lanjut tentang tingkat batas dalam framework dan bagaimana tingkat 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 PowerManager class. 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 agar aplikasi dapat diberi tahu tentang tingkat keparahan termal melalui kode status, yang ditentukan dalam class PowerManager. Metodenya 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 mungkin kemudian 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 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) Tidak ada throttling. Gunakan status ini untuk menerapkan tindakan perlindungan, seperti mendeteksi awal periode waktu (t0 hingga t1) dari THERMAL_STATUS_NONE (0) ke 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 penggunaan frekuensi yang tidak efisien, tetapi hanya pada core 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 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 segalanya untuk mengurangi daya. Software mitigasi termal perangkat telah menempatkan semua komponen untuk berjalan pada kapasitas terendahnya.
THERMAL_STATUS_EMERGENCY (0x00000005) Komponen utama dalam platform dimatikan karena kondisi termal dan fungsi perangkat terbatas. Kode status ini mewakili peringatan terakhir sebelum perangkat dimatikan. Dalam status ini, beberapa fungsi, seperti modem dan data seluler, dimatikan sepenuhnya.
THERMAL_STATUS_SHUTDOWN (0x00000006) Segera matikan. Karena tingkat keparahan tahap ini, aplikasi mungkin tidak dapat menerima notifikasi ini.

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