[bt][hci] Limit queue depth for BR/EDR dynamic channels

Drop least recently queued packets for each "low-priority" L2CAP
channel on ACL-U links in ACLDataChannel to maintain a maximum depth of
kMaxAclPacketsPerChannel per such channel. This prevents unbounded
growth of outbound data when audio streaming in conditions where
retransmissions prevent throughput at the same rate that A2DP source
sends data, which is a rare OOM hazard and causes noticeable audio
latency.

The threshold kMaxAclPacketsPerChannel = 32 works out to between
500–1000 ms of audio data in our current pipeline.

Bug: fxbug.dev/71061
Test: in bt-host-hci-tests, AclDataChannelTest.
SendingLowPriorityBrEdrPacketsWhenTooManyAreQueuedDropsLeastRecentlySentPduOnSameChannel
SendingLowPriorityPacketsThatDropDoNotAffectDataOnDifferentLink
SendingLowPriorityPacketsThatDropDoNotAffectDataOnSameLinkDifferentChannel

Change-Id: I37263cc23b3280ace4ea5c093d54b3d3173d2b7f
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/495439
Commit-Queue: Xo Wang <xow@google.com>
Reviewed-by: Ben Lawson <benlawson@google.com>
Reviewed-by: Marie Janssen 💖 <jamuraa@google.com>
3 files changed
tree: d95e0ce274efa3cf232504a53565ecfeb166e361
  1. .clang-format
  2. .clang-tidy
  3. .git-blame-ignore-revs
  4. .gitattributes
  5. .gitignore
  6. .gn
  7. .style.yapf
  8. AUTHORS
  9. BUILD.gn
  10. CODE_OF_CONDUCT.md
  11. CONTRIBUTING.md
  12. LICENSE
  13. OWNERS
  14. PATENTS
  15. README.md
  16. boards/
  17. build/
  18. buildtools/
  19. bundles/
  20. docs/
  21. examples/
  22. garnet/
  23. products/
  24. rustfmt.toml
  25. scripts/
  26. sdk/
  27. src/
  28. third_party/
  29. tools/
  30. zircon/
README.md

Fuchsia

Pink + Purple == Fuchsia (a new operating system)

What is Fuchsia?

Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.

Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

Read more about Fuchsia's principles.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.