v1.2.0-ko.18
1.2.0-ko.18May 4, 2026
요약
USB가 잠긴 X3 기기에서 발생하던 심한 랙(reader → 홈 전환 멈춤, 책 열기 15초+, 메뉴 진입 지연)과 heap 단편화 누적 크래시를 수정했습니다. 주 원인은 CPU 클럭 미설정 — 잠긴 X3의 부트로더가 앱을 저클럭 상태로 넘겨줘서 모든 동작이 4-16배 느렸고, 그 느린 루프가 alloc 재시도를 누적시켜 heap을 망가뜨렸습니다.
upstream 변경 사항
없음 (한국어 포크 단독 릴리즈).
한국어 버전 변경 사항
수정
- CPU 클럭을 부팅 시 160MHz로 강제 설정:
setCpuFrequencyMhz(160)를gpio.begin()직후,powerManager.begin()직전에 호출. 이전에는HalPowerManager가 부트로더가 남긴 클럭을 그대로 normalFreq로 받아서 영원히 그 클럭으로 동작했습니다. 잠긴 X3 기기에서 가장 큰 성능 회복.- 영향 예상치: 메뉴 exit ~1초 → ~250ms, 책 첫 열기 15초 → ~4초, 페이지 넘김 즉시화
- unlocked X3는 이미 160MHz였을 가능성이 커서 변화 없거나 미미한 개선
- 함수 실패 시
false반환하고 기존 클럭 유지하므로 부팅 안전성 영향 없음
- EPUB 렌더 경로 heap 가드:
- PNG 디코더 사전 체크를
getFreeHeap()→getMaxAllocHeap()로 변경. 디코더는 단일 ~44KB alloc이라 연속 블록 크기가 핵심. EpubReaderActivity::renderContents진입 시점에 maxAlloc 검사. 50KiB 미만이면 grayscale 안티앨리어싱 + image-AA 이중 렌더 스킵 → BW-only로 폴백.- image-AA 분기 안에서 mid-cycle 재검사 추가. 첫 render 후 단편화가 추가로 진행됐으면 두 번째 render도 스킵.
- PNG 디코더 사전 체크를
CPU 클럭 수정이 주 원인 해결이고, heap 가드는 이미지가 많거나 무거운 EPUB을 처음 열 때 절벽 직전을 더 부드럽게 만드는 보조 안전판입니다.
알려진 한계
- 잠긴 X3의 단편화 cliff edge 자체는 SRAM 380KB 한계라 완전 제거 불가
- 표지/이미지가 매우 많은 EPUB은 첫 열기에서 십수 초 걸릴 수 있음 (캐시 생성 비용)
- 두 번째 열기부터는 캐시로 가속