Add support for opening traces from postMessage.

Up until now the only way for opening traces has been to either have
it available at a specific URL or as a local file.

However, going forward we also want to be able to push a trace to the
Perfetto UI from other domains, using postMessage().

This CL therefore adds a window messsage handler that is able to store
an incoming trace in the State's EngineConfig source property, which now
considers ArrayBuffer a valid type. When the trace has been received,
it is automatically opened.

Since the source origin will not be ui.perfetto.dev, the site that
triggers opening the window will not be able to listen to when the site
has fully loaded. We therefore add functionality to reply to any
message with the content 'PING' with a simple 'PONG', which tells
the source site that ui.perfetto.dev is ready to receive traces. The
next message is then typically the trace itself as an ArrayBuffer.

When the source is external, we do not want to keep the functionality
to share and download traces, so whenever an external trace is opened,
we set the UI in a localOnlyMode, which disables those functions in the
UI and adds decorations so this is intuitive to understand. This state
is reset when a trace of a different source type is opened.

Bug: 133367518
Change-Id: I738b7626669b27042f7c0edcf3beeb8176ed10b2
8 files changed
tree: 15fecee9e1f15c97483ac7fa1987202e3728baa4
  1. build_overrides/
  2. buildtools/
  3. debian/
  4. docs/
  5. gn/
  6. include/
  7. infra/
  8. protos/
  9. src/
  10. test/
  11. tools/
  12. ui/
  13. .clang-format
  14. .gitignore
  15. .gn
  16. .travis.yml
  17. Android.bp
  18. Android.bp.extras
  19. BUILD
  20. BUILD.extras
  21. BUILD.gn
  22. codereview.settings
  23. heapprofd.rc
  24. MODULE_LICENSE_APACHE2
  25. NOTICE
  26. OWNERS
  27. perfetto.rc
  28. PRESUBMIT.py
  29. README.chromium
  30. README.md
  31. TEST_MAPPING
README.md

Perfetto - Performance instrumentation and tracing

Perfetto is an open-source project for performance instrumentation and tracing of Linux/Android/Chrome platforms and user-space apps.

See www.perfetto.dev for docs.

Bugs

  • For bugs affecting Android or the tracing internals use the internal bug tracker (go/perfetto-bugs).
  • For bugs affecting Chrome use http://crbug.com, Component:Speed>Tracing label:Perfetto.