本文介绍:contentTracing类

从Chromium的内容模块收集跟踪数据,以发现性能瓶颈和缓慢的操作

进程: 主进程

这个模块不具备web接口,需要我们在chrome浏览器中添加 chrome://tracing/ 来加载生成结果文件.

注意该模块应当在 ready事件之后使用.

  1. const {contentTracing} = require('electron')
  2. const options = {
  3. categoryFilter: '*',
  4. traceOptions: 'record-until-full,enable-sampling'
  5. }
  6. contentTracing.startRecording(options, () => {
  7. console.log('Tracing started')
  8. setTimeout(() => {
  9. contentTracing.stopRecording('', (path) => {
  10. console.log('Tracing data recorded to ' + path)
  11. })
  12. }, 5000)
  13. })

方法

contentTracing.getCategories(callback)

用途:获取一组类别组,而且类别组可以随着到达新的代码路径而改变

  • callback Function
    • categories String[]

一旦所有的子进程都接受到了 getCategories方法请求, 则调用 callback返回类别组.

contentTracing.startRecording(options, callback)

用途:在所有进程上开始记录

  • options Object
    • categoryFilter String
    • traceOptions String
  • callback Function

一旦子进程接收到 EnableRecording请求,将立即以异步开始记录。

一旦所有子进程都确认了 startRecording请求, callback将被调用。

categoryFilter是一个过滤器,用于控制应跟踪哪些类别组。

过滤器可以具有可选的 -前缀,以排除包含匹配类别的类别组。不支持在同一列表中包括和排除类别模式。

比如:

  • test_MyTest*,
  • test_MyTest*,test_OtherStuff,
  • "-excluded_category1,-excluded_category2

traceOptions 控制着哪种跟踪应该被启动,这是一个用逗号分隔的列表.可用参数如下:

  • record-until-full
  • record-continuously
  • trace-to-console
  • enable-sampling
  • enable-systrace

前3个参数是来跟踪记录模块,并且是互斥关系.

如果在 traceOptions 中超过一个跟踪记录模式,那最后一个的优先级最高.

如果没有指明跟踪记录模式,那么它默认为 record-until-full.

traceOptions 中的参数被解析应用之前,跟踪参数会被初始化为默认参数 ( record_mode 设置为 record-until-full, enable_samplingenable_systrace 设置为 false).

contentTracing.stopRecording(resultFilePath, callback)

用途:停止对所有子进程的记录

  • resultFilePath String
  • callback Function
    • resultFilePath String

子进程通常缓存跟踪数据,并且仅仅将数据截取和发送给主进程.

这有利于在通过 IPC 发送跟踪数据之前减小跟踪时的运行开销,这样做很有价值.

因此,发送跟踪数据,我们应当异步通知所有子进程来截取任何待跟踪的数据.

一旦所有子进程接收到了 stopRecording 请求,将调用 callback ,并且返回一个包含跟踪数据的文件.

如果 resultFilePath 不为空,那么将把跟踪数据写入其中,否则写入一个临时文件.实际文件路径如果不为空,则将调用 callback .

contentTracing.startMonitoring(options, callback)

用途:开始监视所有进程

  • options Object
    • categoryFilter String
    • traceOptions String
  • callback Function

一旦子进程接收到 startMonitoring请求,将立即以异步开始监听。

一旦所有子进程都确认了 startRecording请求, callback将被调用。

contentTracing.stopMonitoring(callback)

用途:停止对所有子进程的监听

  • callback Function

一旦所有子进程接收到了 stopMonitoring 请求, callback将被调用。

contentTracing.captureMonitoringSnapshot(resultFilePath, callback)

用途:获取当前监听的跟踪数据

  • resultFilePath String
  • callback Function
    • resultFilePath String

子进程通常缓存跟踪数据,并且仅仅将数据截取和发送给主进程.

因为如果直接通过 IPC 来发送跟踪数据的代价昂贵,我们应当避免不必要的跟踪运行开销.

因此,为了停止跟踪,我们可以通过异步通知所有子进程来刷新任何挂起的跟踪数据。

一旦所有子进程接收到了 captureMonitoringSnapshot 请求,将调用 callback ,并且返回一个包含跟踪数据的文件.

contentTracing.getTraceBufferUsage(callback)

用途:获取当前监听的跟踪数据

  • callback Function
    • value Number
    • percentage Number

获取跟踪缓冲区进程的最大使用量与完整状态的百分比。当TraceBufferUsage值被确定时,就调用 callback .