Perfetto

Convierte el lenguaje natural en potentes análisis de trazas de Perfetto. Explica rápidamente el jank, diagnostica ANR, detecta hilos con alta carga de CPU, descubre contención de bloqueos y encuentra fugas de memoria.

Documentación

showcase

Perfetto MCP

Convierte el lenguaje natural en potentes análisis de trazas de Perfetto

Un servidor de Model Context Protocol (MCP) que transforma indicaciones en lenguaje natural en análisis de Perfetto enfocados. Explica rápidamente el jank, diagnostica ANRs, detecta hilos calientes de CPU, descubre contención de bloqueos y encuentra fugas de memoria, todo sin escribir SQL.

✨ Características

  • Lenguaje natural → SQL: Haz preguntas en lenguaje natural y obtén consultas Perfetto precisas
  • Detección de ANR: Identifica y analiza automáticamente eventos de Application Not Responding
  • Análisis de rendimiento: Perfilado de CPU, detección de jank de fotogramas, detección de fugas de memoria
  • Contención de hilos: Encuentra cuellos de botella de sincronización y contención de bloqueos
  • Perfilado de Binder: Analiza el rendimiento de IPC y las interacciones lentas del sistema

showcase

📋 Requisitos previos

  • Python 3.13+ (macOS/Homebrew):
    brew install python@3.13
    
  • uv (recomendado):
    brew install uv
    

🚀 Primeros pasos

Cursor

Install MCP Server

O añade a ~/.cursor/mcp.json (global) o .cursor/mcp.json (proyecto):

{
  "mcpServers": {
    "perfetto-mcp": {
      "command": "uvx",
      "args": ["perfetto-mcp"]
    }
  }
}
Claude Code

Ejecuta este comando. Consulta documentación de MCP de Claude Code para más información.

# Add to user scope
claude mcp add perfetto-mcp --scope user -- uvx perfetto-mcp

O edita ~/claude.json (macOS) o %APPDATA%\Claude\claude.json (Windows):

{
  "mcpServers": {
    "perfetto-mcp": {
      "command": "uvx",
      "args": ["perfetto-mcp"]
    }
  }
}
VS Code

Install in VS Code

o añade a .vscode/mcp.json (proyecto) o ejecuta el comando "MCP: Add Server":

{
  "mcpServers": {
    "perfetto-mcp": {
      "command": "uvx",
      "args": ["perfetto-mcp"]
    }
  }
}

Habilítalo en el modo Agente del chat de GitHub Copilot.

Codex

Edita ~/.codex/config.toml:

[mcp_servers.perfetto-mcp]
command = "uvx"
args = ["perfetto-mcp"]

Opcional: Usar un binario local de trace_processor_shell

Si tu entorno de red bloquea descargas, establece PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH a una ruta absoluta de un binario local de trace_processor_shell.

Cuando esta variable de entorno está configurada, perfetto-mcp usa ese binario directamente. Cuando no está configurada, el comportamiento predeterminado de Python de perfetto no cambia.

Ejemplo (mcp.json):

{
  "mcpServers": {
    "perfetto-mcp": {
      "command": "uvx",
      "args": ["perfetto-mcp"],
      "env": {
        "PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH": "D:/tools/perfetto/trace_processor_shell.exe"
      }
    }
  }
}

Ejemplo (~/.codex/config.toml):

[mcp_servers.perfetto-mcp]
command = "uvx"
args = ["perfetto-mcp"]
[mcp_servers.perfetto-mcp.env]
PERFETTO_MCP_TRACE_PROCESSOR_BIN_PATH = "D:/tools/perfetto/trace_processor_shell.exe"

Instalación local (servidor de desarrollo)

cd perfetto-mcp-server
uv sync
uv run mcp dev src/perfetto_mcp/dev.py
Local MCP
{
  "mcpServers": {
    "perfetto-mcp-local": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/git/repo/perfetto-mcp",
        "run",
        "-m",
        "perfetto_mcp"
      ],
      "env": { "PYTHONPATH": "src" }
    }
  }
}
Usando pip
pip3 install perfetto-mcp
python3 -m perfetto_mcp

📖 Cómo usar

Ejemplo de indicación inicial:

En la traza de perfetto, veo que FragmentManager tarda 438ms en ejecutarse. ¿Puedes averiguar por qué tarda tanto?

Parámetros requeridos

Cada herramienta necesita estas dos entradas:

ParámetroDescripciónEjemplo
trace_pathRuta absoluta a tu traza de Perfetto/path/to/trace.perfetto-trace
process_nameNombre del proceso/aplicación objetivocom.example.app

En tus indicaciones

Sé explícito sobre la traza y el proceso, antepone a tu indicación:

"Usa la traza de perfetto /absolute/path/to/trace.perfetto-trace para el proceso com.example.app"

Filtros opcionales

Muchas herramientas admiten filtrado adicional (pero deja que tu LLM lo maneje):

  • time_range: {start_ms: 10000, end_ms: 25000}
  • Umbrales específicos de la herramienta: min_block_ms, jank_threshold_ms, limit

🛠️ Herramientas disponibles

🔎 Exploración y descubrimiento

HerramientaPropósitoEjemplo de indicación
find_slicesExamina nombres de slices y localiza rutas críticas"Encuentra nombres de slices que contengan 'Choreographer' y muestra los mejores ejemplos"
execute_sql_queryEjecuta PerfettoSQL personalizado para análisis avanzados"Ejecuta SQL personalizado para correlacionar hilos y fotogramas en los primeros 30s"

🚨 Análisis de ANR

Nota: Útil si la traza grabada contiene ANR

HerramientaPropósitoEjemplo de indicación
detect_anrsEncuentra eventos ANR con clasificación de severidad"Detecta ANRs en los primeros 10s y resume la severidad"
anr_root_cause_analyzerAnaliza en profundidad las causas de ANR con probabilidad clasificada"Analiza la causa raíz de ANR alrededor de 20,000 ms y clasifica las causas probables"

🎯 Perfilado de rendimiento

HerramientaPropósitoEjemplo de indicación
cpu_utilization_profilerUso de CPU y planificación a nivel de hilo"Perfila el uso de CPU por hilo y marca los hilos más calientes"
main_thread_hotspot_slicesEncuentra las operaciones de hilo principal de mayor duración"Lista los puntos críticos del hilo principal >50 ms durante 10s–25s"

📱 Rendimiento de la interfaz de usuario

HerramientaPropósitoEjemplo de indicación
detect_jank_framesIdentifica fotogramas que no cumplen los plazos"Encuentra fotogramas con jank por encima de 16.67 ms y lista los 20 peores"
frame_performance_summaryMétricas generales de salud de fotogramas"Resume el rendimiento de fotogramas e informa la tasa de jank y el tiempo de CPU P99"

🔒 Concurrencia e IPC

HerramientaPropósitoEjemplo de indicación
thread_contention_analyzerEncuentra cuellos de botella de sincronización"Encuentra contención de bloqueos entre 15s–30s y muestra las peores esperas"
binder_transaction_profilerAnaliza el rendimiento de IPC de Binder"Perfila transacciones Binder lentas y agrupa por proceso servidor"

💾 Análisis de memoria

HerramientaPropósitoEjemplo de indicación
memory_leak_detectorEncuentra patrones de crecimiento sostenido de memoria"Detecta señales de fugas de memoria en los últimos 60s"
heap_dominator_tree_analyzerIdentifica clases que consumen mucha memoria"Analiza clases dominadoras del heap y lista los principales culpables"

Formato de salida

Todas las herramientas devuelven JSON estructurado con:

  • Summary: Hallazgos de alto nivel
  • Details: Resultados específicos de la herramienta
  • Metadata: Contexto de ejecución y cualquier respaldo utilizado

📚 Recursos

📄 Licencia

Licencia Apache 2.0. Consulta LICENSE para más detalles.


GitHub • Problemas • Documentación