# 工具链配置（Perfetto+Systrace）

## 工具概述

本项目使用Perfetto和Systrace作为主要的性能分析工具，用于分析系统性能、定位性能瓶颈。

## Perfetto配置

### 安装配置

#### 1. 环境准备
```bash
# 检查Python版本
python --version  # 需要Python 3.6+

# 安装依赖
pip install protobuf
```

#### 2. Perfetto工具获取
- **Android Studio**: 内置Perfetto支持
- **命令行工具**: 从AOSP获取
- **Web UI**: https://ui.perfetto.dev/

### 配置文件

#### 基础配置
```protobuf
buffers: {
    size_kb: 63488
    fill_policy: DISCARD
}

data_sources: {
    config {
        name: "android.surfaceflinger.frame"
    }
}

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
            ftrace_events: "sched/sched_waking"
            ftrace_events: "power/suspend_resume"
            ftrace_events: "power/cpu_frequency"
            ftrace_events: "power/cpu_idle"
            ftrace_events: "gfx/mali_gpu_total"
            buffer_size_kb: 2048
            drain_period_ms: 250
        }
    }
}

duration_ms: 10000
```

#### 启动分析配置
```protobuf
buffers: {
    size_kb: 63488
}

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
            ftrace_events: "sched/sched_waking"
            ftrace_events: "android/android_fs_datawrite_start"
            ftrace_events: "android/android_fs_dataread_start"
            atrace_categories: "am"
            atrace_categories: "wm"
            atrace_categories: "gfx"
            atrace_categories: "view"
            buffer_size_kb: 4096
        }
    }
}

duration_ms: 5000
```

### 使用方法

#### 1. 录制Trace
```bash
# 使用配置文件录制
adb shell perfetto -c /data/local/tmp/config.pb -o /data/local/tmp/trace.pb

# 或使用简写
adb shell perfetto -c - --out /data/misc/perfetto-traces/trace
```

#### 2. 拉取Trace文件
```bash
adb pull /data/local/tmp/trace.pb trace.pb
```

#### 3. 分析Trace
- 在 https://ui.perfetto.dev/ 打开trace文件
- 或使用Android Studio打开

## Systrace配置

### 安装配置

#### 1. 环境准备
```bash
# Systrace位于Android SDK
# 路径: $ANDROID_SDK/platform-tools/systrace/
```

#### 2. Python环境
```bash
# 需要Python 2.7或Python 3.6+
python --version
```

### 使用方法

#### 1. 基础用法
```bash
python systrace.py -t 10 -o trace.html sched gfx view
```

#### 2. 启动分析
```bash
python systrace.py -t 5 -a com.example.app \
    -o startup.html \
    sched freq idle am wm gfx view binder_driver hal dalvik camera input res
```

#### 3. 流畅度分析
```bash
python systrace.py -t 10 \
    -o jank.html \
    gfx view sched freq idle
```

#### 4. 内存分析
```bash
python systrace.py -t 10 \
    -o memory.html \
    sched freq idle mem
```

### 常用参数
- `-t`: 追踪时间（秒）
- `-o`: 输出文件
- `-a`: 指定应用包名
- `-b`: 缓冲区大小（KB）

## 工具使用规范

### 1. 性能分析流程
1. **确定分析目标**: 明确要分析的性能问题
2. **选择工具**: 根据问题选择Perfetto或Systrace
3. **录制Trace**: 执行操作并录制Trace
4. **分析Trace**: 分析Trace文件，定位问题
5. **优化验证**: 优化后再次录制验证

### 2. Trace文件管理
- **命名规范**: `[类型]_[时间]_[描述].pb/html`
- **存储位置**: `traces/` 目录
- **版本控制**: 重要Trace文件纳入版本控制

### 3. 分析报告
- 每次分析后记录分析结果
- 记录发现的问题和优化建议
- 跟踪优化效果

## 自动化脚本

### 启动性能分析脚本
```bash
#!/bin/bash
# analyze_startup.sh

APP_PACKAGE=$1
OUTPUT_DIR="traces/startup_$(date +%Y%m%d_%H%M%S)"

mkdir -p $OUTPUT_DIR

# 录制启动Trace
python systrace.py -t 5 -a $APP_PACKAGE \
    -o $OUTPUT_DIR/startup.html \
    sched freq idle am wm gfx view

echo "Trace saved to $OUTPUT_DIR/startup.html"
```

### 流畅度分析脚本
```bash
#!/bin/bash
# analyze_jank.sh

OUTPUT_DIR="traces/jank_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR

# 录制流畅度Trace
python systrace.py -t 10 \
    -o $OUTPUT_DIR/jank.html \
    gfx view sched freq idle

echo "Trace saved to $OUTPUT_DIR/jank.html"
```

## 相关链接

- [[目标与指标]]
- [[问题追踪列表]]
- [[09-调试与工具链/Systrace_Perfetto全解读]]