本文作者:sonicman,首发于公众号:AndroidPerformance
联系方式:voidice#gmail.com
转载请先向作者申请
前言
Perfetto 是 google 开源的新一代性能检测和追踪分析套件,网上已经有很多介绍文章了,官网文档也有非常详尽的描述,这里就不再翻译网站上的文字了。写这篇文档是为了回应网上的一个高价的收费教程,回馈一下国内的社区。没人按字数付版费,只能本着能省就省的原则,少打几个字了
很多朋友已经在日常的工作和学习中已经开始使用 Perfetto,它在查看大文件时速度较快,UI 也比较摩登一些,但是往往会遇到下面的两个主要问题:
网速太慢,上传至官方网站需要耗时很久
公司网络有安全管控,容易发生信息泄露,引起不必要的麻烦
能不能自己也部署一套类似的系统呢?这样自己就可以随心所欲的定制了,答案肯定是可以, 而且很简单
![](https://i-blog.csdnimg.cn/blog_migrate/1289bc385c24047c6998db467a18a6c7.png)
1 Perfetto 简介
官方网站:https://www.perfetto.dev
详细文档:https://perfetto.dev/docs
不能免俗,贴上一个原理图,让整个文档更美观:
![](https://i-blog.csdnimg.cn/blog_migrate/1b7c854cdaee178c0db6c514af03e10e.png)
2 准备工作
Ubuntu (18.x、20.x 均可,本人亲测都可以顺利运行), 其它 linux 发行版本也是可以的,但没有一一尝试
git
可以顺利访问 google/chrome/github 等技术网站的 proxy
3 下载 Perfetto 源代码
使用 git 将源代码 clone 至本地:
sonicman@Ubuntwo:~/p$ git clone git@github.com:google/perfetto.git
正克隆到 'perfetto'...
remote: Enumerating objects: 381, done.
remote: Counting objects: 100% (381/381), done.
remote: Compressing objects: 100% (245/245), done.
remote: Total 77957 (delta 218), reused 235 (delta 136), pack-reused 77576
接收对象中: 100% (77957/77957), 36.38 MiB | 55.00 KiB/s, 完成.
处理 delta 中: 100% (40784/40784), 完成.
4 下载并安装网站依赖模块及工具
主要是 NodeJs 及 node_modules
// 切换到上面clone的目录
sonic@sonicman:~/ServerData/perfetto$
// 执行安装命令
$tools/install-build-deps --ui
通常,你会在这里遇到各种下载错误,导致无法安装成功,这个时候就需要设置代理了
为 git command 设置代理
# git config --global http.proxy 'x.x.x.x:port' // 记得改成你自己的代理服务器ip和端口
# git config --global https.proxy 'x.x.x.x:port'
为 curl 设置代理:
export http_proxy=http://x.x.x.x:port
export https_proxy=http://x.x.x.x:port
不要气馁,重新执行一下前面的安装命令,经过漫长的等待和多次重试,你一定会成功的
5. 编译 UI 套件
设置编译参数,其实只有一个 is_debug=true|false,作为一个普通的用户,我们就可以忽略这个开发调试开关
./tools/gn args out/default
生成 Perfetto 网站相关的内容
./tools/ninja -C out/default ui
没有报错的,到这里就顺利完成了,更多详细的编译指导,请移步
build-instructions[1]
6 启动服务器
使用以下命令启动服务
ui/run-dev-server out/default
使用浏览器打开:http://localhost:10000
激动人心的时刻到来了,恭喜你,部署成功,赶紧喝杯咖啡庆祝一下吧
![](https://i-blog.csdnimg.cn/blog_migrate/1f76629c0a5818af1e8c7c1a7ad60dd3.png)
7 修改服务器默认的端口(如有需求)
vim perfetto/tools/dev_server
// 找到port number,默认是3000, 修改成你想要的空白端口
def main(argv):
parser = argparse.ArgumentParser(description='HTTP server for UI development')
parser.add_argument(
'-p',
'--port',
help='port number (default: 3000)',
type=int,
default=3000)
修改服务器 IP 也类似,请自行查找
8. 常见的错误及处理
8.1 libtinfo.so.5 cannot open
/perfetto/buildtools/emsdk/llvm/clang++: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting
ninja: build stopped: subcommand failed.
// 解决方案:install libncurses5
$sudo apt install libncurses5
好了,本次就先写到这里了,希望大家多多交流,做出更顶尖的性能分析工具套件
参考资料
[1]
build-instructions: https://perfetto.dev/docs/contributing/build-instructions