chore: pin plugin-warehouse v0.1.4 — depo sahnesindeki donma düzeltmeleri - #2
Merged
Merged
Conversation
…leri Bir depo projesini AÇMAK yetiyordu: kullanıcı hiçbir şeye dokunmadan editör kasıyor, kat çoğaltınca tamamen kilitleniyordu — kamera bile oynamıyordu. v0.1.3 bunun iki ayağını da kaldırıyor. **Kirli bayrağı tüketimi.** `<FloorElevationSystem>` bayrağı yalnız `def.geometry` ya da `def.system` bildirMEyen kind'lar için düşürüyor; bildirenler kendi bayraklarını kendileri tüketmek zorunda ve host'un dokuz yerleşik sistemi bunu yapıyor. Eklenti `def.system` bildirip hiçbir yerde `clearDirty` çağırmıyordu. Sahne yüklenirken her slab, ayak izine değen her `floorPlaced` düğümü kirletiyor — depodaki rafların tamamı — ve bayrak bir daha düşmüyordu. `dirtyNodes.size === 0` on iki host sisteminin ortak erken çıkışı olduğu için, küme dolu kaldığı sürece hepsi kümenin tamamını her karede geziyordu. **Kademeli mount.** Binlerce raf tek React commit'inde kuruluyordu. Artık host'un duvar/kapı/pencere yolundaki sözleşmenin aynısı: kare başına zaman bütçesi (host'un `WALL_PROGRESSIVE_TIME_BUDGET_MS`'iyle aynı 8 ms), ilerlemeyi garanti eden bir taban ve küçük sahneleri kademeli yola hiç sokmayan bir tavan. Yalnız pin: `9e1b525` → `3b38942`. Editör kaynağında değişiklik yok. bun.lock elle güncellendi — `bun install` bu ortamda `pascalorg/plugin-trees` tarball'ında 403 alıyor (erişim kapsamı dışında). Değişiklik mekanik: aynı SHA üç yerde, `peerDependencies` bloğunun v0.1.3'te birebir aynı olduğu doğrulandı. Diff, önceki pin bump'larla aynı şekilde (2 + 4 satır). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012VUVkZWKGN5B2oyEnAPjGg
ovurrsl
force-pushed
the
claude/x86-graphics-performance-issue-9rac6j
branch
from
August 5, 2026 05:21
5b2b5f5 to
9638ae4
Compare
`3b38942` (v0.1.3) → `fd22b04` (v0.1.4). Editör kaynağında değişiklik yok. v0.1.3 sahne açıkken sonsuza dek koşan kare işini kaldırmıştı. v0.1.4 onun üstüne raf başına tekrarlanan iki hesabı kaldırıyor: şekil anahtarı artık düğüm nesnesine memoize (çağrı başına 12,7 µs → 0,31 µs) ve kademeli mount kapısı yalnız `warehouse:pallet-rack`'te değil, kolektif çizen on üç kind'ın hepsinde — birden fazla raf türü barındıran bir sahnede yükleme kilidi bu yüzden duruyordu. peerDependencies bloğunun v0.1.3 ile birebir aynı olduğu karşılaştırmayla doğrulandı, o yüzden lock'taki blok olduğu gibi kalıyor. bun.lock yine elle güncellendi: `bun install` bu ortamda `pascalorg/plugin-trees` tarball'ında 403 alıyor (erişim kapsamı dışında bir depo). Aynı SHA üç yerde geçiyor, üçü de değişti, eski SHA hiçbir dosyada kalmadı. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012VUVkZWKGN5B2oyEnAPjGg
ovurrsl
marked this pull request as ready for review
August 5, 2026 06:41
ovurrsl
added a commit
that referenced
this pull request
Aug 5, 2026
49b2f16 -> fd22b04. Editör kaynağında değişiklik yok. Pin main'e de kondu (#2) ama main'den bundle üretilemiyor: next.config.ts'inde output: 'standalone' yok, o yüzden .next/standalone/apps/editor/server.js hiç oluşmuyor ve "Assemble the bundle" adımı düşüyor. Üretim bundle'ı bu daldan elle workflow_dispatch ile üretiliyor, o yüzden pinin canlıya ulaşması için burada olması gerekiyor.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Yalnız pin:
9e1b525→fd22b04(plugin-warehouse v0.1.4). Editör kaynağında değişiklik yok —apps/editor/package.json2 satır +bun.lock4 satır.Neden
Bir depo projesini açmak yetiyordu: kullanıcı hiçbir şeye dokunmadan editör kasıyor, kat çoğaltınca tamamen kilitleniyordu — kamera bile oynamıyordu.
Kullanıcının kendi makinesinden gelen ölçüm bunun yükleme takılması değil, kalıcı bir kare maliyeti olduğunu gösterdi: 41,3 saniyede toplam 22 kare (0,5 fps), p50 kare süresi 2098 ms, ana iş parçacığı %98,9 bloke. Kritik olan, kat çoğaltmadan önce de sahnenin boş boş dururken kare başına ~1,15 saniye harcıyor olmasıydı.
İki noktadan doğrusal model:
kare ≈ 260 ms sabit + 330 µs × raf sayısı. Raf sayısı ikiye katlandığında raf başına maliyet değişmiyor — yani her karede, sonsuza dek, raf başına sabit bir iş dönüyor. 330 µs raf başına, bir WebGL2 çizim çağrısının (tek haneli µs) iki-üç kat büyüklük üstünde, ve eklenti sahnenin tamamını ~95 çizim çağrısında çiziyor: maliyet GPU'da değil, CPU'da JavaScript'te.v0.1.3 + v0.1.4'te ne var
Kirli bayrağı tüketimi (v0.1.3).
FloorElevationSystemkirli bayrağını yalnızdef.geometryya dadef.systembildirmeyen kind'lar için düşürüyor:Bildiren kind'lar bayrağı kendileri tüketmek zorunda — host'un dokuz yerleşik sistemi bunu yapıyor. Eklenti
def.systembildirip hiçbir yerdeclearDirtyçağırmıyordu. Tetikleyici sahne yüklemesinin kendisi: her slabmarkNodesOverlappingSlabtaramasını koşuyor ve ayak izine değen hercapabilities.floorPlaceddüğümünü kirletiyor — bir depoda rafların tamamı. Bayrak düşmediği için küme bir daha boşalmıyor, vedirtyNodes.size === 0on iki host sisteminin ortak erken çıkışı. Yukarıdaki ölçümün gösterdiği kalıcı kare maliyetinin şekli tam olarak bu.Şekil anahtarı memoizasyonu (v0.1.4).
rackGeometryKeymount başına dört, sonraki her render'da iki kez çağrılıyor ve her çağrı seviye yapısını sıfırdan türetiyordu — o da seviye sayısında kareselleşen bir iş. Bildirilen dosyada 2.708 raf yalnız dört farklı şekle çözülüyor. Çağrı başına 12,7 µs → 0,31 µs (41×).Kademeli mount, tüm kind'lara (v0.1.3 → v0.1.4). Kapı v0.1.3'te yalnız
warehouse:pallet-rack'teydi; kolektif çizen on üç kind'ın on ikisi hâlâ tek React commit'inde mount oluyordu. Sözleşme host'un duvar yolundakiyle aynı (wall-system.tsx: "Large imports enter the progressive path so initial load can't lock the tab"), bütçe de aynı 8 ms — ve kind'lar arasında paylaşımlı. Dışa aktarımda kuyruk senkron boşaltılıyor, yani aktarılan dosyada eksik raf olmuyor.Görünüşte hiçbir şey değişmiyor: aynı geometri, aynı malzemeler, aynı çizim çağrısı sayısı. Değişen tek şey, aynı işin kaç kez yapıldığı.
Bu PR neden üretime akmanın önkoşulu
deploy-bundle.ymlyalnızmain'e push'ta tetikleniyor (paths: apps/editor/**, packages/**, bun.lock), sonra bundle'ı derleyipovurrsl/digitaltwin'e force-push ediyor. Eklenti uygulamanın içine derleniyor, yani bir eklenti sürümü siteye ancak yeniden derlemeyle ulaşıyor — workflow'un kendi yorumunun dediği gibi.Pin bump'ı bir dalda durduğu sürece bu workflow hiç koşmuyor, bundle hiç tazelenmiyor. Düzeltmelerin canlıda görünmemesinin nedeni buydu; pinin kendisi zaten doğruydu.
Bu PR merge edilince pin commit'i
apps/editor/package.jsonvebun.lock'a dokunduğu için workflow kendiliğinden koşar.bun.lock hakkında
Elle güncellendi.
bun installbu ortamdapascalorg/plugin-treestarball'ında 403 alıyor (erişim kapsamı dışında bir depo). Değişiklik mekanik ve doğrulandı:github:çözümü, tarball anahtarı), üçü de değişti; eski SHA hiçbir dosyada kalmadıpeerDependenciesbloğunun v0.1.4'te birebir aynı olduğu karşılaştırmayla doğrulandıpackage.json2 satır +bun.lock4 satırYine de gerçek bir runner'da
bun installile tazelenmesi iyi olur — depoda bunun için ayrıchore: regenerate bun.lock on a real runnercommit'leri var.Doğrulama
Eklenti tarafında
bun test1563 geçti,check-typestemiz, lint bulgusumainile birebir aynı. Her iki sürümün düzeltmeleri de koruma testleriyle geldi ve testlerin düzeltme geri alındığında başarısız olduğu ayrıca doğrulandı.Etki kullanıcının makinesinde doğrulanacak — buradaki headless ortamda render bozuk (R3F çift kopyası, havuzlar kurulmuyor), o yüzden bu PR tarayıcıdan gelen kare süresi öne sürmüyor. Yukarıdaki 41× ve raf başına 330 µs doğrudan ölçüm.
Deploy sonrası test: projeyi aç (kasma var mı, raflar kademeli mi beliriyor), sonra zemin katı
level duplicateyap.docs/olcum-kat-cogaltma.mdbetiği öncesi/sonrası tabloyu veriyor; "öncesi" tablosu yukarıda.Açıkta kalanlar
Kat çoğaltmanın en pahalı iki adımı host'ta, eklentide değil: toplu düğüm oluşturmada O(K²)
childrenyeniden kurulumu ve union'da olmayan kind'lar için boşa koşan doğrulama. 900 düğümde 64,8 ms → 4,6 ms ölçüldü. Yamalar eklenti deposundadocs/upstream-bulk-create.patchvedocs/upstream-autosave.patcholarak hazır, listesidocs/upstream-host-onerileri.md'de — bu PR'a dâhil değiller, editör kaynağına dokunmuyorum.Bu makinede WebGPU yok (
No available adapters→ WebGL2 fallback). x86 PC'de olup iPhone 14 Pro'da olmaması bununla ilgili olabilir; yukarıdaki aritmetiğe göre baskın maliyet bu değil, ama açık bir iplik.Not: sürüm tag'leri
Eklenti deposuna hiç tag push edilemedi — tag ref push'u 403 dönüyor (branch push aynı URL'le çalıştığı hâlde).
release.ymltag push'unda tetiklendiği için GitHub release'i kesiliyor. Bu PR'ın içeriğini etkilemiyor: pin doğrudan SHA'ya bakıyor.