fix: 레이아웃 LRU가 그 패스 자신의 작업 집합을 자르던 것 (#59 감사) - #60
Merged
Merged
Conversation
드로 패스 끝의 TrimLayoutCache가 사용 순서로만 256개를 남겨, 한 패스가 384개를 넘게 쓰면 먼저 그린 레이아웃을 버렸다. 캐럿 깜빡임이 캔버스 전체를 다시 그리므로 변경 없이 0.5초마다 346개를 만들고 버렸다(30x20 표, LayoutBuilds 훅으로 계측). 상류 WIP의 같은 LRU처럼 패스 시작 이후 쓴 항목은 건드리지 않는다. - 테스트: 변경 없는 패스는 레이아웃을 만들지 않는다(반증: 보호를 끄면 346) - 테스트: 트리에서 빼기 -> API 편집 -> 다시 넣기 2회(반증 2종 빨강) - 로드맵·CHANGELOG에 감사 결과 기록 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
control·toolbar 두 페이지 모두 JIT/AOT 되읽은 문서 바이트 동일(711자), 여백·글꼴 프로브 동일(글꼴 236개). AOT 전용 fault는 알려진 LineMetricsOf 폴백 하나. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
요약
PR #59(메모리 쥐어짜기) 감사. 09-24 감사 이후 들어온 자기 변경분만 골라, 해제·재사용 조합을 추적하고 테스트로 확인했다.
결함 (성능) — 레이아웃 LRU가 그 패스 자신의 작업 집합을 잘랐다
TrimLayoutCache가 사용 순서로만 256개를 남겨, 한 패스가 384개(256 + 여유 128)를 넘게 쓰면 먼저 그린 레이아웃이 패스 끝엔 가장 오래된 것이 되어 버려졌다.LayoutBuilds훅으로 계측).renderStart)처럼, 패스 시작 이후 쓴 항목은 건드리지 않게 했다(TrimLayoutCache(passStart)).문제없음 확인 (추적)
CanvasDevice.Trim은 Win2D가 D2D 리소스 잠금을 잡고 호출(멀티스레드 팩토리)테스트
Expected 0, Actual 346· 표식/문단 레이아웃을 Dispose만 하고 남기면 다시 그릴 때 실패남은 것
🤖 Generated with Claude Code