
Remove mention of absl_deps - it is history already. Rewrite motiviation of banning absl::Span to be up to date with c++20 state. Remove motivation of banning absl::Mutex as it likely no longer accurate, and that ban might be re-evaluated. Ensure allow list matches what is in root DEPS No-Try: True Bug: b/363943024, webrtc:342905193 Change-Id: I890a87511bafac7c51355d8f49e0237352eee7b9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/361302 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42914}
2.5 KiB
Using Abseil in WebRTC
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.
How to depend on Abseil
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.
Allowed
-
absl::AnyInvocable
-
absl::bind_front
-
absl::Cleanup
-
absl::InlinedVector
-
absl::Nonnull
andabsl::Nullable
-
absl::WrapUnique
-
absl::string_view
-
The functions in
absl/strings/ascii.h
,absl/strings/match.h
, andabsl/strings/str_replace.h
. -
The functions in
absl/strings/escaping.h
. -
absl::is_trivially_copy_constructible
,absl::is_trivially_copy_assignable
, andabsl::is_trivially_destructible
fromabsl/meta/type_traits.h
. -
absl::variant
and related stuff fromabsl/types/variant.h
. -
The functions in
absl/algorithm/algorithm.h
andabsl/algorithm/container.h
. -
absl/base/const_init.h
for mutex initialization. -
The macros in
absl/base/attributes.h
,absl/base/config.h
andabsl/base/macros.h
. -
absl/numeric/bits.h
-
ABSL_FLAG is allowed in tests and tools, but disallowed in in non-test code.
Disallowed
absl::make_unique
Use std::make_unique
instead.
absl::Mutex
Use webrtc::Mutex
instead.
absl::optional
Use std::optional
instead.
absl::Span
Use rtc::ArrayView
instead.
absl::Span
differs from rtc::ArrayView
on several points, and both
of them differ from the std::span
introduced in C++20. We should just keep
using rtc::ArrayView
and avoid absl::Span
. When WebRTC switches to C++20,
we will consider replacing rtc::ArrayView
with std::span
.
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.