VSCode + clangd卡顿背景
前面分享了如何使用VSCode + clangd搭建aosp源码环境的文章
VSCode + clangd 配置保姆级教程(方案2)

其实使用起来确实比以前用微软插件好很多,比如跳转基本上%99可以成功,比以前微软插件%70的成功准确率好很多,但是也有新的痛点问题:
那就是后台经常运行过程中卡顿厉害,硬盘空占用也比较多等问题。
如何确定机器卡顿是VSCode + clangd引起呢?
如果打开VSCode机器卡顿厉害,很多界面操作不了像编译aosp源码一样卡的场景,大家可以使用top命令进行查看:

如何发现是clangd.main这个进程长期占用cpu过多,那就可以电脑卡顿就是因为VSCode + clangd引发的。
那么下面本文就来介绍几个减少卡顿的技巧。
减少clangd后台cpu占用方法
修改点1:
这里的修改原理就是减少后台的index线程。
.vscode/settings.json 文件中进行index线程等线程,设置index线程优先级为low
// clangd 启动参数
"clangd.arguments": [
//省略其他的。。。。
//加入如下日志减少相关的后台cpu耗费
// 日志级别(调试时可改为 verbose)
"--log=error",
"-j=2", //最重要变成双线程或者单线程
"--background-index-priority=low"
// 使用所有可用 CPU 核心索引(根据机器性能调整)
],
// clangd 索引线程数(根据 CPU 核心数调整),变成双线程或者单线程
"clangd.indexingThreads": 2,
完整的.vscode/settings.json文件请看
修改点2:
这里的修改目标是减少aosp相关没用依赖模块,这样减轻VSCode的index负担。
在源码根目录创建移除.cland文件夹,彻底删除。
然后创建一个.cland的文本文件,文本文件内容如下:
# AOSP 专用 .clangd 配置
CompileFlags:
Add:
# 忽略 AOSP 中常见的无害警告,保持问题面板清爽
- -Wno-unknown-warning-option
- -Wno-unused-parameter
- -Wno-deprecated-declarations
- -Wno-sign-compare
- -Wno-macro-redefined
- -Wno-format
Remove:
# 移除 clangd 不识别的 AOSP 特有/交叉编译专用的 flag,防止报错
- -mno-global-merge
- -fno-experimental-new-pass-manager
- -fno-addrsig
- -Wa,*
Index:
# 允许后台索引,但范围会被下方的 PathExclude 严格限制
Background: Build
Diagnostics:
# 屏蔽部分静态分析警告(AOSP 历史代码中非常多,没必要全改)
Suppress:
- "*use-after-move*"
- "*unused-includes*"
If:
PathExclude:
# ==========================================
# 第一梯队:绝对不需要索引的“巨无霸”目录 (必须排除)
# 占用了 80% 以上的磁盘空间和 CPU 解析时间
# ==========================================
- out/.* # 编译输出产物
- prebuilts/.* # 预编译的庞大工具链
- external/.* # 第三方开源库 (极其庞大)
- cts/.* # 兼容性测试套件
- test/.* # 测试代码
# ==========================================
# 第二梯队:上层与虚拟机相关 (按需排除)
# ==========================================
- packages/.* # 上层应用 (主要为 Java/Kotlin,C++ 较少)
- art/.* # ART 虚拟机
- libcore/.* # Java 核心库
- bionic/.* # C 库底层实现
# ==========================================
# 第三梯队:平台构建与工具链 (建议排除)
# ==========================================
- toolchain/.*
- tools/.*
- development/.*
- pdk/.*
- bootable/.*
- build/.*
# ==========================================
# 第四梯队:硬件与设备层 (根据当前开发任务调整)
# ==========================================
# 你在深入研究 SurfaceFlinger、Zygote 优化等框架层逻辑时,主要依赖 frameworks/ 和 system/。
# 如果当前不涉及具体的硬件配置,可以将下面三个目录前面的注释(#)删掉,进一步提速。
# 等你需要调试高通 Perf HAL 或特定设备(如 grus)的底层参数时,再把对应的目录注释回来。
# - device/.*
# - hardware/.*
# - vendor/.*
大家如果有更好的的减少VSCode + clangd搭建aosp源码环境带来的卡顿,过渡耗费cpu的方案记得请留言哈。
原文参考:
https://mp.weixin.qq.com/s/m3hoygKlMyJA3GeUJF7_wA
更多fw,性能实战开发干货,请关注下面“千里马学框架”

132

被折叠的 条评论
为什么被折叠?



