TracedValue: add dchecks that the scope is always correct.

Each time a value is being written into a TracedValue / TracedArray
/ TracedDictionary, DCHECK that it's an active one.

Active bit is tracked on each scope in the following way:
- When calling Write* for primitive types, active bit is passed back
  to the parent.
- When calling Write* for complex types, active bit is passed to the
  newly-created scope.
- When destroying the scope, active bit is passed back to the parent.

Also add a few death tests checking that the dchecks actually fail.

R=primiano@google.com,eseckler@google.com,skyostil@google.com

Change-Id: Iab5122a2317c2ea7ad646039ea6e40a6fe7195ba
9 files changed
tree: 8036ca2bddcecb3a92d99c69a3d91c46d4517fb1
  1. .github/
  2. bazel/
  3. build_overrides/
  4. buildtools/
  5. debian/
  6. docs/
  7. examples/
  8. gn/
  9. include/
  10. infra/
  11. protos/
  12. src/
  13. test/
  14. tools/
  15. ui/
  16. .clang-format
  17. .clang-tidy
  18. .gitattributes
  19. .gitignore
  20. .gn
  21. .style.yapf
  22. Android.bp
  23. Android.bp.extras
  24. BUILD
  25. BUILD.extras
  26. BUILD.gn
  27. CHANGELOG
  28. codereview.settings
  29. heapprofd.rc
  30. LICENSE
  31. METADATA
  32. MODULE_LICENSE_APACHE2
  33. OWNERS
  34. perfetto.rc
  35. PRESUBMIT.py
  36. README.chromium
  37. README.md
  38. TEST_MAPPING
  39. traced_perf.rc
  40. WORKSPACE
README.md

Perfetto - System profiling, app tracing and trace analysis

Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.

See https://perfetto.dev/docs or the /docs/ directory for documentation.