ui: Clean up 2D geometry library

The existing 2D geometry library consists of a set of interfaces for
Vectors and Rects, and some naked functions that operate on them. This
is good from a duck typing perspective, as anything that quacks like
a Vector/Rect can be passed in (i.e. mouseEvent or DOMRect).

However, chaining is awkward. One must do:

```ts
vectorAdd(a, vectorSub(b, c))
```

as opposed to (ideally):

```ts
b.sub(c).add(a)
```

It would be nice if we could duck type wherever possible but also allow
method chaining.

This CL introduces a new ethos to the geometry library "accept
interfaces, return objects", which gives us the best of both worlds.

I've also taken the opportunity to add helpful comments, and add
comprehensive unit tests.

Change-Id: Ibe7a5724389cd07afec9ed2204eae9683632f5ce
24 files changed
tree: 70bdffb56a8547c9ad14bc605adfc79820efcd47
  1. .github/
  2. bazel/
  3. build_overrides/
  4. buildtools/
  5. debian/
  6. docs/
  7. examples/
  8. gn/
  9. include/
  10. infra/
  11. protos/
  12. python/
  13. src/
  14. test/
  15. third_party/
  16. tools/
  17. ui/
  18. .bazelignore
  19. .bazelrc
  20. .clang-format
  21. .clang-tidy
  22. .git-blame-ignore-revs
  23. .gitattributes
  24. .gitignore
  25. .gn
  26. .style.yapf
  27. Android.bp
  28. Android.bp.extras
  29. BUILD
  30. BUILD.extras
  31. BUILD.gn
  32. CHANGELOG
  33. codereview.settings
  34. DIR_METADATA
  35. heapprofd.rc
  36. LICENSE
  37. meson.build
  38. METADATA
  39. MODULE_LICENSE_APACHE2
  40. OWNERS
  41. perfetto.rc
  42. PerfettoIntegrationTests.xml
  43. persistent_cfg.pbtxt
  44. PRESUBMIT.py
  45. README.chromium
  46. README.md
  47. TEST_MAPPING
  48. traced_perf.rc
  49. WATCHLISTS
  50. 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.