Remove network thread blocking call from CreateChannel

Refactor the CreateChannel method in RtpTransceiver to remove the inline
BlockingCall to the network thread and utilize ScopedOperationsBatcher
to handle network thread operations.

The batcher allows the network thread tasks—specifically setting the RTP
transport and retrieving the transport name—to be queued. A finalizer
task is then used to safely update the transport name on the signaling
thread once the network operations are complete.

Updates include:
* Modified RtpTransceiver::CreateChannel to accept a batcher reference.
* Updated SdpOfferAnswerHandler to initialize and execute network
  task batches during SDP negotiations.
* Adjusted unit tests to accommodate the batcher-based flow.

RenegotiateManyVideoTransceiversAndWatchAudioDelay comparison runs of
blocking calls (peak values) with and without this change:

Operation             this CL origin/main delta
ApplyLocalDescription   25	  30       -5
ApplyRemoteDescription  22	  32      -10
DoSetLocalDescription   26	  31       -5
DoSetRemoteDescription  22	  32      -10
Close                   22        23       -1

Bug: webrtc:42222804
Change-Id: Ic585aa9d01b838a0366735013d58b541a41efd0f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/463000
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#47415}
5 files changed
tree: 1b3e696c588df1a85fe381741ce1171c42bc0477
  1. .agents/
  2. agents/
  3. api/
  4. audio/
  5. build_overrides/
  6. call/
  7. common_audio/
  8. common_video/
  9. data/
  10. docs/
  11. examples/
  12. experiments/
  13. g3doc/
  14. infra/
  15. logging/
  16. media/
  17. modules/
  18. net/
  19. p2p/
  20. pc/
  21. resources/
  22. rtc_base/
  23. rtc_tools/
  24. sdk/
  25. stats/
  26. system_wrappers/
  27. test/
  28. tools_webrtc/
  29. video/
  30. .clang-format
  31. .clang-tidy
  32. .git-blame-ignore-revs
  33. .gitignore
  34. .gn
  35. .mailmap
  36. .rustfmt.toml
  37. .style.mdformat
  38. .style.yapf
  39. .vpython3
  40. AUTHORS
  41. BUILD.gn
  42. CODE_OF_CONDUCT.md
  43. codereview.settings
  44. DEPS
  45. DIR_METADATA
  46. ENG_REVIEW_OWNERS
  47. GEMINI.md
  48. LICENSE
  49. license_template.txt
  50. native-api.md
  51. OWNERS
  52. OWNERS_INFRA
  53. PATENTS
  54. PRESUBMIT.py
  55. presubmit_test.py
  56. presubmit_test_mocks.py
  57. pylintrc
  58. pylintrc_old_style
  59. README.chromium
  60. README.md
  61. unsafe_buffers_paths.txt
  62. WATCHLISTS
  63. webrtc.gni
  64. webrtc_lib_link_test.cc
  65. whitespace.txt
README.md

WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.

Development

See here for instructions on how to get started developing with the native code.

Authoritative list of directories that contain the native API header files.

More info