[小技巧]Ubuntu右键快速在浏览器中打开perfetto文件

[小技巧] 右键快速在浏览器中打开 Perfetto 文件

在使用 Android 性能分析工具 Perfetto 时,录制的跟踪文件通常以 .perfetto-trace 为后缀。虽然可以通过命令行快速打开这些文件,但在日常使用中,手动打开浏览器并选择文件可能会显得繁琐。本文将介绍如何通过右键菜单快速在浏览器中打开 Perfetto 文件。

1. 使用 record_android_trace 录制跟踪

首先,你可以使用 record_android_trace 脚本录制跟踪文件。例如:

bash 复制代码
record_android_trace -c ~/traces/launcher.pbtx -o notouch.perfetto-trace

这条命令会生成一个名为 notouch.perfetto-trace 的跟踪文件,并在浏览器中快速打开。

1.1 record_android_trace 脚本原理

record_android_trace 脚本的主要功能是通过 Perfetto 工具录制 Android 设备上的性能跟踪数据。以下是其工作原理的简要解读:

  • 默认网页地址 :脚本默认指定 https://ui.perfetto.dev 作为打开跟踪文件的网页地址。
  • 构建 Perfetto 命令 :脚本构建一个 perfetto 命令,并在设备上执行该命令以开始录制跟踪数据。
  • 处理配置文件:脚本支持通过配置文件来定义跟踪参数,用户可以指定要记录的事件和持续时间。
  • 在浏览器中打开:录制完成后,脚本会将跟踪文件从设备中拉取到本地,并在浏览器中打开该文件,方便用户查看。

以下是 record_android_trace 脚本的相关代码片段:

python 复制代码
def main():
    ...
    # 默认指定https://ui.perfetto.dev网页地址来打开trace文件
    parser.add_argument('--origin', default='https://ui.perfetto.dev', help=help)
    ...
    # perfetto命令
    perfetto_cmd = 'perfetto'
    
    ...
    # trace文件在设备上的路径和名称格式
    device_dir = '/data/misc/perfetto-traces/'
    tstamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M')
    fname = '%s-%s.pftrace' % (tstamp, os.urandom(3).hex())
    device_file = device_dir + fname

    # 构建perfetto命令
    cmd = [perfetto_cmd, '--background']
    ...
    # 打开配置文件~/traces/launcher.pbtx
    with open(on_host_config or os.devnull, 'rb') as f:
        print('Running ' + ' '.join(cmd))
        # 传入文件内容~/traces/launcher.pbtx,并执行perfetto构建好的命令
        proc = adb('shell', *cmd, stdin=f, stdout=subprocess.PIPE)
        proc_out = proc.communicate()[0].decode().strip()

    ...

    # 从设备中拉出文件到电脑端的notouch.perfetto-trace文件
    adb('pull', device_file, host_file).wait()

    if not args.no_open:
        # 在浏览器中打开https://ui.perfetto.dev网页,并传入notouch文件路径
        open_trace_in_browser(host_file, open_browser, args.origin)

2. 直接打开跟踪文件的需求

在下一次查看跟踪文件时,你可能需要手动打开 Perfetto UI,然后点击"Open trace files"从文件夹中选择文件。为了简化这个过程,我们可以参考 record_android_trace 脚本的实现,自动在浏览器中打开跟踪文件。

3. 创建处理脚本

我们将创建一个名为 perfetto_tool.py 的 Python 脚本,用于处理 .perfetto-trace 文件并在浏览器中打开。

3.1 脚本内容

python 复制代码
#!/usr/bin/env python3

import socketserver
import sys
import os
import webbrowser
import http.server

def open_prefetto_file(file_path):
    open_trace_in_browser(file_path)

def main():
    if len(sys.argv) < 2:
        print("Usage: python3 prefetto_tool.py <file_path>")
        return

    file_path = sys.argv[1]
    if not os.path.isfile(file_path):
        print("File not found:", file_path)
        return

    open_prefetto_file(file_path)

def open_trace_in_browser(path):
    PORT = 9001
    os.chdir(os.path.dirname(path))
    fname = os.path.basename(path)
    socketserver.TCPServer.allow_reuse_address = True
    with socketserver.TCPServer(('127.0.0.1', PORT), HttpHandler) as httpd:
        webbrowser.open_new_tab(
            'https://ui.perfetto.dev/#!/?url=http://127.0.0.1:%d/%s' %
            (PORT, fname))
        while httpd.__dict__.get('last_request') != '/' + fname:
            httpd.handle_request()

class HttpHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header('Access-Control-Allow-Origin', '*')
        return super().end_headers()

    def do_GET(self):
        self.server.last_request = self.path
        return super().do_GET()

    def do_POST(self):
        self.send_error(404, "File not found")

if __name__ == "__main__":
    main()

3.2 赋予执行权限

在终端中,导航到脚本所在的目录,并赋予其执行权限:

bash 复制代码
chmod +x perfetto_tool.py

4. 创建 .desktop 文件

为了将脚本添加到右键菜单中,我们需要创建一个 .desktop 文件。

4.1 创建 perfetto_tool.desktop

/usr/share/applications/ 目录下创建一个名为 perfetto_tool.desktop 的文件,内容如下:

ini 复制代码
[Desktop Entry]
Version=1.0
Type=Application
Name=Perfetto Tool
Comment=Tool for opening .perfetto-trace files
Exec=/home/tools/perfetto/perfetto_tool.py %f
Icon=/home/tools/perfetto/icon.jpg
Terminal=false
MimeType=application/x-prefetto;
Categories=Utility;

请根据实际路径修改 ExecIcon 的值。

5. 注册 MIME 类型

为了让系统识别 .perfetto-trace 文件,我们需要创建一个 MIME 类型文件。

5.1 创建 prefetto-trace.xml

/usr/share/mime/packages/ 目录下创建一个名为 prefetto-trace.xml 的文件,内容如下:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
    <mime-type type="application/x-prefetto">
        <comment>Prefetto File</comment>
        <glob pattern="*.perfetto-trace"/>
    </mime-type>
</mime-info>

5.2 更新 MIME 数据库

运行以下命令以更新 MIME 数据库:

bash 复制代码
update-mime-database /usr/share/mime

6. 测试右键菜单

现在,右键单击任何 .perfetto-trace 文件,应该会看到 "Perfetto Tool" 选项。选择它将会运行你的 Python 脚本,并在浏览器中打开该文件。

结论

通过以上步骤,你可以在 Ubuntu 中通过右键菜单快速打开 Perfetto 跟踪文件,简化了查看跟踪数据的过程。希望这个小技巧能帮助到你!

相关推荐
androidwork7 小时前
Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
android·java·kotlin·androidx
每次的天空7 小时前
Android第十三次面试总结基础
android·面试·职场和发展
wu_android7 小时前
Android 相对布局管理器(RelativeLayout)
android
李斯维9 小时前
循序渐进 Android Binder(二):传递自定义对象和 AIDL 回调
android·java·android studio
androidwork9 小时前
OkHttp 3.0源码解析:从设计理念到核心实现
android·java·okhttp·kotlin
像风一样自由10 小时前
【001】frida API分类 总览
android·frida
casual_clover10 小时前
Android 之 kotlin 语言学习笔记四(Android KTX)
android·学习·kotlin
移动开发者1号11 小时前
Android 大文件分块上传实战:突破表单数据限制的完整方案
android·java·kotlin
移动开发者1号11 小时前
单线程模型中消息机制解析
android·kotlin
每次的天空14 小时前
Android第十五次面试总结(第三方组件和adb命令)
android