[Adaptation] Prep Resource for api/ move. Introduce VSE-Resource.

This CL is in preparation for moving Resource to the api/ folder. It
does not move it, but makes it such that the moving CL can be a pure
move.

In order to do this, we must stop depending on rtc_base/rtc::TaskQueue
in favor of api/webrtc::TaskQueueBase.

There are also other rtc_base/ dependencies that we do not want to
expose to the api/ folder, like critical sections and thread
annotations which are not publically exposed. To get around this, we
make Resource an abstract interface and move all of the base class
functionality into a new non-api/ class: VideoStreamEncoderResource.

The Resource now has Register/UnregisterAdaptationTaskQueue() methods.
By explicitly unregistering, we can ensure validity of the pointer even
if the Resource outlives the PeerConnection. While public interface
methods are only to be called on the adaptation task queue, posting to
the task queue happens off-queue, so a |lock_| is introduced to guard
it.

Bug: webrtc:11525
Change-Id: I50b3a30960cdec9032016c779b47001c01dad32f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176320
Reviewed-by: Evan Shrubsole <eshr@google.com>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31402}
This commit is contained in:
Henrik Boström
2020-06-01 17:59:05 +02:00
committed by Commit Bot
parent 3a2be87b80
commit 5cc28b0c6a
20 changed files with 442 additions and 185 deletions

View File

@ -316,12 +316,12 @@ class VideoStreamEncoderUnderTest : public VideoStreamEncoder {
overuse_detector_proxy_ =
new CpuOveruseDetectorProxy(stats_proxy)),
task_queue_factory),
fake_cpu_resource_(new FakeResource("FakeResource[CPU]")),
fake_quality_resource_(new FakeResource("FakeResource[QP]")) {
fake_cpu_resource_->Initialize(encoder_queue(),
resource_adaptation_queue());
fake_quality_resource_->Initialize(encoder_queue(),
resource_adaptation_queue());
fake_cpu_resource_(FakeResource::Create("FakeResource[CPU]")),
fake_quality_resource_(FakeResource::Create("FakeResource[QP]")) {
fake_cpu_resource_->RegisterAdaptationTaskQueue(
resource_adaptation_queue()->Get());
fake_quality_resource_->RegisterAdaptationTaskQueue(
resource_adaptation_queue()->Get());
InjectAdaptationResource(fake_quality_resource_,
VideoAdaptationReason::kQuality);
InjectAdaptationResource(fake_cpu_resource_, VideoAdaptationReason::kCpu);