2.7 KiB
2.7 KiB
Canvas Performance Regression Protection — Walkthrough
HCIE v4 engine API'si üzerindeki 4K tuval optimizasyonlarının yanlışlıkla bozulmasını (regresyon) engellemek için criterion kütüphanesi entegre edildi ve dört kritik mekanizma için kalıcı benchmark testleri yazıldı.
Neler Yapıldı?
-
hcie-engine-api/Cargo.tomlGüncellemesicriterionkütüphanesi dev-dependency olarak eklendi.- Her benchmark için özel
[[bench]]kayıtları tanımlandı.
-
active_stroke_maskPooling Koruması- benches/stroke_mask_pooling.rs
- Brush engine'in kullandığı ~8 MB mask buffer'ın
end_stroke()sırasında serbest bırakılıp bırakılmadığını kontrol eder. - İlk tahsis (cold) ile sonraki ardışık strokların (warm) sürelerini karşılaştırır.
-
composite_scratchPooling Koruması- benches/composite_scratch_pooling.rs
- ~33 MB composite render buffer'ın
render_composite_region()içinde yeniden kullanıldığını doğrular.
-
below_cacheArdışık Stroke Reuse Koruması- benches/below_cache_reuse.rs
- Aynı katmanda birden çok stroke atıldığında alttaki katmanların yeniden derlenmek yerine (cache rebuild) mevcut cache'in kullanıldığını test eder.
- 4K çözünürlükte, 10 katmanlı senaryoda cache build (ilk vuruş) ve cache reuse (ikinci vuruş) maliyetlerini ayırır.
-
effects_dirtyConditional Skip Koruması- benches/effects_skip.rs
- Efekt/stili olmayan katmanlarda pahalı effects pipeline (ve 33 MB buffer kopyası) adımının bypass edildiğinden emin olur.
Doğrulama Sonuçları
- Yeni criterion testlerinin API erişimleri (özellikle
update_layer_stylefonksiyon imzası) ve bağımlılıkları derlenip onaylandı. - Eski golden testler olan
visual_regression.rsçalıştırılarak yeni performans testlerinin deterministik render sonuçlarını (pixel-perfect) bozmadığı doğrulandı (8/8 başarılı). - Eski performans testi
performance_stroke_4k.rsde sorunsuz çalıştırıldı.
Tip
Tüm Benchmark'ları Çalıştırmak İçin: Terminal üzerinden engine dizinine giderek şu komutu kullanabilirsiniz:
cargo bench -p hcie-engine-apiNot: Bu testler 4K ve çok katmanlı benchmarklar içerdiğinden belleği yoğun kullanır. Sonuçlar
./criterion/report/index.htmlolarak dökülecektir.