Skip to content

feat: Integrate CrUX data into performance trace summaries#733

Merged
OrKoN merged 32 commits intomainfrom
crux-for-trace
Feb 5, 2026
Merged

feat: Integrate CrUX data into performance trace summaries#733
OrKoN merged 32 commits intomainfrom
crux-for-trace

Conversation

@paulirish
Copy link
Member

We upgrade the performance trace tools to include real-user experience data from the Chrome User Experience Report (CrUX).

https://developer.chrome.com/docs/crux
https://developer.chrome.com/docs/crux/methodology

Deets

  • When a trace is stopped, the server now extracts the primary navigation URLs from the trace (determined by insightSets).
  • It calls the public CrUX API to fetch field metrics (LCP, INP, CLS) for each unique URL/Origin.
  • The formatting of crux data is handled by upstream TraceFormatter, but it looks like this:
Metrics (field / real users):
  - LCP: 2595 ms (scope: url)
  - LCP breakdown:
    - TTFB: 1273 ms (scope: url)
    - Load delay: 86 ms (scope: url)
    - Load duration: 451 ms (scope: url)
    - Render delay: 786 ms (scope: url)
  - INP: 140 ms (scope: url)
  - CLS: 0.06 (scope: url)
  - The above data is from CrUX–Chrome User Experience Report. It's how the page performs for real users.
  - The values shown above are the p75 measure of all real Chrome users
  - The scope indicates if the data came from the entire origin, or a specific url
  - Lab metrics describe how this specific page load performed, while field metrics are an aggregation of results from real-world users. Best practice is to prioritize metrics that are bad in field data. Lab metrics may be better or worse than fields metrics depending on the developer's machine, network, or the actions performed while tracing.

Privacy Considerations:

  • Updates the server README to inform users that performance analysis tools may send trace URLs to the Google CrUX API.
  • Adds a notification message to the server startup logs regarding the CrUX API interaction.

Doc: go/crux-in-bifrost
Fixes b/446630695

paulirish and others added 17 commits December 22, 2025 14:21
Change-Id: Ibda3954500250fa9c2d0ae95dd996409ea525080
Change-Id: Ib9b76305409bb660a25182497d9b54591e2297a0
Change-Id: I3886ba86705ce423ccf8024133bc58fff16fa6c8
Change-Id: I921880b40788863151962d13dc9838c4793a840f
Change-Id: I94c55d08bad7c58b28a5febccdc126dc0b012e5f
Change-Id: I70fa78a46ebb1bc43be66dcd80177cec2ab34f1c
Change-Id: Id8ff5120b5f02cd57ed42427b182763afbf65dff
Change-Id: I22e211eebdca6bf25878cb4dd4182d9b6ca34cf8
Change-Id: Ie1905a1b746cce82b27dfe89c56d2b591c050291
Change-Id: I331aa991818b151e7b4080490475736afd30120f
Change-Id: I2e45c268b8510658b4ece06f52a7bd67b5154b2a
Change-Id: I04829e52b7e38bf4384b6db89f977abe518d7b5e
Change-Id: I2b5dcda9b32db8ec0ca1270e267edfeb562ff7b5
Change-Id: I5e824dbb077b94accb65420d97f5fc3de61fbd53
Change-Id: Ibf10ea910e34bac5fc44bf13760ceb971680dd35
Change-Id: I8eff31fd3b8d01f7ac466ed22117696844227ac4
Change-Id: I5b9c78336bf0d7ca8ae42f62fc59bfe28da628ee
@OrKoN
Copy link
Collaborator

OrKoN commented Jan 13, 2026

@paulirish I have updated the devtools-frontend dependency today so it should be ready to be rebased

paulirish and others added 2 commits January 13, 2026 05:50
Change-Id: Ib6eacf5cc90e858b3c2cbce67ceb41f4d35b0065
@paulirish
Copy link
Member Author

@paulirish I have updated the devtools-frontend dependency today so it should be ready to be rebased

Danke! It's up to date now.

@paulirish paulirish requested a review from OrKoN January 14, 2026 23:01
@OrKoN
Copy link
Collaborator

OrKoN commented Jan 28, 2026

@paulirish is it possible to update the implementation to make CrUX integration conditional on a CLI flag (can be enabled by default for now)?

Change-Id: I91338964fd926022c6d88dc35308479370a3fb80
Change-Id: I19d3ac21253fb67ae8e82ac1da2414424dc05b21
Change-Id: I7cff8cff76bbd606dde471847d841c5fb0c05b1d
Change-Id: Ia6dcaf83b12fe44a5167a5c7c8fb7e40276af61c
…tools-mcp into crux-for-trace

Change-Id: Ie34ac6b674332a1b941966692f7fe9177b76b02e
Change-Id: I2b47d8436a7d864ee1483116bf282081b8144031
@paulirish
Copy link
Member Author

@paulirish is it possible to update the implementation to make CrUX integration conditional on a CLI flag (can be enabled by default for now)?

done

@OrKoN OrKoN enabled auto-merge February 5, 2026 07:15
@OrKoN OrKoN added this pull request to the merge queue Feb 5, 2026
Merged via the queue into main with commit b747f9d Feb 5, 2026
31 of 33 checks passed
@OrKoN OrKoN deleted the crux-for-trace branch February 5, 2026 07:32
github-merge-queue bot pushed a commit that referenced this pull request Feb 10, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.17.0](chrome-devtools-mcp-v0.16.0...chrome-devtools-mcp-v0.17.0)
(2026-02-10)


### 🎉 Features

* include Error.cause chain for uncaught errors and logged Errors
([#906](#906))
([05b01ec](05b01ec))
* Integrate CrUX data into performance trace summaries
([#733](#733))
([b747f9d](b747f9d))
* show message and stack trace in details when console.log'ging Error
objects
([#902](#902))
([ffa00da](ffa00da))


### 🛠️ Fixes

* console formatter hides frames from ignored scripts
([#927](#927))
([8e2380b](8e2380b))
* limit stack traces to 50 lines
([#923](#923))
([caea23a](caea23a))


### 📄 Documentation

* add macOS Web Bluetooth troubleshooting note
([#930](#930))
([3c9528b](3c9528b)),
closes
[#917](#917)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
wolfib pushed a commit to wolfib/chrome-devtools-mcp that referenced this pull request Mar 10, 2026
…Tools#733)

We upgrade the performance trace tools to include real-user experience
data from the Chrome User Experience Report (CrUX).

https://developer.chrome.com/docs/crux
https://developer.chrome.com/docs/crux/methodology

### Deets

* When a trace is stopped, the server now extracts the primary
navigation URLs from the trace (determined by insightSets).
* It calls the public CrUX API to fetch field metrics (LCP, INP, CLS)
for each unique URL/Origin.
* The formatting of crux data is handled by upstream TraceFormatter, but
it looks like this:

```md
Metrics (field / real users):
  - LCP: 2595 ms (scope: url)
  - LCP breakdown:
    - TTFB: 1273 ms (scope: url)
    - Load delay: 86 ms (scope: url)
    - Load duration: 451 ms (scope: url)
    - Render delay: 786 ms (scope: url)
  - INP: 140 ms (scope: url)
  - CLS: 0.06 (scope: url)
  - The above data is from CrUX–Chrome User Experience Report. It's how the page performs for real users.
  - The values shown above are the p75 measure of all real Chrome users
  - The scope indicates if the data came from the entire origin, or a specific url
  - Lab metrics describe how this specific page load performed, while field metrics are an aggregation of results from real-world users. Best practice is to prioritize metrics that are bad in field data. Lab metrics may be better or worse than fields metrics depending on the developer's machine, network, or the actions performed while tracing.
 ```
 
**Privacy Considerations:**

*   Updates the server README to inform users that performance analysis tools may send trace URLs to the Google CrUX API.
*   Adds a notification message to the server startup logs regarding the CrUX API interaction.


Doc: go/crux-in-bifrost 
Fixes b/446630695

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
wolfib pushed a commit to wolfib/chrome-devtools-mcp that referenced this pull request Mar 10, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.17.0](ChromeDevTools/chrome-devtools-mcp@chrome-devtools-mcp-v0.16.0...chrome-devtools-mcp-v0.17.0)
(2026-02-10)


### 🎉 Features

* include Error.cause chain for uncaught errors and logged Errors
([ChromeDevTools#906](ChromeDevTools#906))
([05b01ec](ChromeDevTools@05b01ec))
* Integrate CrUX data into performance trace summaries
([ChromeDevTools#733](ChromeDevTools#733))
([b747f9d](ChromeDevTools@b747f9d))
* show message and stack trace in details when console.log'ging Error
objects
([ChromeDevTools#902](ChromeDevTools#902))
([ffa00da](ChromeDevTools@ffa00da))


### 🛠️ Fixes

* console formatter hides frames from ignored scripts
([ChromeDevTools#927](ChromeDevTools#927))
([8e2380b](ChromeDevTools@8e2380b))
* limit stack traces to 50 lines
([ChromeDevTools#923](ChromeDevTools#923))
([caea23a](ChromeDevTools@caea23a))


### 📄 Documentation

* add macOS Web Bluetooth troubleshooting note
([ChromeDevTools#930](ChromeDevTools#930))
([3c9528b](ChromeDevTools@3c9528b)),
closes
[ChromeDevTools#917](ChromeDevTools#917)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants