Fix layout shift clustering calculations

This CL fixes an issue with how we were clustering the layout shifts (as
per https://web.dev/cls/#measure-cls-in-javascript). Because the code
looped through and assigned shifts to a cluster only when it found an
event in a new cluster, this meant that the final clustering of layout
shifts wouldn't be correctly assigned, and they would have no
_current_cluster_id, causing the UI to render incorrectly.

We still need to render _current_cluster_id conditionally (done in
https://crrev.com/c/3295534), because sometimes layout shifts cannot be
assigned to a cluster (if they have recent user input), but this CL
fixes cases where we would incorrectly not assign a cluster.

I also pulled the method out so we can unit test it.

Bug: 1259606
Change-Id: I351a2c8c9054f5b21140a991e5c3760636854488
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3295491
Reviewed-by: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Michal Mocny <mmocny@chromium.org>
Commit-Queue: Jack Franklin <jacktfranklin@chromium.org>
(cherry picked from commit 6487cb72b38a2803b72b21eca7b222ba706062b5)
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3317342
Reviewed-by: Kim-Anh Tran <kimanh@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
6 files changed
tree: eeddec2903439f428f24789ec25e41dac56535bb
  1. .vscode/
  2. build_overrides/
  3. config/
  4. docs/
  5. extension-api/
  6. front_end/
  7. inspector_overlay/
  8. node_modules/
  9. scripts/
  10. test/
  11. third_party/
  12. v8/
  13. .clang-format
  14. .editorconfig
  15. .eslintignore
  16. .eslintrc.js
  17. .gitattributes
  18. .gitignore
  19. .gn
  20. .mailmap
  21. .npmignore
  22. .npmrc
  23. .style.yapf
  24. .stylelintignore
  25. .stylelintrc.json
  26. ARCHITECTURE.md
  27. AUTHORS
  28. BUILD.gn
  29. DEPS
  30. LICENSE
  31. OWNERS
  32. package-lock.json
  33. package.json
  34. PRESUBMIT.py
  35. README.md
  36. tsconfig.json
  37. WATCHLISTS
README.md

Chrome DevTools frontend

npm package

The client-side of the Chrome DevTools, including all JS & CSS to run the DevTools webapp.

Source code

The frontend is available on chromium.googlesource.com.

Design guidelines

Please be aware that DevTools follows additional development guidelines.

Issue triage

The issue triage guidelines can be found in docs/triage_guidelines.md.

Workflows

Instructions to set up, use, and maintain a DevTools frontend checkout can be found in docs/workflows.md.

Additional references

Source mirrors

DevTools frontend repository is mirrored on GitHub.

DevTools frontend is also available on NPM as the chrome-devtools-frontend package. It's not currently available via CJS or ES modules, so consuming this package in other tools may require some effort.

The version number of the npm package (e.g. 1.0.373466) refers to the Chromium commit position of latest frontend git commit. It's incremented with every Chromium commit, however the package is updated roughly daily.

Getting in touch