You may use a subset of the utilities provided by the Abseil library when writing WebRTC C++ code. Below, we list the explicitly allowed and the explicitly disallowed subsets of Abseil; if you find yourself in need of something that isn’t in either subset, please add it to the allowed subset in this doc in the same CL that adds the first use.
absl::optionaland related stuff from
absl::variantand related stuff from
absl/base/const_init.hfor mutex initialization.
Chromium has a ban on new static initializers, and
absl::Mutex uses one. To make
absl::Mutex available, we would need to nicely ask the Abseil team to remove that initializer (like they already did for a spinlock initializer). Additionally,
absl::Mutex handles time in a way that may not be compatible with the rest of WebRTC.
absl::Span differs from
rtc::ArrayView on several points, and both of them differ from the
std::span that was voted into C++20—and
std::span is likely to undergo further changes before C++20 is finalized. We should just keep using
rtc::ArrayView and avoid
absl::Span until C++20 is finalized and the Abseil team has decided if they will change
absl::Span to match. Bug.
rtc::SimpleStringBuilder to build strings.
These are optimized for speed, not binary size. Even
StrCat calls with a modest number of arguments can easily add several hundred bytes to the binary.
For build targets
rtc_static_library, dependencies on Abseil need to be listed in
absl_deps instead of
This is needed in order to support the Abseil component build in Chromium. In such build mode, WebRTC will depend on a unique Abseil build target what will generate a shared library.