contentTracing
Recopile datos de rastreo del módulo de contenido de Chromium para encontrar cuellos de botella de rendimiento y operaciones lentas.
Proceso: principal
Este módulo no incluye una interfaz web. Para ver las huellas gravadas, use trace viewer, disponible en chrome://tracing en Chrome.
[!NOTE] No debes usar este módulo hasta que se emita el evento
readyde la aplicación. El módulo.
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)
})()
})
Métodos
El módulo contentTracing tiene los siguientes métodos:
contentTracing.getCategories()
History
Devuelve Promise<string[]> - resuelve con un array de grupos de categorías una vez que todos los procesos hijos han confirmado la solicitud getCategories
Obtener un conjunto de grupos de categorías. La categoría de grupos puede cambiar a medida que se alcanza nuevas rutas de código. Consulte además el listado de categorías de traza empotradas.
NOTA: Electron agrega una categoría de rastreo no predeterminada invocación
"electron". Esta categoría se puede utilizar para capturar eventos de seguimiento específicos de Electron.
contentTracing.startRecording(options)
History
| Version(s) | Changes |
|---|---|
None | El parámetro |
None | Esta función ahora devuelve una función de devolución de invocación |
Devuelve Promise<void> - resuelto una vez que todos los procesos hijos han confirmado la solicitud startRecording.
Iniciar la grabación en todos los procesos.
La grabación se inicia de manera inmediata de forma local y asincrónica en los procesos secundarios tan pronto como reciben la solicitud de habilitación de grabación.
Si una grabación ya está corriendo, la promesa será inmediatamente resulta, ya que sólo un operación de seguimiento puede estar en progrese a la vez.
contentTracing.stopRecording([resultFilePath])
History
| Version(s) | Changes |
|---|---|
None | Este método ahora devuelve una Promise en lugar de usar una función de devolución de invocación. |
None | The |
resultFilePathstring (opcional)
Devuelve Promise<string> - resuleve con una ruta al archivo que contiene los datos rastreados una vez que los procesos hijos han reconocido la solicitud stopRecording
Dejar de grabar en todos los procesos.
Los procesos secundarios normalmente almacenan en caché los datos de rastreo y solo raramente limpian y envían datos de rastreo al proceso principal. Esto ayuda a minimizar la sobrecarga de tiempo de ejecución del rastreo ya que el envío de datos de rastreo a través de IPC puede ser una operación costosa. Por lo tanto, para finalizar un seguimiento, Chromium solicita de forma asíncrona a todos los procesos hijos que eliminen cualquier seguimiento de datos pendiente.
Los datos de rastreo se escribirán dentro de resultFilePath. Si resultFilePath está vacío o no es proporcionado, los datos de rastreo serán escrito en un archivo temporal, y la ruta será retornada en el promise.
contentTracing.getTraceBufferUsage()
History
Devuelve Promise<Object> - Resuelve con un objeto conteniendo el value y percentage de máximo uso de trace buffer
valuenúmeropercentagenúmero
Obtener el uso máximo a través de procesos de trace buffer como un porcentaje del estado completo.
contentTracing.enableHeapProfiling([options]) Experimental
History
| Version(s) | Changes |
|---|---|
None | API ADDED |
Devuelve Promise<void> - Resuelve cuando la operación ha sido completada.
Habilita la cabecera perfilando para trazas de MemoryInfra. Equivalente al interruptor --memlog en Chrome.
Solo tendrá efecto si la categoría disabled-by-default-memory-infra está incluida.
Necesita ser llamado antes de contentTracing.startRecording().
Uso:
const { contentTracing } = require('electron')
async function recordTrace () {
await contentTracing.enableHeapProfiling()
await contentTracing.startRecording({
included_categories: ['disabled-by-default-memory-infra'],
excluded_categories: ['*'],
memory_dump_config: {
triggers: [
{ mode: 'detailed', periodic_interval_ms: 1000 }
]
}
})
await new Promise(resolve => setTimeout(resolve, 5000))
const filePath = await contentTracing.stopRecording()
}
Para ver los volcados de cabecera registrados:
-
Descargue los símbolos del breakpad para su versión de Electron desde el Electron GitHub libera
-
Clona el código fuente Electron
-
En tu pedido de Chromium para Electron, ejecuta este comando para simbolizar el volcado del montón:
python3 third_party/catapult/tracing/bin/symbolize_trace --use-breakpad-symbols --breakpad-symbols-directory /path/to/breakpad_symbols /path/to/trace.json -
Abre el rastro simbolizado en
chrome://tracing(la interfaz de usuario de Perfetto no soporta volcados de memoria aún) -
Pulse en uno de los símbolos
M -
Pulse en un icono
☰de la barra triple (por ejemplo, en la columnamalloc)
