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 di-throttle 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 rendah 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, membaca suhu saat ini serta batas throttling dan penonaktifan khusus kebijakan produk untuk setiap sensor melalui API yang sama.

Android 10 memperkenalkan sistem termal di framework Android dan versi HAL baru, Thermal HAL 2.0, yang mengabstraksi antarmuka ke perangkat keras 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 untuk beberapa klien guna 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 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 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 mengirimkan callback peristiwa pembatasan termal ke pemroses peristiwa termal.

Selain informasi sensor termal, daftar perangkat pendingin yang telah dimitigasi diekspos di getCurrentCoolingDevices. Urutan daftar ini tetap ada, 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 di framework menyediakan pemantauan konstan menggunakan berbagai sinyal mitigasi dari Thermal HAL 2.0, dan memberikan masukan tingkat pembatasan kepada kliennya. Klien ini mencakup komponen internal dan aplikasi Android. Layanan ini menggunakan dua antarmuka callback binder, IThermalEventListener dan IThermalStatusListener, yang diekspos sebagai callback. Yang pertama adalah untuk penggunaan internal platform 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 pembatasan) hingga 0x00000006 (perangkat dimatikan). Hanya layanan sistem tepercaya, seperti Android API atau API produsen perangkat, yang dapat mengakses informasi terperinci tentang sensor termal dan peristiwa termal. 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 pembatasan untuk Android 10 hingga 13, produsen perangkat harus menerapkan aspek HIDL Thermal HAL 2.0 (IThermal.hal).

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

Semua hal 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 diambil. Nilai suhu yang ditampilkan dari pembacaan sensor tidak harus berupa suhu sebenarnya, asalkan mencerminkan secara akurat nilai minimum tingkat keparahan yang sesuai. Misalnya, Anda dapat meneruskan nilai numerik yang berbeda, bukan nilai batas suhu sebenarnya, atau Anda dapat membuat pembatasan rentang ke dalam spesifikasi batas untuk memberikan histeresis. Namun, tingkat 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, saat suhu sebenarnya adalah 65 °C, dan suhu tersebut sesuai dengan tingkat keparahan kritis yang Anda tentukan. Tingkat keparahan harus akurat untuk fungsi framework termal terbaik.

Untuk membaca lebih lanjut tingkat batas dalam framework dan cara 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 class PowerManager. Antarmuka IThermal menyediakan semua fungsi yang diperlukan, termasuk menampilkan nilai status termal. Antarmuka pengikat termal IThermal di-wrap 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. Metode tersebut adalah:

Menggunakan kode status termal

Kode status termal diterjemahkan ke tingkat pembatasan 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 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) 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 core besar.
THERMAL_STATUS_MODERATE (0x00000002) Throttling sedang, UX tidak terlalu terpengaruh. Pengurangan suhu berdampak pada 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 di 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, dinonaktifkan 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 kernel sysfs untuk menyimulasikan perubahan suhu.