Add a list of allowed and disallowed Abseil things
Bug: webrtc:8821 Change-Id: Ifb3bacd3403bbf823c78fff47571a83159f1da73 No-Try: True Reviewed-on: https://webrtc-review.googlesource.com/95880 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24437}
This commit is contained in:
parent
2afd281ec4
commit
c3af97d68c
2
DEPS
2
DEPS
@ -1043,7 +1043,7 @@ include_rules = [
|
|||||||
"+test",
|
"+test",
|
||||||
"+rtc_tools",
|
"+rtc_tools",
|
||||||
|
|
||||||
# Abseil whitelist.
|
# Abseil whitelist. Keep this in sync with abseil-in-webrtc-md.
|
||||||
"+absl/container/inlined_vector.h",
|
"+absl/container/inlined_vector.h",
|
||||||
"+absl/memory/memory.h",
|
"+absl/memory/memory.h",
|
||||||
"+absl/strings/string_view.h",
|
"+absl/strings/string_view.h",
|
||||||
|
|||||||
3
OWNERS
3
OWNERS
@ -18,6 +18,9 @@ per-file pylintrc=phoglund@webrtc.org
|
|||||||
per-file THIRD_PARTY_DEPS=phoglund@webrtc.org
|
per-file THIRD_PARTY_DEPS=phoglund@webrtc.org
|
||||||
per-file THIRD_PARTY_DEPS=titovartem@webrtc.org
|
per-file THIRD_PARTY_DEPS=titovartem@webrtc.org
|
||||||
per-file WATCHLISTS=*
|
per-file WATCHLISTS=*
|
||||||
|
per-file abseil-in-webrtc.md=danilchap@webrtc.org
|
||||||
|
per-file abseil-in-webrtc.md=kwiberg@webrtc.org
|
||||||
|
per-file abseil-in-webrtc.md=mbonadei@webrtc.org
|
||||||
per-file style-guide.md=danilchap@webrtc.org
|
per-file style-guide.md=danilchap@webrtc.org
|
||||||
per-file style-guide.md=kwiberg@webrtc.org
|
per-file style-guide.md=kwiberg@webrtc.org
|
||||||
per-file native-api.md=kwiberg@webrtc.org
|
per-file native-api.md=kwiberg@webrtc.org
|
||||||
|
|||||||
50
abseil-in-webrtc.md
Normal file
50
abseil-in-webrtc.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Using Abseil in WebRTC
|
||||||
|
|
||||||
|
You may use a subset of the utilities provided by the [Abseil][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.
|
||||||
|
|
||||||
|
[abseil]: https://abseil.io/about/
|
||||||
|
|
||||||
|
## **Allowed**
|
||||||
|
|
||||||
|
* `absl::InlinedVector`
|
||||||
|
* `absl::make_unique` and `absl::WrapUnique`
|
||||||
|
* `absl::optional` and related stuff from `absl/types/optional.h`.
|
||||||
|
* `absl::string_view`
|
||||||
|
* `absl::variant` and related stuff from `absl/types/variant.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](https://bugs.webrtc.org/9214).
|
||||||
|
|
||||||
|
### `absl::StrCat` and `absl::StrAppend`
|
||||||
|
|
||||||
|
*Use `rtc::SimpleStringBuilder` instead.*
|
||||||
|
|
||||||
|
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.
|
||||||
@ -31,6 +31,13 @@ WebRTC is written in C++11, but with some restrictions:
|
|||||||
|
|
||||||
[chromium-cpp11]: https://chromium-cpp.appspot.com/
|
[chromium-cpp11]: https://chromium-cpp.appspot.com/
|
||||||
|
|
||||||
|
### Abseil
|
||||||
|
|
||||||
|
You may use a subset of the utilities provided by the [Abseil][abseil]
|
||||||
|
library when writing WebRTC C++ code. [Details](abseil-in-webrtc.md).
|
||||||
|
|
||||||
|
[abseil]: https://abseil.io/about/
|
||||||
|
|
||||||
### <a name="h-cc-pairs"></a>`.h` and `.cc` files come in pairs
|
### <a name="h-cc-pairs"></a>`.h` and `.cc` files come in pairs
|
||||||
|
|
||||||
`.h` and `.cc` files should come in pairs, with the same name (except
|
`.h` and `.cc` files should come in pairs, with the same name (except
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user