-
Notifications
You must be signed in to change notification settings - Fork 0
Releases: Seryta/PacketScope
Releases · Seryta/PacketScope
v1.1.0
[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 访问;FrameBytessealed 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 之前一致不会更差
ByteReaderFrameBytes 重载(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)
- mmap 路径
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 必读)
- P-20 单 MappedByteBuffer 上限
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 返回列表