- Berhasil memperbaiki bug pada peramban web Chromium/Google Chrome untuk pertama kalinya dan berkontribusi pada proyek open source berskala besar.
- Ini adalah pengalaman unik yang sangat berbeda dibandingkan pekerjaan open source yang pernah dilakukan sebelumnya.
- Seluruh proses didokumentasikan agar dapat membantu pengembang lain yang ingin mencoba pekerjaan serupa.
Bug
- Bug yang diperbaiki adalah masalah integrasi antara Chromium Devtools dan permintaan jaringan dari worklet seperti
AudioWorklet yang berjalan di luar main thread.
- Permintaan jaringan yang dibuat oleh worklet sama sekali tidak muncul di tab Network pada Devtools.
- Opsi "Disable Cache" diabaikan, sehingga kode lama tidak terhapus dari cache selama pengembangan.
- Masalah ini terus muncul di beberapa proyek, dan setidaknya cocok dengan tiga laporan error.
- Reproduksi minimalnya sederhana; masalah dapat direproduksi dengan membuat
AudioWorkletProcessor menggunakan skrip yang memiliki header cache lalu me-reload halaman.
Mengunduh dan membangun kode Chromium
- Langkah pertama untuk benar-benar memperbaiki bug tersebut adalah membangun Chromium dari awal.
- Untungnya, tersedia dokumentasi rinci tentang cara membangunnya di sistem operasi utama.
- Meskipun menggunakan komputer yang kuat, build pertama memerlukan lebih dari 45 menit, dengan penggunaan RAM lebih dari 50GB dan ruang disk lebih dari 100GB.
- Build inkremental selesai dengan cepat dalam waktu kurang dari 10 detik.
- Proses build memang memakan waktu, tetapi setelah semua prasyarat yang diperlukan terpasang, prosesnya cukup nyaman karena berjalan otomatis.
Menemukan dan memperbaiki bug
- Setelah lingkungan build berfungsi, penelusuran kode pun dimulai.
- Codebase Chromium sangat besar, dan sulit memahami struktur keseluruhannya.
- Banyaknya referensi tidak langsung dan modularisasi di dalam kode membuat penelusuran menjadi sulit, dan dynamic dispatch digunakan secara luas.
- Dengan menggunakan debugging
printf, alur ditelusuri dari titik dimulainya permintaan jaringan hingga saat permintaan benar-benar dibuat atau diambil dari cache.
- Masalahnya terjadi karena
InspectorNetworkAgent tidak dibuat untuk target worklet.
- Untuk memperbaikinya, dilakukan perubahan agar
InspectorNetworkAgent menerima WorkerOrWorkletGlobalScope alih-alih WorkerGlobalScope.
- Namun perbaikan ini belum cukup; setelah memeriksa kode TypeScript pada frontend Devtools, ditemukan bahwa
Capability.Networking hilang untuk Type.Worklet.
- Setelah itu ditambahkan, masalah pun terselesaikan sepenuhnya.
Pengujian dan code review
- Setelah merapikan log debug dan memeriksa diff terakhir, proses review dan merge kode mulai dijajaki.
- Akun dibuat di situs code review
Chromium Gerrit, dan CLA ditandatangani.
- Reviewer dipilih, kode yang ditulis ditinjau kembali, dan pengujian yang diperlukan ditambahkan.
- Pengujian baru ditulis dengan merujuk pada beberapa pengujian JavaScript yang menguji fitur inspeksi jaringan Devtools.
- Pada akhirnya, persetujuan "LGTM" diterima dalam code review, dan PR pun di-merge.
CL kedua
- Satu CL lagi dibuat untuk perubahan di repositori
devtools_frontend guna menambahkan Capability.Network ke target worklet Devtools.
- Prosesnya berjalan mirip dengan PR pertama, dan setelah pengujian CI lolos, perubahan tersebut di-merge secara otomatis.
Rilis
- Menunggu hingga versi yang menyertakan perbaikan tersebut dirilis di Chrome Canary.
- Chrome Canary diperbarui dua kali sehari, dan akhirnya perbaikan yang dimaksud dapat dikonfirmasi.
- Penyelesaian perbaikan ini memakan waktu lebih dari satu bulan, dan dijadwalkan masuk ke stable release channel pada Chrome 130.
Hasil dan refleksi
- Memperbaiki bug ini memakan waktu dan membutuhkan banyak usaha, tetapi merupakan pengalaman yang sangat unik.
- Ini memberikan pengalaman langsung tentang bagaimana perangkat lunak dikembangkan pada skala Chromium.
- Secara pribadi, fakta bahwa kode tersebut akan masuk ke ratusan juta (atau miliaran) perangkat di seluruh dunia menjadi motivasi yang sangat besar.
- Melalui pengalaman ini, dipelajari cara berkontribusi ke Chromium, dan ke depan akan mencoba memperbaiki lebih banyak bug lagi.
2 komentar
Luar biasa.
Komentar Hacker News
Pengalaman bekerja dengan codebase Chromium
Masalah ekstensi C++ di VS Code
Pengalaman dengan bug Chrome
Pengalaman pertama dengan codebase Chromium
Persyaratan build Chrome
Debugging dengan printf
Rekomendasi memakai code browser online
Perbedaan WorkletGlobalScope dan WorkerGlobalScope
Saran memperbaiki bug Chromium
Pengalaman dengan bug salin gambar