Add ability to toggle PixelLimitResource "on" and "off" periodically.

PixelLimitResource is a testing-only resource that influences adaptation
by periodically signaling kOveruse (= "adapt down please") and kUnderuse
(= "adapt up please") in order to try to achieve a target resolution
(expressed as pixel count). The old way to enable it was, for example:
--force-fieldtrials=WebRTC-PixelLimitResource/Enabled-230400/

This CL parameterizes it and adds a new parameters, for example:
--force-fieldtrials=WebRTC-PixelLimitResource/
target_pixels:230400,interval:1s,toggle:5s/

Explanation:
- target_pixels: Is the target pixel count, same as the old behavior.
- interval: The interval at which to check if kOveruse/kUnderuse needs
  to be reported. This was previously hard-coded to 5s but by allowing
  overriding this value you can make the resource faster or slower.
- toggle: If specified, toggles "on" or "off" at this interval. If not
  specified we don't toggle which was the old behavior.

By toggling we can test not just what happens when we adapt down, but
also that we can recover once a resource is no longer overused.

In addition to unit tests, also tested manually at
https://henbos.github.io/codec-quality/src/index.html using parameters
"target_pixels:64800,interval:1s,toggle:10s". Result is rapidly
toggling between QVGA (cpu-limited) and HD (no adaptation) every 10s.

Bug: webrtc:447037084
Change-Id: I56fe4a9c14abf38de55b4b631f401ca84656a094
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/411581
Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45727}
6 files changed
tree: 89b72377f6891a5254de666f23c78b274a5140aa
  1. api/
  2. audio/
  3. build_overrides/
  4. call/
  5. common_audio/
  6. common_video/
  7. data/
  8. docs/
  9. examples/
  10. experiments/
  11. g3doc/
  12. infra/
  13. logging/
  14. media/
  15. modules/
  16. net/
  17. p2p/
  18. pc/
  19. resources/
  20. rtc_base/
  21. rtc_tools/
  22. sdk/
  23. stats/
  24. system_wrappers/
  25. test/
  26. tools_webrtc/
  27. video/
  28. .clang-format
  29. .clang-tidy
  30. .git-blame-ignore-revs
  31. .gitignore
  32. .gn
  33. .mailmap
  34. .rustfmt.toml
  35. .style.yapf
  36. .vpython3
  37. AUTHORS
  38. BUILD.gn
  39. CODE_OF_CONDUCT.md
  40. codereview.settings
  41. DEPS
  42. DIR_METADATA
  43. ENG_REVIEW_OWNERS
  44. LICENSE
  45. license_template.txt
  46. native-api.md
  47. OWNERS
  48. OWNERS_INFRA
  49. PATENTS
  50. PRESUBMIT.py
  51. presubmit_test.py
  52. presubmit_test_mocks.py
  53. pylintrc
  54. pylintrc_old_style
  55. README.chromium
  56. README.md
  57. WATCHLISTS
  58. webrtc.gni
  59. webrtc_lib_link_test.cc
  60. whitespace.txt
README.md

WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.

Development

See here for instructions on how to get started developing with the native code.

Authoritative list of directories that contain the native API header files.

More info