Reduce memory used when saving Performance data for offline viewing (#10034)

* Reduce memory used when saving Performance data for offline viewing

The Perfetto trace was exported as a JSON array of numbers, which makes
jsonEncode do roughly two string writes per trace byte and can exhaust the
browser's memory for large traces. Export it as a base64 string under a new
key instead, and keep reading the legacy list format so older files still
load.

Also:
- Only encode the bytes in a ByteData view when converting to base64.
- Allocate Uint8ListRingBuffer.merged once at its exact size.
- Show an error instead of crashing when the data is too large to export.
- Revoke the download Blob URL after the download starts.

Fixes #10010

* Link the PR in the release note

* Address review feedback on performance export

---------

Co-authored-by: Sam Rawlins <srawlins@google.com>
8 files changed
tree: b63b12f8e11657d3408a45fbf3f045dcaae675d2
  1. .agents/
  2. .gemini/
  3. .github/
  4. .vscode/
  5. _markdown_images/
  6. docs/
  7. packages/
  8. third_party/
  9. tool/
  10. .gitattributes
  11. .gitignore
  12. AGENTS.md
  13. analysis_options.yaml
  14. AUTHORS
  15. BETA_TESTING.md
  16. CLAUDE.md
  17. CODE_OF_CONDUCT.md
  18. CODEOWNERS
  19. CONTRIBUTING.md
  20. DEBUGGING.md
  21. devtools_options.yaml
  22. DOCUMENTATION.md
  23. flutter-candidate.txt
  24. LICENSE
  25. pubspec.lock
  26. pubspec.yaml
  27. README.md
  28. STYLE.md
  29. TESTING.md
  30. TRIAGE.md
README.md

Dart & Flutter DevTools

Build Status OpenSSF Scorecard

What is this?

Dart & Flutter DevTools is a suite of performance tools for Dart and Flutter.

Getting started

For documentation on installing and trying out DevTools, please see our docs.

Contributing and development

Contributions welcome! See our contributing page for an overview of how to build and contribute to the project.

Terms and Privacy

By using Dart DevTools, you agree to the Google Terms of Service. To understand how we use data collected from this service, see the Google Privacy Policy.