electron 支持Chromium的'memlog'命令行开关

q0qdq0h2  于 4个月前  发布在  Electron
关注(0)|答案(6)|浏览(47)

预检清单

  • 我已阅读了此项目的Contributing Guidelines文档。
  • 我同意遵循此项目遵循的Code of Conduct规则。
  • 我在问题跟踪器中搜索了一个与我想报告的问题匹配的问题,但没有成功。

(注意:我看到有一个关于memlog的问题已经关闭,尽管如此,我还是提交了一个bug报告,因为通过electron附加memlog开关的行为似乎与Chrome的行为不符)

问题详情

  • Electron版本:
  • v9.0.5
  • 操作系统:
  • Arch Linux(滚动发布)

预期行为

当使用Chrome作为详细说明的以下代码附加memlog标志时:

chromium --memlog=all

并使用MemoryInfra选择捕获跟踪信息,可以获得额外的堆信息。

实际行为

当从electron应用程序附加Chrome memlog标志时,不会获得额外的堆信息。

重现方法

使用以下最小代码示例:

const {app, BrowserWindow, contentTracing} = require('electron')
const path = require('path')

app.commandLine.appendSwitch("memlog","all")
app.commandLine.appendSwitch("memlog-keep-small-allocations")
app.commandLine.appendSwitch("memlog-sampling-rate",100000)
app.commandLine.appendSwitch('memlog-stack-mode', 'native');

function createWindow () {
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })
  mainWindow.loadFile('index.html')
}

app.on('ready', async () => {
    await contentTracing.startRecording({
      trace_buffer_size_in_kb: 1024*300,
      included_categories: ['disabled-by-default-memory-infra'],
      excluded_categories: ['*'],
      "memory_dump_config": {
      "triggers": [
        { "mode": "light", "periodic_interval_ms": 50 },
        { "mode": "detailed", "periodic_interval_ms": 1000 }
      ]
     }
    })
    console.log('Tracing started')
    await new Promise(resolve => setTimeout(resolve, 60000))
    const path = await contentTracing.stopRecording()
    console.log('Tracing data recorded to ' + path)
})

app.whenReady().then(async () => {
  createWindow()
  
  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

此代码尝试设置Chrome memlog开关并记录跟踪信息,然后我使用chrome://tracing工具加载它。

截图

以下截图显示了使用--memlog=all的效果,当仅从Chromium(而非electron)进行跟踪时,您可以看到“堆详情”部分:

以下截图显示了我使用上述代码从electron获取的跟踪信息,如您所见,没有堆详情部分:

ki0zmccv

ki0zmccv1#

我认为这对于内存分析很重要,因为我的应用程序使用了很多malloc/unspecified...

9njqaruj

9njqaruj2#

面包屑:问题描述中提到的 closed question

rggaifut

rggaifut3#

当标志附加在命令行上而不是通过JS时,这个工作是否正确?

o4hqfura

o4hqfura4#

#27627处,nornagon处理了switch支持,该支持来自堆分析服务。

wsewodh2

wsewodh25#

@deepak1556 为什么PR没有被合并?需要帮助来支持这个吗?

nom7f22z

nom7f22z6#

我们已经在跟踪UI中看到了一些与此类别相关的崩溃,现在情况可能已经发生了变化。如果你对此感兴趣,可以随时查看。

相关问题