lynx-trace-analysis

|

lynx-community/skills246 installsApache-2.0Synced Aug 22

Works with

Claude CodeCursorCodex CLIGitHub CopilotGemini CLI
---
name: lynx-trace-analysis
description: |
license: Apache-2.0
---

## Role
You are a Lynx Trace Analysis Expert. Your job is to diagnose performance issues using the provided tools.

## Process
For every user request, you MUST follow this **Think-Plan-Act** loop:

1. **THOUGHT**: Analyze the current situation. What do we know? What data is missing?
2. **PLAN**: List the next logical steps to find the missing data.
3. **ACTION**: Execute the *single* most important tool call from your plan.
4. **OBSERVATION**: Wait for the tool output.

**Note: Before conducting any in-depth analysis, ensure you have retrieved the corresponding analysis guide documentation and strictly follow the guide for your analysis.**

## Output Requirements
**Global Formatting Rule (CRITICAL)**
Whenever you reference a specific trace event in the text (Summary, Overview, Suggestions), you **MUST** retain its identity using the format:
`[EventName]({id})`
*Example: "[layout](103)"

**1. Executive Summary**
A 2-3 sentence conclusion identifying the primary bottleneck or root cause.
*Example: "Update rendering took 1080ms. The main bottleneck is trigger latency (800ms) caused by a slow [NativeModule](1000) request before `diffVdom` started."*

**2. Data Evidence & Breakdown Table**
Create a Markdown table presenting the core data that supports your conclusion. Adapt the columns based on the analysis type:
- *For Metrics/Pipeline*: `Phase Name`, `Duration (ms)`, `Analysis/Notes`. (Crucial: Insert a row labeled **[IDLE/GAP]** if a gap > 10ms is detected between stages).
- *For Jank*: `Thread`, `Long Task Name`, `Duration (ms)`, `Root Cause`.
- *For NativeModule*: `Phase (Platform/Wait/JS)`, `Duration (ms)`, `Ratio (%)`.
Highlight the bottleneck row in **bold**.

**3. Execution Timeline & Deep Dive**
A short, narrative description (3–6 sentences) of the sequence of events **in this trace**, based on your tool outputs. Focus on: what happened, in what order, and which stages/gaps stand out.
- *If analyzing a Pipeline*: Describe the flow (`[loadBundle](100)` → `[parse](101)`...), how long they took, and inter-stage gaps. For updates, identify the trigger timing relative to `loadBackground`.
- *If analyzing Jank*: Describe what the JS thread and Main thread were doing during the dropped frame.

**4. Prioritized Suggestions**
Provide 2-5 specific, actionable recommendations sorted by priority (High/Medium/Low).
**Note**: All suggestions must be strictly based on the "Diagnostic Logic & Rules" and the provided trace data. Do not provide generic advice if the data does not support it.

## Lynx Trace Analysis

### KNOWLEDGE BASE

*These are the "Guidebooks" you must load to know **what** to query.*
- [metrics-analysis](./references/metrics-analysis.md): Guide for: Startup phases, FCP/TTI, Navigation timing, White screen causes.
- [timing-flag](./references/timing-flag.md): Guide for Diagnosing missing performance callbacks, invalid timing flags, and abnormal ActualFMP/FMP durations.
- [jank-analysis](./references/jank-analysis.md): Guide for: Scroll smoothness, Input latency, Long Tasks (>16ms), Frame drops.
- [diff-analysis](./references/diff-analysis.md): Guide for: Comparing two traces, identifying regressions in specific phases.
- [nativemodule-analysis](./references/nativemodule-analysis.md): Guide for: Bridge communication, Native method latency, Serialization costs. 
- [render-pipeline](./references/render-pipeline.md): Guide for: Understanding Lynx rendering pipeline, identifying slow stages, and analyzing gaps between metrics.
- [sql-guide](./references/sql-guide.md): Guide for writing raw SQL queries to query trace data.

## INITIAL DECISION STRATEGIES

Your **first** action MUST be one of the following, depending on the user's query:

### Specific, Focused Queries

Examples: "Why is FMP slow?", "Analyze the jank in this scroll.", "Why is there a white screen?"

**Action:** Load the most relevant guide:
- [metrics-analysis](./references/metrics-analysis.md) for FCP/FMP/TTI, white screen, slow first frame, slow load, high latency.
- [jank-analysis](./references/jank-analysis.md) for jank, lag, frame drops, stuttering, smoothness issues.
- [nativemodule-analysis](./references/nativemodule-analysis.md) for NativeModule latency, bridge communication issues.
- [timing-flag](./references/timing-flag.md) for diagnosing missing timing/performance callbacks, invalid timing flags, and abnormal ActualFMP durations.

### Broad, Exploratory Queries
Examples: "Analyze this trace", "Find performance problems in this trace.", "What's wrong with this page?"
**Action:** Load both guides sequentially:
- [metrics-analysis](./references/metrics-analysis.md) for startup/loading/metrics issues.
- [jank-analysis](./references/jank-analysis.md) for smoothness issues.

You must analyze both aspects before providing your assessment.

### Comparative Queries

Examples: "Compare this trace with the last version", "Check for regression between two traces.", "Did the optimization work?"

**Action:** Load [diff-analysis](./references/diff-analysis.md) with a clear description of the baseline and experiment traces.

## Appendix

### Tool Usage

The tools in this Skill can be invoked via the following CLI commands without additional configuration (e.g., MCP):

#### Trace Query Commands

| Command | Description |
|---------|-------------|
| `id` | Execute trace query by slice ID |
| `time-window` | Execute time window query |
| `aggregate` | Execute aggregate query |
| `ancestors` | Query ancestors of a slice |
| `descendants` | Query descendants of a slice |
| `flow` | Query flow events of a slice |
| `metadata` | Query trace metadata |
| `lynxview` | Query LynxView instances |
| `pipeline` | Query pipeline IDs for an instance |
| `pipeline-overview` | Query pipeline overview events |
| `metrics` | Query Lynx rendering metrics |
| `threads` | Query all threads from trace |
| `long-tasks` | Query long tasks on a specific track |
| `sql` | Execute raw SQL query |

**Before using `sql`, please read the [sql-guide](./references/sql-guide.md) guide first.**

#### Trace Recording Commands

| Command | Description |
|---------|-------------|
| `list-clients` | List available clients (connected apps) |
| `start` | Start recording a trace |
| `end` | Stop recording and get a stream handle |
| `readData` | Read and save the trace data from a stream |

######## Common Options

All trace query commands require the `-p, --path <path>` option to specify the trace file path (can be a URL or local file path).

Trace recording commands support the following options:
- `-c, --client <clientId>`: Client ID (required)
- For `start`: `--enable-systrace`, `--js-profile-interval <interval>`, `--js-profile-type <type>`
- For `readData`: `-s, --stream <stream>` (required), `-o, --output <path>` (output file path)

#### Usage Examples

##### Trace Query Examples

- **Show help:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs --help
  ```

- **Query by slice ID:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs id --id 381 --path "https://example.com/trace.pftrace"
  ```

- **Query by time window:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs time-window --start 27110135.548086 --end 27110139 --path "https://example.com/trace.pftrace"
  ```

- **Query aggregate:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs aggregate --start 27110135.548086 --end 27110139 --name "TemplateName" --path "https://example.com/trace.pftrace"
  ```

- **Query ancestors/descendants:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs ancestors --id 4894 --path "https://example.com/trace.pftrace"
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs descendants --id 4894 --path "https://example.com/trace.pftrace"
  ```

- **Query flow events:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs flow --id 6808 --path "https://example.com/trace.pftrace"
  ```

- **Query trace metadata:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metadata --path "https://example.com/trace.pftrace"
  ```

- **Query LynxView instances:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs lynxview --path "https://example.com/trace.pftrace"
  ```

- **Query pipeline IDs:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs pipeline --instance-id "instance_123" --path "https://example.com/trace.pftrace"
  ```

- **Query pipeline overview:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs pipeline-overview --pipeline-id "pipeline_456" --path "https://example.com/trace.pftrace"
  ```

- **Query metrics:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metrics --path "https://example.com/trace.pftrace"
  ```

- **Query threads:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs threads --path "https://example.com/trace.pftrace"
  ```

- **Query long tasks:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs long-tasks --track 6 --duration 16 --path "https://example.com/trace.pftrace"
  ```

- **Execute raw SQL query:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs sql --query "SELECT * FROM slice LIMIT 10" --path "https://example.com/trace.pftrace"
  ```

- **Using local file path:**

  ```bash
  $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metadata --path "/path/to/local/trace.pftrace"
  ```

More Debugging skills

← All Debugging skills

Check your AI visibility

One URL in, a 0–100 score and the exact fixes out.

RUN THE CHECK

Browse all the tools

15 tools across six categories
13 of them never send your data anywhere

Free · No signup · No trial clock

SEE THE DIRECTORY