ipc: Remove wrong DeferredBase constructor.

DeferredBase had a constructor that accepted a Deferred<T> and moved its
callback to the new DeferredBase.

The problem with moving an std::function is that what's left in the
original is unspecified (but valid): a copy of the original callback
could be stuck there and it could be called when the formal parameter (a
copy) would be destroyed.

With this commit, we use the non inline DeferredBase(DeferredBase&&)
move constructor (it works, since Deferred<T> is a DeferredBase).
There's actually already a comment in deferred.cc that explains that:

```
// Can't just use "= default" here because the default move operator for
// std::function doesn't necessarily swap and hence can leave a copy of the
// bind state around, which is undesirable.
```

Since the problem is based on unspecified behavior, we only managed to
trigger it in CI in conjuction with https://r.android.com/2686526

This also seems to reduce the binary size of the libperfetto_c.so by a
couple of kilobytes.

Change-Id: I787cd4a5f1722f7c83492bd3581b2c9e8e7f56f0
1 file changed
tree: 40c51c18b7023399e4d2070d10c654c607674bc8
  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. .clang-format
  19. .clang-tidy
  20. .git-blame-ignore-revs
  21. .gitattributes
  22. .gitignore
  23. .gn
  24. .style.yapf
  25. Android.bp
  26. Android.bp.extras
  27. BUILD
  28. BUILD.extras
  29. BUILD.gn
  30. CHANGELOG
  31. codereview.settings
  32. DIR_METADATA
  33. heapprofd.rc
  34. LICENSE
  35. meson.build
  36. METADATA
  37. MODULE_LICENSE_APACHE2
  38. OWNERS
  39. perfetto.rc
  40. PerfettoIntegrationTests.xml
  41. PRESUBMIT.py
  42. README.chromium
  43. README.md
  44. TEST_MAPPING
  45. traced_perf.rc
  46. 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.