14 puan yazan GN⁺ 2024-08-27 | 2 yorum | WhatsApp'ta paylaş
  • 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

 
huiya 2024-08-27

Gerçekten harika.

 
GN⁺ 2024-08-27
Hacker News görüşleri
  • Chromium kod tabanında çalışma deneyimi

    • Kod üzerinde çalışmak için Sublime Text kullanıp her şeyi düz metin olarak ele alıyor
    • VS Code kullanıldığında işlev tanımına veya bildirime gitme gibi özelliklerden yararlanılabiliyor
    • Chromium tabanlı bir tarayıcı yapmak isteyenlere kendi yazısını öneriyor
  • VS Code'un C++ eklentisi sorunu

    • Büyük kod tabanı nedeniyle VS Code'un C++ eklentisi düzgün çalışmıyor
    • CPU çekirdeklerinin %100'e sabitlenmesi sorunu yaşanıyor
    • Chromium Code Search aracı faydalı
  • Chrome hata deneyimi

    • Linux'ta Chrome tabanlı tarayıcılarda "±±±±±±+..." girilmesine yol açan bir hata var
    • Diğer uygulamalarda ortaya çıkmıyor
    • Hatayı yeniden üretmek ve çözmek istiyor
  • Chromium kod tabanıyla ilk deneyim

    • İlk kez Chromium kod tabanını incelemenin düşündüğü kadar zor olmadığını söylüyor
    • Windows'ta resim yapıştırma hatasını çözmek için Chrome koduna bakmış
  • Chrome derleme gereksinimleri

    • Chrome'un derleme gereksinimleri çok yüksek
    • Yüksek performanslı bir iş istasyonu gerekiyor
    • Firefox'un derleme süresi de uzun
  • printf hata ayıklama

    • printf ile hata ayıklama kullanmaktan utanmamak gerektiğini söylüyor
    • printf ile hata ayıklama çok etkili
  • Çevrimiçi kod tarayıcısı kullanma önerisi

    • Kod gezintisi için çevrimiçi kod tarayıcısı kullanmayı öneriyor
    • cs.chromium.org URL'sini akılda tutmanın kolay olduğunu belirtiyor
  • WorkletGlobalScope ve WorkerGlobalScope farkı

    • Bu iki terim arasındaki farkı anlamasının zaman aldığını söylüyor
    • Adlandırma kuralının iyi olmadığını düşünüyor
  • Chromium hata düzeltmesine katkı önerisi

    • Chromium hatalarını düzeltmeyi tavsiye ediyor
    • Chrome hızlı güncellendiği için hatanın 4-6 hafta içinde düzelebileceğini söylüyor
    • Hata düzeltmesine katkı sağlayacak kişiler bulmak istiyor
  • Görsel kopyalama hatası deneyimi

    • Chrome tabanlı tarayıcılarda bir görseli panoya kopyalarken arayüz donuyor
    • Bunun nedeni PNG kodlama sorunu
    • Sıkıştırma seviyesini 0'a değiştirerek sorunu çözmüş
    • Firefox gecikme yaşamıyor ve özgün görsel dosyasını panoya koyuyor