Files
VesiscanClinicalAndroid/app/src/main/java
dw.jang 4d8ada0634 fix(logs): §D · cyclesBuffer 무한 누적 → cycles.jsonl 스트리밍 (Priority 2)
배경 (LOG_STORAGE_ANALYSIS §D):
  ClinicalSessionStore.cyclesBuffer 는 endMeasurement() 호출 전까지 모든 사이클을
  메모리 보관. MeasurementCycle 1개 ≈ 16KB · autoCapture 600ms → 시간당 ~90MB 힙.
  장시간 임상 세션 OOM 위험.

수정:
  cyclesBuffer (MutableList<MeasurementCycle>) 완전 제거 · cycleCounter (Int) 로 대체.
  addCycle / addAlignmentFrame 은 이제:
    1. MeasurementCycle 생성
    2. appendCycleToStream() → cycles.jsonl 에 즉시 append (fire-and-forget)
    3. cycleCounter++

  writeMeasurementJson (endMeasurement 시점):
    - cycles.jsonl 를 useLines 스트리밍 read → cyclesArr 조립
    - measurement.json 생성 성공 시 cycles.jsonl 삭제 (SSOT 유지)
    - 파싱 실패 line 은 skip (corrupt 방지)

  startMeasurement:
    - 이전 세션 잔여 cycles.jsonl 삭제 (같은 folderName 재사용 방지)

  discardAndDeleteFolder / endMeasurement:
    - cycleCounter = 0 리셋

효과:
  메모리 상시: cycleCounter (4B) 만 · 이전 대비 시간당 90MB 절감
  End 시점 read-back 은 필요 (measurement.json aggregate) · 그때만 잠깐 spike
  Cycle 저장 실패해도 측정 계속 (silent · fire-and-forget UC-05)

측정.json 스키마 변경 없음 · guardian app / 분석 툴 하위 호환.

검증: BUILD SUCCESSFUL 2s
2026-08-04 16:00:54 +09:00
..