Halaman ini menjelaskan metode umum untuk mengukur latensi input dan output.
Mengukur Latensi Keluaran
Ada beberapa teknik yang tersedia untuk mengukur latensi keluaran, dengan berbagai tingkat akurasi dan kemudahan menjalankan, yang dijelaskan di bawah ini. Lihat juga rangkaian Pengujian untuk contoh lingkungan pengujian.
Tes LED dan osiloskop
Tes ini mengukur latensi dalam kaitannya dengan indikator LED perangkat. Jika perangkat produksi Anda tidak memiliki LED, Anda dapat memasang LED pada perangkat dengan faktor bentuk prototipe. Untuk akurasi yang lebih baik lagi pada perangkat prototipe dengan sirkuit terbuka, sambungkan satu probe osiloskop ke LED secara langsung untuk melewati latensi sensor cahaya.
Jika Anda tidak dapat memasang LED pada perangkat produksi atau prototipe Anda, coba solusi berikut:
- Gunakan pin General Purpose Input/Output (GPIO) untuk tujuan yang sama.
- Gunakan JTAG atau port debug lainnya.
- Gunakan lampu latar layar. Ini mungkin berisiko karena lampu latar mungkin memiliki latensi yang tidak dapat diabaikan, dan dapat berkontribusi pada pembacaan latensi yang tidak akurat.
Untuk melakukan tes ini:
- Jalankan aplikasi yang secara berkala menyalakan LED pada saat yang sama mengeluarkan audio.
Catatan: Untuk mendapatkan hasil yang bermanfaat, penting untuk menggunakan API yang benar di aplikasi pengujian sehingga Anda menggunakan jalur output audio yang cepat. Lihat Desain Untuk Mengurangi Latensi untuk latar belakang.
- Tempatkan sensor cahaya di sebelah LED.
- Hubungkan probe osiloskop saluran ganda ke jack headphone berkabel (output saluran) dan sensor cahaya.
- Gunakan osiloskop untuk mengukur perbedaan waktu antara mengamati sinyal keluaran saluran versus sinyal sensor cahaya.
Perbedaan waktu adalah perkiraan latensi keluaran audio, dengan asumsi latensi LED dan latensi sensor cahaya sama-sama nol. Biasanya, LED dan sensor cahaya masing-masing memiliki latensi yang relatif rendah pada urutan satu milidetik atau kurang, yang cukup rendah untuk diabaikan.
Mengukur Latensi Pulang Pergi
Latensi pulang pergi adalah jumlah latensi keluaran dan latensi masukan.
Tes Larsen
Salah satu tes latensi termudah adalah tes umpan balik audio (efek Larsen). Ini memberikan ukuran kasar dari keluaran gabungan dan latensi masukan dengan mengatur waktu loop respons impuls. Tes ini tidak terlalu berguna untuk analisis rinci dengan sendirinya karena sifat tes, tetapi dapat berguna untuk mengkalibrasi tes lain, dan untuk menetapkan batas atas.
Metode ini tidak memecah waktu komponen, yang penting ketika latensi keluaran dan latensi masukan independen. Jadi metode ini tidak disarankan untuk mengukur latensi keluaran atau nilai latensi masukan yang tepat secara terpisah, tetapi mungkin berguna untuk menetapkan perkiraan kasar.
Latensi keluaran ke speaker di perangkat bisa jauh lebih besar daripada latensi keluaran ke konektor headset. Ini karena koreksi dan perlindungan speaker.
Untuk melakukan tes ini:
- Jalankan aplikasi yang menangkap audio dari mikrofon dan segera memutar kembali data yang diambil melalui speaker.
- Buat suara secara eksternal, seperti mengetuk pensil di dekat mikrofon. Kebisingan ini menghasilkan loop umpan balik. Atau, seseorang dapat menyuntikkan impuls ke dalam loop menggunakan perangkat lunak.
- Ukur waktu antara pulsa umpan balik untuk mendapatkan jumlah latensi keluaran, latensi masukan, dan overhead aplikasi.
Berikut adalah beberapa sumber daya untuk mendapatkan aplikasi untuk uji Larsen:
- Aplikasi loopback Dr. Rick O'Rang adalah aplikasi Android untuk pengujian umpan balik audio. Anda dapat mengunduh aplikasi dari Google Play atau mendapatkan kode sumber dari GitHub .
- Kami juga menerbitkan contoh implementasi di slesTestFeedback.cpp . Ini adalah aplikasi baris perintah dan dibuat menggunakan lingkungan pembangunan platform; namun harus mudah untuk mengadopsi kode untuk lingkungan lain. Anda juga memerlukan kode FIFO non-blocking yang terletak di perpustakaan
audio_utils
.
Dongle Putar Balik Audio
Dongle loopback audio Dr. Rick O'Rang berguna untuk mengukur latensi bolak-balik melalui konektor headset. Gambar di bawah menunjukkan hasil menyuntikkan impuls ke dalam loop sekali, dan kemudian membiarkan loop umpan balik berosilasi. Periode osilasi adalah latensi bolak-balik. Perangkat tertentu, rilis perangkat lunak, dan kondisi pengujian tidak ditentukan di sini. Hasil yang ditampilkan tidak boleh diekstrapolasi.
![pengukuran pulang pergi](https://source.android.com/static/devices/audio/images/round_trip.png?authuser=9&hl=id)
Gambar 1. Pengukuran pulang pergi
Anda mungkin perlu melepas kabel USB untuk mengurangi kebisingan, dan menyesuaikan tingkat volume untuk mendapatkan osilasi yang stabil.
Mengukur Latensi Masukan
Latensi input lebih sulit diukur daripada latensi keluaran. Tes berikut mungkin bisa membantu.
Salah satu pendekatannya adalah pertama-tama menentukan latensi keluaran menggunakan metode LED dan osiloskop dan kemudian menggunakan uji umpan balik audio (Larsen) untuk menentukan jumlah latensi keluaran dan latensi masukan. Perbedaan antara kedua pengukuran ini adalah latensi input.
Teknik lain adalah dengan menggunakan pin GPIO pada perangkat prototipe. Secara eksternal, pulsa input GPIO pada saat yang sama saat Anda menampilkan sinyal audio ke perangkat. Jalankan aplikasi yang membandingkan perbedaan waktu kedatangan sinyal GPIO dan data audio.
Mengurangi Latensi
Untuk mencapai latensi audio yang rendah, berikan perhatian khusus di seluruh sistem pada penjadwalan, penanganan interupsi, manajemen daya, dan desain driver perangkat. Tujuan Anda adalah untuk mencegah bagian mana pun dari platform memblokir utas audio SCHED_FIFO
selama lebih dari beberapa milidetik. Dengan mengadopsi pendekatan sistematis seperti itu, Anda dapat mengurangi latensi audio dan mendapatkan manfaat sampingan dari kinerja yang lebih dapat diprediksi secara keseluruhan.
Audio underruns, ketika terjadi, seringkali hanya dapat dideteksi dalam kondisi tertentu atau hanya pada transisi. Coba tekankan sistem dengan meluncurkan aplikasi baru dan gulir cepat melalui berbagai tampilan. Namun ketahuilah bahwa beberapa kondisi pengujian sangat menegangkan sehingga berada di luar tujuan desain. Misalnya, mengambil laporan bug memberikan beban yang sangat besar pada sistem sehingga mungkin ada underrun dalam kasus itu.
Saat menguji underruns:
- Konfigurasikan DSP apa pun setelah prosesor aplikasi sehingga menambahkan latensi minimal.
- Jalankan pengujian dalam kondisi yang berbeda seperti menyalakan atau mematikan layar, USB dicolokkan atau dicabut, Wi-Fi aktif atau nonaktif, Bluetooth aktif atau nonaktif, dan radio telepon dan data aktif atau nonaktif.
- Pilih musik yang relatif tenang yang sangat Anda kenal, dan yang mudah didengar.
- Gunakan headphone berkabel untuk sensitivitas ekstra.
- Beri diri Anda istirahat agar Anda tidak mengalami "kelelahan telinga".
Setelah Anda menemukan penyebab underruns, kurangi jumlah dan ukuran buffer untuk memanfaatkannya. Pendekatan bersemangat untuk mengurangi jumlah dan ukuran buffer sebelum menganalisis underruns dan memperbaiki penyebab underruns hanya menghasilkan frustrasi.
Peralatan
systrace
adalah alat serba guna yang sangat baik untuk mendiagnosis gangguan kinerja tingkat sistem.
Keluaran dari dumpsys media.audio_flinger
juga berisi bagian berguna yang disebut "statistik bergerak sederhana". Ini memiliki ringkasan variabilitas waktu yang telah berlalu untuk setiap campuran audio dan siklus I/O. Idealnya, semua pengukuran waktu harus kira-kira sama dengan waktu siklus rata-rata atau nominal. Jika Anda melihat minimum yang sangat rendah atau maksimum yang tinggi, ini merupakan indikasi adanya masalah, kemungkinan latensi penjadwalan yang tinggi atau waktu penonaktifan interupsi. Bagian ekor dari output sangat membantu, karena menyoroti variabilitas di luar +/- 3 standar deviasi.