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.
For build targets of type rtc_library
, rtc_source_set
and rtc_static_library
, dependencies on Abseil need to be listed in deps
.
The GN templates will take care of generating the proper dependency when used within Chromium or standalone. In that build mode, WebRTC will depend on a monolithic Abseil build target that will generate a shared library.
Previously, absl_deps
was used but been deprecated in May 2024.
absl::AnyInvocable
absl::bind_front
absl::Cleanup
absl::InlinedVector
absl::Nonnull
and absl::Nullable
absl::WrapUnique
absl::optional
and related stuff from absl/types/optional.h
.absl::string_view
absl/strings/ascii.h
, absl/strings/match.h
, and absl/strings/str_replace.h
.absl/strings/escaping.h
.absl::is_trivially_copy_constructible
, absl::is_trivially_copy_assignable
, and absl::is_trivially_destructible
from absl/meta/type_traits.h
.absl::variant
and related stuff from absl/types/variant.h
.absl/algorithm/algorithm.h
and absl/algorithm/container.h
.absl/base/const_init.h
for mutex initialization.absl/base/attributes.h
, absl/base/config.h
and absl/base/macros.h
.absl/numeric/bits.h
absl::make_unique
Use std::make_unique
instead.
absl::Mutex
Use webrtc::Mutex
instead.
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
Use rtc::ArrayView
instead.
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.
absl::StrCat
, absl::StrAppend
, absl::StrJoin
, absl::StrSplit
Use 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.