
For binary size reasons; they emit too many instructions at each call site. I decided to not point out replacements for them, since rtc::join has only one caller, and rtc::split isn't the only option for splitting strings. And both of them have APIs that can cause the creation of needless temporary strings. Bug: none Change-Id: I06161012836a90b09249c2813d2ddc15f167d580 Notry: true Reviewed-on: https://webrtc-review.googlesource.com/c/124480 Commit-Queue: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Steve Anton <steveanton@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26846}
2.2 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.
Allowed
absl::InlinedVector
absl::make_unique
andabsl::WrapUnique
absl::optional
and related stuff fromabsl/types/optional.h
.absl::string_view
- The functions in
absl/strings/ascii.h
,absl/strings/match.h
, andabsl/strings/str_replace.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
- The macros in
absl/base/attributes.h
andabsl/base/config.h
Disallowed
absl::Mutex
Use rtc::CriticalSection
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 compaible 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.