PicMe 性能基线报告合集

文档类型: 性能报告 (Performance Baseline Report) 最后更新: 2026-07-08 维护者: [QA] 质量专家

本文档合并了 PicMe 项目的历史性能采集报告,保留原始数据表格供趋势分析使用。

📋 目录

  1. 0.8B vs 1.7B 本地 LLM
  2. ASR + NCNN 人脸检测 + 美颜(高性能手机)
  3. 开启本地 LLM 前后对比

1. 性能对比诊断报告:0.8B vs 1.7B 本地 LLM(ASR + NCNN人脸检测 + 美颜)

2026-06 模型升级:默认模型已从 Qwen3-1.7B 升级至 Qwen3.5-2B。 本文档为 0.8B vs 1.7B 的历史基线数据,保留供性能趋势参考。 Qwen3.5-2B 对应指标待后续采集更新。

采集时间:2026-06-06 设备:51912a5c(高性能手机) 场景A(1.7B):ASR + NCNN 人脸检测 + 美颜 + Qwen3-1.7B 场景B(0.8B):ASR + NCNN 人脸检测 + 美颜 + Qwen3.5-0.8B


1. 核心指标对比

指标 1.7B 模型 0.8B 模型 变化 影响
CPU 占用 49% 2.6% -95% 极大改善
Native Heap 3.61 GB 3.11 GB -14% 改善
总 PSS 6.24 GB 3.48 GB -44% 显著改善
总 RSS 4.05 GB 3.64 GB -10% 轻微改善
Swap PSS 2.33 GB 448 KB -99.98% 极大改善
帧率抖动(legacy) 18.42% 11.12% -40% 改善
帧率抖动(janky) 0.05% 0.06% +20% 持平
渲染延迟 99th 22ms 31ms +41% 恶化
GPU 延迟 99th 7ms 6ms -14% 轻微改善
温度(电池) 41.1°C 40.1°C -1°C 轻微改善
温度(quiet_therm) 37.9°C 37.3°C -0.6°C 轻微改善
线程数 78 79 +1 持平
应用状态 OOM 被杀 稳定运行 关键差异

2. 内存详细对比

内存区域 1.7B 模型 0.8B 模型 变化
Native Heap 3.61 GB 3.11 GB -500 MB
Java Heap 79 MB 86 MB +7 MB
EGL mtrack 85.0 MB 78.6 MB -6.4 MB
Graphics 104.9 MB 95.4 MB -9.5 MB
Unknown 41.5 MB 94.6 MB +53.1 MB
Code (.so/.jar/.apk) 10.5 MB 18.7 MB +8.2 MB

关键发现


3. 渲染性能对比

渲染指标 1.7B 模型 0.8B 模型 变化
50th percentile 6ms 6ms 持平
90th percentile 10ms 11ms +1ms
95th percentile 13ms 16ms +3ms
99th percentile 22ms 31ms +9ms
GPU 50th 1ms 2ms +1ms
GPU 90th 3ms 2ms -1ms
GPU 95th 4ms 3ms -1ms
GPU 99th 7ms 6ms -1ms
Janky frames (legacy) 18.42% 11.12% -7.3%
Janky frames (janky) 0.05% 0.06% 持平

关键发现


4. 温度对比

传感器 1.7B 模型 0.8B 模型 变化
电池 41.1°C 40.1°C -1°C
quiet_therm 37.9°C 37.3°C -0.6°C
CPU 簇0 平均 ~81°C ~80°C -1°C
CPU 簇1 平均 ~80°C ~73°C -7°C
GPU 平均 ~81°C ~72°C -9°C

关键发现


5. CPU 占用分析

指标 1.7B 模型 0.8B 模型 变化
总 CPU 49% 2.6% -46.4%
User 40% 2.1% -37.9%
Kernel 9.5% 0.4% -9.1%

关键发现


6. 稳定性对比

指标 1.7B 模型 0.8B 模型
应用状态 OOM 被杀 稳定运行
采集后 PID 存活
内存压力 极高(Swap 2.33GB) 正常(Swap 448KB)

关键发现


7. 综合评估

7.1 改善项

改善 幅度 说明
稳定性 从被杀到稳定 最关键改善
CPU 占用 -95% 几乎无推理开销
Swap 压力 -99.98% 内存充足
总 PSS -44% 系统不再紧张
帧率抖动 -40% 卡顿减少
温度 -1~9°C 发热降低

7.2 仍存问题

问题 0.8B 值 无 LLM 基线 差距
渲染延迟 99th 31ms 8ms +23ms
Legacy janky frames 11.12% 0.89% +10.23%
Native Heap 3.11GB 1.72GB +1.39GB
总 PSS 3.48GB 2.08GB +1.40GB
电池温度 40.1°C 36.1°C +4°C

8. 根因分析

8.1 为什么 0.8B 能稳定运行?

  1. 模型权重减少:470MB vs 1.2GB(-61%)
  2. 运行时内存减少:~2.5GB vs ~3.5GB(-29%)
  3. 总 PSS 3.48GB < LMK 阈值:系统不杀进程
  4. Swap 几乎为零:无换页开销

8.2 为什么仍有卡顿?

  1. Native Heap 3.11GB 仍偏高:0.8B 模型 + 相机美颜管线叠加
  2. 渲染 99th 31ms:可能 LLM 推理与渲染线程竞争 GPU/CPU
  3. Legacy janky 11.12%:虽然比 1.7B 好,但仍高于基线

9. 结论

模型 可用性评估
无 LLM 流畅运行
1.7B OOM 被杀,不可用
0.8B 可用,但有轻微卡顿

0.8B 模型是从「不可用」到「可用」的关键切换。

但仍需进一步优化才能达到「流畅」: - 动态加载/卸载可释放 2.5GB 内存 - GPU 后端可进一步降低 CPU 占用 - 预览分辨率降低可减少渲染竞争



11. 发热后追加测试(关键发现)

用户反馈「已经开始发烫」后,立即执行追加采集。 此时设备已持续运行 0.8B 模型约 20 分钟。

11.1 发热前后对比

指标 初始(0.8B) 发热后 变化
CPU 占用 2.6% 157% +5940%
总 PSS 3.48 GB 6.86 GB +97%
Swap PSS 448 KB 4.47 GB +9970x
Native Heap 3.11 GB 1.98 GB -36%
电池温度 40.1°C 45.1°C +5°C
Legacy janky 11.12% 19.35% +74%
渲染 99th 31ms 20ms -35%
应用状态 稳定 濒临被杀

11.2 关键发现

发热后 0.8B 模型表现接近 1.7B 初始状态:

11.3 根因分析

温度 → 降频 → 恶性循环:

  1. 温度上升(40.1°C → 45.1°C) → CPU/GPU 触发温控降频
  2. 降频后推理变慢 → 相同任务消耗更多 CPU 时间
  3. CPU 占用从 2.6% 涨到 157% → 系统调度压力增大
  4. 系统内存紧张 → ZRAM/Swap 膨胀(4.47GB)
  5. Swap 换页开销 → 进一步增加 CPU 负载
  6. 渲染线程被抢占 → janky frames 从 11% 涨到 19%

11.4 结论修正

场景 初始评估 发热后评估
0.8B 短时间运行 可用,轻微卡顿
0.8B 持续运行 接近 1.7B 水平,濒临被杀

0.8B 模型并非「安全」选择,只是延迟了崩溃时间。

持续运行 20 分钟后,0.8B 模型的内存和 CPU 表现已接近 1.7B 模型初始状态。如果不实施动态加载/卸载或温控策略,0.8B 模型最终同样会被 OOM Kill。

11.5 紧急建议

  1. 立即:相机预览页卸载 LLM 模型(释放 2.5GB+ 内存)
  2. 短期:温度 > 42°C 时自动切换到远程 LLM
  3. 中期:实现 LLM 推理与相机预览互斥(不能同时运行)
  4. 长期:INT4 量化或模型分片加载

10. 附录

10.1 Trace 文件

10.2 0.8B 模型配置

{
    "llm_model": "llm.mnn",
    "llm_weight": "llm.mnn.weight",
    "backend_type": "cpu",
    "thread_num": 4,
    "precision": "low",
    "memory": "low",
    "max_new_tokens": 8192,
    "sampler_type": "mixed",
    "temperature": 1.0,
    "topP": 0.95,
    "topK": 20,
    "min_p": 0
}

10.3 模型文件对比

模型 llm.mnn.weight 总目录大小
Qwen3-1.7B(历史) 1.2GB ~1.3GB
Qwen3.5-0.8B 470MB ~540MB
Qwen3.5-2B(当前默认) ~1.8GB ~2.0GB(预估)

2. 性能诊断报告:ASR + NCNN人脸检测 + 美颜(高性能手机)

采集时间:2026-06-06 20:05 设备:51912a5c(高性能手机) 场景:同时开启 ASR、NCNN 人脸检测、美颜 Trace 文件:/tmp/picme_trace_new.perfetto-trace(128MB)


1. 设备信息

指标
设备序列号 51912a5c
CPU 最大频率 2.75 GHz
电量 100%
当前温度(电池) 36.1°C
当前温度(quiet_therm) 34.2°C

2. 核心性能指标

指标 当前值 状态
CPU 占用 49%(40% user + 9.5% kernel) 高负载
总线程数 75 偏多
Native Heap 1.72 GB 偏高
总 PSS 2.08 GB 偏高
帧率抖动 0.89%(legacy)/ 0.03%(janky) 优秀
渲染延迟 99th: 8ms / GPU 99th: 3ms 流畅
总渲染帧数 42,305

3. 线程分析

关键线程列表(共 75 线程):

线程名 TID 状态 说明
com.mamba.picme (主线程) 30590 Running 主线程活跃
PicMe-CameraAna 2227 Running 相机分析线程忙碌
Jit thread pool 420 Running JIT 编译活跃
Profile Saver 444 Running ART Profile
RenderThread 457, 471 Running 双渲染线程
PicMe-CameraCap 564 Sleeping 相机采集
PicMe-AgentStat 567 Sleeping Agent 状态
CameraPreviewRe 623 Sleeping 预览渲染
AudioRecord 1476 Sleeping ASR 音频录制
pool-3/5/6-thread-1 475, 481, 484 Sleeping 线程池(各1线程)
DefaultDispatch × 10+ Sleeping Kotlin Coroutines

发现


4. 内存分析

区域 大小 占比
Native Heap 1.72 GB 82.5%
Java Heap 88 MB 4.2%
EGL mtrack 75.6 MB 3.6%
Unknown 46.9 MB 2.2%
Graphics 95.4 MB 4.6%

Native Heap 1.72GB 是主要内存消耗,推测来自: - NCNN 模型加载(人脸检测模型) - CameraX ImageReader 缓冲池(1280×720 × 多帧) - GPU 纹理/Framebuffer(美颜渲染管线)


5. 温度监控

传感器 温度
电池 36.1°C
quiet_therm 34.2°C
CPU 簇0 66.4°C ~ 69.5°C
CPU 簇1 60.2°C ~ 67.2°C
GPU 59.4°C ~ 63.3°C

温度正常,未触发降频。


6. 瓶颈定位

6.1 CPU 占用 49% — 主要瓶颈

6.2 Native Heap 1.72GB — 内存瓶颈

6.3 线程数 75 — 潜在调度开销


7. 与之前 MediaPipe 设备的对比

指标 之前设备(MediaPipe) 当前设备(NCNN) 变化
CPU 占用 235% 49% 大幅下降
温度 37.7°C → 持续上升 36.1°C 更凉爽
帧率抖动 22% 0.89% 极大改善
线程爆炸 10+ MediaPipe 线程 75 线程(可控) 改善
Native Heap ~1.7GB 1.72GB 持平
渲染延迟 99th 较高 8ms 流畅

结论:换用 NCNN + 高性能手机后,CPU 占用和帧率稳定性大幅改善,但 Native Heap 1.72GB 仍是主要瓶颈


8. 优化建议

8.1 Native Heap 优化(优先级 P0)

8.2 线程池优化(优先级 P1)

8.3 ASR 音频缓冲(优先级 P2)


9. 附录

9.1 Perfetto Trace

9.2 采集命令参考

# 设备状态检查
adb devices
adb shell dumpsys battery | grep temperature
adb shell ps | grep com.mamba.picme

# 实时性能数据
adb shell dumpsys cpuinfo | grep com.mamba.picme
adb shell dumpsys meminfo com.mamba.picme
adb shell dumpsys gfxinfo com.mamba.picme

# 温度读取
adb shell cat /sys/class/thermal/thermal_zone*/temp

# Perfetto 采集
adb shell "perfetto --txt -c /data/misc/perfetto-configs/perfetto_config.pbtxt \
  -o /data/misc/perfetto-traces/picme_trace_new.perfetto-trace --background"

3. 性能对比诊断报告:开启本地 LLM 前后(ASR + NCNN人脸检测 + 美颜)

采集时间:2026-06-06 设备:51912a5c(高性能手机) 场景A(基准):ASR + NCNN 人脸检测 + 美颜 场景B(对比):ASR + NCNN 人脸检测 + 美颜 + 本地 LLM


1. 核心指标对比

指标 场景A(无LLM) 场景B(+LLM) 变化 影响
Native Heap 1.72 GB 3.61 GB +110% 严重
总 PSS 2.08 GB 6.24 GB +200% 严重
总 RSS 2.20 GB 4.05 GB +84% 严重
Swap PSS 54 MB 2.33 GB +4213% 严重
帧率抖动(legacy) 0.89% 18.42% +1970% 严重
帧率抖动(janky) 0.03% 0.05% +67% 轻微
渲染延迟 99th 8ms 22ms +175% 明显
GPU 延迟 99th 3ms 7ms +133% 明显
温度(电池) 36.1°C 41.1°C +5°C 明显
温度(quiet_therm) 34.2°C 37.9°C +3.7°C 明显
线程数 75 78 +3 轻微
总渲染帧数 42,305 14,727 -65% 运行时间差异

2. 内存详细对比

内存区域 场景A(无LLM) 场景B(+LLM) 变化
Native Heap 1.72 GB 3.61 GB +2.89 GB
Java Heap 88 MB 79 MB -9 MB
EGL mtrack 75.6 MB 85.0 MB +9.4 MB
Graphics 95.4 MB 104.9 MB +9.5 MB
Unknown 46.9 MB 41.5 MB -5.4 MB
Code (.so/.jar/.apk) 37.6 MB 10.5 MB -27.1 MB

关键发现


3. 渲染性能对比

渲染指标 场景A(无LLM) 场景B(+LLM) 变化
50th percentile 5ms 6ms +1ms
90th percentile 5ms 10ms +5ms
95th percentile 5ms 13ms +8ms
99th percentile 8ms 22ms +14ms
GPU 50th 1ms 1ms 持平
GPU 90th 2ms 3ms +1ms
GPU 95th 3ms 4ms +1ms
GPU 99th 3ms 7ms +4ms
Janky frames (legacy) 0.89% 18.42% +17.53%
Missed Vsync 7 7 持平

关键发现


4. 温度对比

传感器 场景A(无LLM) 场景B(+LLM) 变化
电池 36.1°C 41.1°C +5°C
quiet_therm 34.2°C 37.9°C +3.7°C
CPU 簇0 平均 ~68°C ~81°C +13°C
CPU 簇1 平均 ~64°C ~80°C +16°C
GPU 平均 ~61°C ~81°C +20°C

关键发现


5. 线程分析对比

线程特征 场景A(无LLM) 场景B(+LLM)
总线程数 75 78
PicMe-CameraAna Running Sleeping
PicMe-CameraCap Sleeping Sleeping
PicMe-AgentStat Sleeping Sleeping
CameraPreviewRe Sleeping Sleeping
AudioRecord Sleeping Sleeping
RenderThread 2 × Running 2 × Sleeping
DefaultDispatch 10+ 10+
GPU completion

关键发现


6. 瓶颈分析

6.1 内存瓶颈(P0)

6.2 渲染瓶颈(P1)

6.3 温度瓶颈(P2)


7. 根因推断

本地 LLM(MNN-LLM/Qwen)加载后:

  1. 模型权重占用大量 Native Heap(~2-3 GB)
  2. 推理过程中激活值/ KV Cache 持续占用内存
  3. GPU/NPU 高负载导致温度上升
  4. 内存压力触发系统换页,Swap PSS 暴涨
  5. 换页和内存竞争导致渲染线程延迟增加

8. 优化建议

8.1 内存优化(P0)

8.2 渲染优化(P1)

8.3 温控优化(P2)

8.4 架构优化(P3)


9. 稳定性事故:应用被系统 OOM Kill

9.1 事故现象

采集结束后发现:

现象 说明
PID 从 32397 消失 应用进程已终止
重启后内存 2.07GB 回到无 LLM 时的基线水平
无显式崩溃日志 系统 LMK(Low Memory Killer)行为

9.2 事故分析

9.3 业务影响

场景 结果
仅相机预览(无LLM) 正常运行
相机预览 + 本地LLM OOM 被杀
聊天页(无相机)+ 本地LLM 可能存活(需验证)

核心矛盾:相机预览(2GB)+ 本地 LLM(3GB)= 5GB+ 内存需求,超过了 Android 单应用的安全内存上限(通常 3-4GB)。


10. 结论

场景 可用性评估
无 LLM 流畅运行,无性能问题
+ 本地 LLM OOM 被杀,无法稳定运行

开启本地 LLM 后,应用从「流畅」变为「被杀+卡顿+高发热+高内存压力」状态。

核心矛盾:LLM 模型内存占用(3GB)与相机美颜管线内存占用(2GB)叠加,总内存需求超过设备安全上限。

本地 LLM 当前无法在相机预览场景稳定运行,必须实施量化或动态加载后才能上线。


11. 附录

11.1 Trace 文件

11.2 采集命令参考

# 性能数据快照
adb shell dumpsys cpuinfo | grep com.mamba.picme
adb shell dumpsys meminfo com.mamba.picme
adb shell dumpsys gfxinfo com.mamba.picme
adb shell dumpsys battery | grep temperature
adb shell cat /sys/class/thermal/thermal_zone*/temp

# 线程列表
adb shell ps -T -p <PID>

# Perfetto 采集
adb shell "perfetto --txt -c /data/misc/perfetto-configs/perfetto_config.pbtxt \
  -o /data/misc/perfetto-traces/trace.perfetto-trace --background"