mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
![]() This updates sctp channels, including work that happens between the data channel controller and the transport, to run on the network thread. Previously all network traffic related to data channels was routed through the signaling thread before going to either the network thread or the caller's thread (e.g. js thread in chrome). Now the calls can go straight from the network thread to the JS thread with enabling a special flag on the observer (see below) and similarly calls to send data, involve 2 threads instead of 3. * Custom data channel observer adapter implementation that maintains compatibility with existing observer implementations in that notifications are delivered on the signaling thread. The adapter can be explicitly disabled for implementations that want to optimize the callback path and promise to not block the network thread. * Remove the signaling thread copy of data channels in the controller. * Remove several PostTask operations that were needed to keep things in sync (but the need has gone away). * Update tests for the controller to consistently call TeardownDataChannelTransport_n to match with production. * Update stats collectors (current and legacy) to fetch the data channel stats on the network thread where they're maintained. * Remove the AsyncChannelCloseTeardown test since the async teardown step has gone away. * Remove `sid_s` in the channel code since we only need the network state now. * For the custom observer support (with and without data adapter) and maintain compatibility with existing implementations, added a new proxy macro that allows an implementation to selectively provide its own implementation without being proxied. This is used for registering/unregistering a data channel observer. * Update the data channel proxy to map most methods to the network thread, avoiding the interim jump to the signaling thread. * Update a plethora of thread checkers from signaling to network. Bug: webrtc:11547 Change-Id: Ib4cff1482e31c46008e187189a79e967389bc518 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/299142 Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Reviewed-by: Henrik Boström <hbos@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39760} |
||
---|---|---|
.. | ||
adaptation | ||
audio | ||
audio_codecs | ||
call | ||
crypto | ||
g3doc | ||
metronome | ||
neteq | ||
numerics | ||
rtc_event_log | ||
stats | ||
task_queue | ||
test | ||
transport | ||
units | ||
video | ||
video_codecs | ||
voip | ||
array_view.h | ||
array_view_unittest.cc | ||
async_dns_resolver.h | ||
async_resolver_factory.h | ||
audio_options.cc | ||
audio_options.h | ||
BUILD.gn | ||
candidate.cc | ||
candidate.h | ||
create_peerconnection_factory.cc | ||
create_peerconnection_factory.h | ||
crypto_params.h | ||
data_channel_interface.cc | ||
data_channel_interface.h | ||
DEPS | ||
dtls_transport_interface.cc | ||
dtls_transport_interface.h | ||
dtmf_sender_interface.h | ||
fec_controller.h | ||
fec_controller_override.h | ||
field_trials.cc | ||
field_trials.h | ||
field_trials_registry.cc | ||
field_trials_registry.h | ||
field_trials_unittest.cc | ||
field_trials_view.h | ||
frame_transformer_factory.cc | ||
frame_transformer_factory.h | ||
frame_transformer_interface.h | ||
function_view.h | ||
function_view_unittest.cc | ||
ice_transport_factory.cc | ||
ice_transport_factory.h | ||
ice_transport_interface.h | ||
jsep.cc | ||
jsep.h | ||
jsep_ice_candidate.cc | ||
jsep_ice_candidate.h | ||
jsep_session_description.h | ||
legacy_stats_types.cc | ||
legacy_stats_types.h | ||
location.h | ||
make_ref_counted.h | ||
media_stream_interface.cc | ||
media_stream_interface.h | ||
media_stream_track.h | ||
media_types.cc | ||
media_types.h | ||
network_state_predictor.h | ||
notifier.h | ||
OWNERS | ||
packet_socket_factory.h | ||
peer_connection_interface.cc | ||
peer_connection_interface.h | ||
priority.h | ||
README.md | ||
ref_counted_base.h | ||
rtc_error.cc | ||
rtc_error.h | ||
rtc_error_unittest.cc | ||
rtc_event_log_output.h | ||
rtc_event_log_output_file.cc | ||
rtc_event_log_output_file.h | ||
rtc_event_log_output_file_unittest.cc | ||
rtp_headers.cc | ||
rtp_headers.h | ||
rtp_packet_info.cc | ||
rtp_packet_info.h | ||
rtp_packet_info_unittest.cc | ||
rtp_packet_infos.h | ||
rtp_packet_infos_unittest.cc | ||
rtp_parameters.cc | ||
rtp_parameters.h | ||
rtp_parameters_unittest.cc | ||
rtp_receiver_interface.cc | ||
rtp_receiver_interface.h | ||
rtp_sender_interface.cc | ||
rtp_sender_interface.h | ||
rtp_transceiver_direction.h | ||
rtp_transceiver_interface.cc | ||
rtp_transceiver_interface.h | ||
scoped_refptr.h | ||
scoped_refptr_unittest.cc | ||
sctp_transport_interface.cc | ||
sctp_transport_interface.h | ||
sequence_checker.h | ||
sequence_checker_unittest.cc | ||
set_local_description_observer_interface.h | ||
set_remote_description_observer_interface.h | ||
turn_customizer.h | ||
uma_metrics.h | ||
video_track_source_constraints.h | ||
video_track_source_proxy_factory.h | ||
webrtc_key_value_config.h | ||
wrapping_async_dns_resolver.cc | ||
wrapping_async_dns_resolver.h |
How to write code in the api/
directory
Mostly, just follow the regular style guide, but:
- Note that
api/
code is not exempt from the “.h
and.cc
files come in pairs” rule, so if you declare something inapi/path/to/foo.h
, it should be defined inapi/path/to/foo.cc
. - Headers in
api/
should, if possible, not#include
headers outsideapi/
. It’s not always possible to avoid this, but be aware that it adds to a small mountain of technical debt that we’re trying to shrink. .cc
files inapi/
, on the other hand, are free to#include
headers outsideapi/
.
That is, the preferred way for api/
code to access non-api/
code is to call
it from a .cc
file, so that users of our API headers won’t transitively
#include
non-public headers.
For headers in api/
that need to refer to non-public types, forward
declarations are often a lesser evil than including non-public header files. The
usual rules still apply, though.
.cc
files in api/
should preferably be kept reasonably small. If a
substantial implementation is needed, consider putting it with our non-public
code, and just call it from the api/
.cc
file.