- Chromium/Google Chrome web tarayıcısındaki bir hatayı ilk kez düzelterek büyük ölçekli bir açık kaynak projeye katkıda bulundu.
- Bu, geçmişte yaptığı açık kaynak çalışmalarından oldukça farklı ve benzersiz bir deneyimdi.
- Bu süreç boyunca, benzer bir işi denemek isteyen geliştiricilere yardımcı olmak için tüm süreci kayda geçirdi.
Hata
- Düzeltilen hata, Chromium Devtools ile
AudioWorklet gibi ana iş parçacığı dışında çalışan worklet'lerin ağ istekleri arasındaki entegrasyon sorunuydu.
- Worklet'in oluşturduğu ağ istekleri Devtools'un ağ sekmesinde hiç görünmüyordu.
- "Disable Cache" seçeneği yok sayıldığı için geliştirme sırasında eski kod önbellekten temizlenmiyordu.
- Bu sorun birden fazla projede sürekli ortaya çıktı ve en az üç hata raporuyla örtüşüyordu.
- En küçük yeniden üretim oldukça basitti; önbellek başlıkları ayarlanmış bir script ile
AudioWorkletProcessor oluşturup sayfayı yeniden yükleyerek sorun yeniden üretilebiliyordu.
Chromium kodunu indirme ve derleme
- Hatayı gerçekten düzeltmenin ilk adımı, Chromium'u sıfırdan derlemekti.
- Neyse ki, başlıca işletim sistemlerinde nasıl derleme yapılacağına dair ayrıntılı belgeler sağlanmıştı.
- Güçlü bir bilgisayar kullanmasına rağmen ilk derleme 45 dakikadan uzun sürdü; RAM kullanımı 50 GB'ın üzerindeydi ve 100 GB'tan fazla disk alanı gerekiyordu.
- Artımlı derlemeler ise 10 saniyenin altında hızlıca tamamlanıyordu.
- Derleme zaman alsa da, gerekli tüm ön koşullar kurulduktan sonra büyük ölçüde otomatik ilerleyen, kullanışlı bir işti.
Hatayı bulma ve düzeltme
- Derleme ortamı çalıştıktan sonra kodu keşfetmeye başladı.
- Chromium kod tabanı çok büyüktü ve genel yapıyı kavramak zordu.
- Kod içindeki çok sayıdaki dolaylı başvuru ve modüler yapı nedeniyle kodu takip etmek zordu; dinamik dispatch yaygın biçimde kullanılıyordu.
- Ağ isteğinin başladığı noktadan, isteğin gerçekten oluşturulduğu ya da önbellekten getirildiği ana kadar izi sürmek için
printf debugging kullandı.
- Sorunun nedeni,
InspectorNetworkAgent'ın worklet hedefleri için oluşturulmamasıydı.
- Bunu düzeltmek için
InspectorNetworkAgent'ın WorkerGlobalScope yerine WorkerOrWorkletGlobalScope kabul etmesini sağladı.
- Ancak bu düzeltme tek başına yeterli olmadı; ayrıca Devtools frontend'inin TypeScript kodunu inceleyince
Type.Worklet için Capability.Networking eksik olduğunu fark etti.
- Bunu ekledikten sonra sorun tamamen çözüldü.
Testler ve kod incelemesi
- Debug log'larını temizleyip diff'i son kez kontrol ettikten sonra, kodun incelenmesi ve birleştirilmesi sürecini araştırdı.
Chromium Gerrit kod inceleme sitesinde bir hesap oluşturdu ve CLA imzaladı.
- İnceleyicileri belirledi, yazdığı kodu gözden geçirdi ve gerekli testleri ekledi.
- Devtools'un ağ denetim özelliğini test eden çeşitli JavaScript testlerine bakarak yeni testler yazdı.
- Sonunda kod incelemesinde "LGTM" onayı aldı ve PR birleştirildi.
İkinci CL
devtools_frontend deposunda worklet Devtools hedeflerine Capability.Network ekleyen değişiklik için bir CL daha yazdı.
- İlk PR'a benzer şekilde ilerledi ve CI testleri geçtikten sonra otomatik olarak birleştirildi.
Sürüm
- Düzeltmeyi içeren sürümün Chrome Canary'de yayımlanmasını bekledi.
- Chrome Canary günde iki kez güncelleniyor ve sonunda düzeltmenin yer aldığını doğruladı.
- Düzeltmeyi tamamlamak bir aydan uzun sürdü ve Chrome 130 sürümünde kararlı sürüm kanalına dahil edilmesi planlanıyordu.
Sonuç ve geriye dönük değerlendirme
- Hata düzeltmesi zaman aldı ve çok emek gerektirdi, ancak son derece benzersiz bir deneyimdi.
- Chromium ölçeğinde yazılımın nasıl geliştirildiğini deneyimleme fırsatı buldu.
- Kişisel olarak, kodunun dünya çapında milyonlarca (hatta milyarlarca) cihaza girecek olması büyük bir motivasyon kaynağıydı.
- Bu deneyim sayesinde Chromium'a nasıl katkı verileceğini öğrendi ve gelecekte daha fazla hata düzeltmeyi denemeyi planlıyor.
2 yorum
Gerçekten harika.
Hacker News görüşleri
Chromium kod tabanında çalışma deneyimi
VS Code'un C++ eklentisi sorunu
Chrome hata deneyimi
Chromium kod tabanıyla ilk deneyim
Chrome derleme gereksinimleri
printf hata ayıklama
printfile hata ayıklama kullanmaktan utanmamak gerektiğini söylüyorprintfile hata ayıklama çok etkiliÇevrimiçi kod tarayıcısı kullanma önerisi
cs.chromium.orgURL'sini akılda tutmanın kolay olduğunu belirtiyorWorkletGlobalScope ve WorkerGlobalScope farkı
Chromium hata düzeltmesine katkı önerisi
Görsel kopyalama hatası deneyimi