Skip to content

v1.1.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 May 16:09

[1.1.0] - 2026-05-17

Added

  • True lazy Frame.data(v1.1 round0 LAZY-001~005):mmap 路径下
    Frame.data 改成 MmapBytes 视图((parent ByteBuffer, offset, length)),
    zero-copy 访问;FrameBytes sealed interface 同时保留 HeapBytes
    实现给 InputStream 路径 / PCAPdroid UDP listener 用,dissector
    signature 不动。同等 PCAP 加载后 heap 占用预期下降 ~50%——raw bytes
    不再压堆,仅元数据 (layers / fields / FilterIndex) 留在堆上
  • PcapHandle 显式 mmap 生命周期PcapLoader.Result.Success
    handle,AppScreen 用 DisposableEffect(handle) 在 state 切换时显式
    触发 reader.tryExplicitUnmap()(reflection 调 MappedByteBuffer.cleaner),
    避免连续打开多个 PCAP 时 vmem 累积;reflection 失败时 fallback 到 GC
    • finalizer,跟 v0.9 之前一致不会更差
  • ByteReader FrameBytes 重载(u8 / u16Be / u32Be):pass 层
    (TcpReassembler / TcpSessionAnalyzer)直接吃 frame.data 读 2-4 字节,
    不需要 asByteArray() 整帧——lazy 收益的关键放大器
  • MemoryProfileTest (v1.1 round1 F-004 扩展):JVM 侧验证
    • mmap 路径 frame.data is MmapBytes(零拷贝视图)
    • InputStream 路径 frame.data is HeapBytes(对照路径行为不变)
    • mmap 加载 1.5 MB PCAP heap 增量 < 文件 50%
    • Pipeline.process 后 Frame.data 仍持 MmapBytes 视图(验 Pipeline
      内 asByteArray() 中间变量没意外泄漏进 Frame)
  • PcapHandleTest (v1.1 round0 LAZY-003):onClose 调一次 / 重复 close
    idempotent / 未 close 时不触发
  • QA_CHECKLIST §N.1 大文件 + lazy mmap heap 档案段:真机 adb shell dumpsys meminfo 流程 + Dalvik / Native Heap 期望档案 + 1 GB / 5 个
    PCAP 连开的验收点
  • ANDROID_PITFALLS §大文件 / mmap(3 条新 P-NN 入库):
    • P-20 单 MappedByteBuffer 上限 Int.MAX_VALUE (~2.1 GB),> 2 GB
      要多段 mmap
    • P-21 MappedByteBuffer 无标准 unmap API,reflection + GC 兜底
    • P-22 lazy mmap unmap 与背景线程读 frame.data 的 race(v1.1
      round1 F-001 已知风险点;任何未来加 LaunchedEffect 异步读 frame.data
      的 PR 必读)

Changed

  • 单次加载体积上限 500 MB → 1 GB(lazy refactor 让 raw bytes 不再
    占 heap;2 GB 需要多段 mmap,留 v2.0)
  • README + README.zh-CN Roadmap 表:v1.0 ✅(公开仓库收尾)+ v1.1 ✅
    (lazy + 1 GB)+ v2.0 ⏭️(多段 mmap + metadata streaming)

Fixed

  • PcapHandle.close()AtomicBoolean.compareAndSet 替原 @Volatile +
    check-then-set,保证 onClose 严格 exactly-once(v1.1 round1 F-002)
  • FrameFilter.Text 支持 UTF-8 中文 payload:pattern 与 frame.data 走
    同一字节级表示(pattern.toByteArray(UTF-8) → ISO_8859_1 decode)
  • 「关于」屏拦截系统手势返回 → onBack(与其它内嵌屏一致)
  • 过滤语法 HelpItem 点击替换 query 后光标自动跳到末尾(用 TextFieldValue
    overload 显式控 selection)
  • 过滤输入框(FilterBar + FilterHelpDialog)加 X 清除按钮(query 非空才显示)
  • FilterHelpDialog IME action = Search,回车直接 dismiss 返回列表