contentTracing
Chromium에서 추적 데이터를 수집해 성능 병목 현상과 느린 작업을 찾는다.
프로세스: 메인
이 모듈은 웹 인터페이스를 포함하지 않는다. 기록된 추적 데이터를 보려면 크롬의 chrome://tracing
에서 사용할 수 있는 trace viewer를 이용한다.
참고: 앱 모듈의 ready
이벤트가 발생하기 전에는 이 모듈을 사용하지 않는다.
const { app, contentTracing } = require('electron')
app.whenReady().then(() => {
(async () => {
await contentTracing.startRecording({
included_categories: ['*']
})
console.log('Tracing started')
await new Promise(resolve => setTimeout(resolve, 5000))
const path = await contentTracing.stopRecording()
console.log('Tracing data recorded to ' + path)
})()
})
메서드
contentTracing
모듈은 다음과 같은 메서드를 제공한다:
contentTracing.getCategories()
Promise<string[]>
를 반환한다. 모든 자식 프로세스가 getCategories
요청을 확인하면, 카테고리 그룹 배열과 함께 resolve된다.
카테고리 그룹 집합을 가져온다. 새로운 코드 경로에 도달하면 카테고리 그룹이 변경될 수 있다. 자세한 내용은 기본 제공 트레이싱 카테고리 목록을 참고한다.
참고: Electron은 기본값이 아닌
"electron"
이라는 트레이싱 카테고리를 추가한다. 이 카테고리는 Electron 전용 트레이싱 이벤트를 캡처하는 데 사용할 수 있다.
contentTracing.startRecording(options)
Promise<void>
를 반환한다. 모든 자식 프로세스가 startRecording
요청을 확인하면 이 Promise는 이행된다.
모든 프로세스에서 기록을 시작한다.
기록은 로컬에서 즉시 시작되며, 자식 프로세스는 EnableRecording
요청을 받는 즉시 비동기적으로 기록을 시작한다.
이미 기록이 진행 중인 경우, 한 번에 하나의 추적 작업만 진행할 수 있으므로 Promise는 즉시 이행된다.
contentTracing.stopRecording([resultFilePath])
resultFilePath
string (선택 사항)
Promise<string>
을 반환한다. 모든 자식 프로세스가 stopRecording
요청을 확인하면 추적 데이터가 포함된 파일의 경로로 resolve된다.
모든 프로세스에서 기록을 중지한다.
자식 프로세스는 일반적으로 추적 데이터를 캐시하며, 드물게만 데이터를 플러시하고 메인 프로세스로 보낸다. 이는 IPC를 통해 추적 데이터를 전송하는 작업이 비용이 많이 들 수 있기 때문에, 추적의 런타임 오버헤드를 최소화하는 데 도움이 된다. 따라서 추적을 종료하기 위해 Chromium은 모든 자식 프로세스에게 보류 중인 추적 데이터를 플러시하도록 비동기적으로 요청한다.
추적 데이터는 resultFilePath
에 기록된다. resultFilePath
가 비어 있거나 제공되지 않으면, 추적 데이터는 임시 파일에 기록되고, 해당 경로가 Promise로 반환된다.
contentTracing.getTraceBufferUsage()
Promise<Object>
를 반환한다. 이 객체는 트레이스 버퍼의 최대 사용량에 대한 value
와 percentage
를 포함한다.
value
numberpercentage
number
전체 상태 대비 트레이스 버퍼의 최대 사용량을 백분율로 가져온다.