aboutsummaryrefslogtreecommitdiff
path: root/call/adaptation
diff options
context:
space:
mode:
authorEvan Shrubsole <eshr@google.com>2020-07-07 09:04:34 +0200
committerCommit Bot <commit-bot@chromium.org>2020-07-07 08:37:05 +0000
commit3444a49d77b094c7fa2aade8873288a55ac0b9e5 (patch)
tree23e16ab48387ddbb1f48c213f5a1f12266994891 /call/adaptation
parentc2128738a8c660886a35560844d8ba871d5b6d9d (diff)
downloadwebrtc-3444a49d77b094c7fa2aade8873288a55ac0b9e5.tar.gz
[Adaptation] Remove deg.prefs from ResourceAdaptationProcessor
Changes in effective degradation preference is now done directly on the VideoStreamAdapter. This means that the DegradationPreferenceListener class can be removed. Bug: webrtc:11700 Change-Id: I9ce4b627de0279df5ef2e5a38435a6d352fbb135 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178609 Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Reviewed-by: Henrik Boström <hbos@webrtc.org> Commit-Queue: Evan Shrubsole <eshr@google.com> Cr-Commit-Position: refs/heads/master@{#31642}
Diffstat (limited to 'call/adaptation')
-rw-r--r--call/adaptation/BUILD.gn2
-rw-r--r--call/adaptation/degradation_preference_listener.cc17
-rw-r--r--call/adaptation/degradation_preference_listener.h28
-rw-r--r--call/adaptation/resource_adaptation_processor.cc30
-rw-r--r--call/adaptation/resource_adaptation_processor.h15
-rw-r--r--call/adaptation/resource_adaptation_processor_unittest.cc66
-rw-r--r--call/adaptation/video_stream_adapter.cc19
-rw-r--r--call/adaptation/video_stream_adapter.h2
-rw-r--r--call/adaptation/video_stream_adapter_unittest.cc22
9 files changed, 64 insertions, 137 deletions
diff --git a/call/adaptation/BUILD.gn b/call/adaptation/BUILD.gn
index 6aa82e5780..94944d6820 100644
--- a/call/adaptation/BUILD.gn
+++ b/call/adaptation/BUILD.gn
@@ -16,8 +16,6 @@ rtc_library("resource_adaptation") {
"adaptation_listener.h",
"broadcast_resource_listener.cc",
"broadcast_resource_listener.h",
- "degradation_preference_listener.cc",
- "degradation_preference_listener.h",
"degradation_preference_provider.cc",
"degradation_preference_provider.h",
"encoder_settings.cc",
diff --git a/call/adaptation/degradation_preference_listener.cc b/call/adaptation/degradation_preference_listener.cc
deleted file mode 100644
index 3425e59aa0..0000000000
--- a/call/adaptation/degradation_preference_listener.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2020 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "call/adaptation/degradation_preference_listener.h"
-
-namespace webrtc {
-
-DegradationPreferenceListener::~DegradationPreferenceListener() = default;
-
-} // namespace webrtc
diff --git a/call/adaptation/degradation_preference_listener.h b/call/adaptation/degradation_preference_listener.h
deleted file mode 100644
index d085b220e8..0000000000
--- a/call/adaptation/degradation_preference_listener.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2020 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef CALL_ADAPTATION_DEGRADATION_PREFERENCE_LISTENER_H_
-#define CALL_ADAPTATION_DEGRADATION_PREFERENCE_LISTENER_H_
-
-#include "api/rtp_parameters.h"
-
-namespace webrtc {
-
-class DegradationPreferenceListener {
- public:
- virtual ~DegradationPreferenceListener();
-
- virtual void OnDegradationPreferenceUpdated(
- DegradationPreference degradation_preference) = 0;
-};
-
-} // namespace webrtc
-
-#endif // CALL_ADAPTATION_DEGRADATION_PREFERENCE_LISTENER_H_
diff --git a/call/adaptation/resource_adaptation_processor.cc b/call/adaptation/resource_adaptation_processor.cc
index 414132dfc6..dd273acb26 100644
--- a/call/adaptation/resource_adaptation_processor.cc
+++ b/call/adaptation/resource_adaptation_processor.cc
@@ -75,7 +75,6 @@ ResourceAdaptationProcessor::ResourceAdaptationProcessor(
new rtc::RefCountedObject<ResourceListenerDelegate>(this)),
encoder_stats_observer_(encoder_stats_observer),
resources_(),
- effective_degradation_preference_(DegradationPreference::DISABLED),
stream_adapter_(stream_adapter),
last_reported_source_restrictions_(),
previous_mitigation_results_(),
@@ -201,23 +200,6 @@ void ResourceAdaptationProcessor::RemoveAdaptationListener(
adaptation_listeners_.erase(it);
}
-void ResourceAdaptationProcessor::OnDegradationPreferenceUpdated(
- DegradationPreference degradation_preference) {
- if (!resource_adaptation_queue_->IsCurrent()) {
- resource_adaptation_queue_->PostTask(
- ToQueuedTask([this, degradation_preference]() {
- OnDegradationPreferenceUpdated(degradation_preference);
- }));
- return;
- }
- RTC_DCHECK_RUN_ON(resource_adaptation_queue_);
- if (degradation_preference == effective_degradation_preference_) {
- return;
- }
- effective_degradation_preference_ = degradation_preference;
- stream_adapter_->SetDegradationPreference(effective_degradation_preference_);
-}
-
void ResourceAdaptationProcessor::OnResourceUsageStateMeasured(
rtc::scoped_refptr<Resource> resource,
ResourceUsageState usage_state) {
@@ -263,12 +245,6 @@ ResourceAdaptationProcessor::OnResourceUnderuse(
RTC_DCHECK_RUN_ON(resource_adaptation_queue_);
RTC_DCHECK(!processing_in_progress_);
processing_in_progress_ = true;
- if (effective_degradation_preference_ == DegradationPreference::DISABLED) {
- processing_in_progress_ = false;
- return MitigationResultAndLogMessage(
- MitigationResult::kDisabled,
- "Not adapting up because DegradationPreference is disabled");
- }
// How can this stream be adapted up?
Adaptation adaptation = stream_adapter_->GetAdaptationUp();
if (adaptation.status() != Adaptation::Status::kValid) {
@@ -351,12 +327,6 @@ ResourceAdaptationProcessor::OnResourceOveruse(
RTC_DCHECK_RUN_ON(resource_adaptation_queue_);
RTC_DCHECK(!processing_in_progress_);
processing_in_progress_ = true;
- if (effective_degradation_preference_ == DegradationPreference::DISABLED) {
- processing_in_progress_ = false;
- return MitigationResultAndLogMessage(
- MitigationResult::kDisabled,
- "Not adapting down because DegradationPreference is disabled");
- }
// How can this stream be adapted up?
Adaptation adaptation = stream_adapter_->GetAdaptationDown();
if (adaptation.min_pixel_limit_reached()) {
diff --git a/call/adaptation/resource_adaptation_processor.h b/call/adaptation/resource_adaptation_processor.h
index 33e964ea1a..f519fcc860 100644
--- a/call/adaptation/resource_adaptation_processor.h
+++ b/call/adaptation/resource_adaptation_processor.h
@@ -27,7 +27,6 @@
#include "api/video/video_stream_encoder_observer.h"
#include "call/adaptation/adaptation_constraint.h"
#include "call/adaptation/adaptation_listener.h"
-#include "call/adaptation/degradation_preference_listener.h"
#include "call/adaptation/resource_adaptation_processor_interface.h"
#include "call/adaptation/video_source_restrictions.h"
#include "call/adaptation/video_stream_adapter.h"
@@ -54,8 +53,7 @@ namespace webrtc {
// i.e. the "resource adaptation task queue".
class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
public VideoSourceRestrictionsListener,
- public ResourceListener,
- public DegradationPreferenceListener {
+ public ResourceListener {
public:
ResourceAdaptationProcessor(
VideoStreamEncoderObserver* encoder_stats_observer,
@@ -92,9 +90,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
const VideoAdaptationCounters& adaptation_counters,
rtc::scoped_refptr<Resource> reason,
const VideoSourceRestrictions& unfiltered_restrictions) override;
- // DegradationPreferenceListener implementation.
- void OnDegradationPreferenceUpdated(
- DegradationPreference degradation_preference) override;
private:
// If resource usage measurements happens off the adaptation task queue, this
@@ -119,7 +114,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
};
enum class MitigationResult {
- kDisabled,
kNotMostLimitedResource,
kSharedMostLimitedResource,
kRejectedByAdapter,
@@ -142,10 +136,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
MitigationResultAndLogMessage OnResourceOveruse(
rtc::scoped_refptr<Resource> reason_resource);
- // Needs to be invoked any time |degradation_preference_| or |is_screenshare_|
- // changes to ensure |effective_degradation_preference_| is up-to-date.
- void MaybeUpdateEffectiveDegradationPreference();
-
void UpdateResourceLimitations(rtc::scoped_refptr<Resource> reason_resource,
const VideoSourceRestrictions& restrictions,
const VideoAdaptationCounters& counters)
@@ -182,9 +172,6 @@ class ResourceAdaptationProcessor : public ResourceAdaptationProcessorInterface,
VideoStreamAdapter::RestrictionsWithCounters>
adaptation_limits_by_resources_
RTC_GUARDED_BY(resource_adaptation_queue_);
- // Adaptation strategy settings.
- DegradationPreference effective_degradation_preference_
- RTC_GUARDED_BY(resource_adaptation_queue_);
// Responsible for generating and applying possible adaptations.
VideoStreamAdapter* const stream_adapter_
RTC_GUARDED_BY(resource_adaptation_queue_);
diff --git a/call/adaptation/resource_adaptation_processor_unittest.cc b/call/adaptation/resource_adaptation_processor_unittest.cc
index e7298d6e3c..0b16fabca7 100644
--- a/call/adaptation/resource_adaptation_processor_unittest.cc
+++ b/call/adaptation/resource_adaptation_processor_unittest.cc
@@ -163,7 +163,7 @@ TEST_F(ResourceAdaptationProcessorTest, DisabledByDefault) {
}
TEST_F(ResourceAdaptationProcessorTest, InsufficientInput) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
// Adaptation does not happen if input is insufficient.
// When frame size is missing (OnFrameSizeObserved not called yet).
@@ -183,7 +183,7 @@ TEST_F(ResourceAdaptationProcessorTest, InsufficientInput) {
// restrictions. For that, see video_stream_adapter_unittest.cc.
TEST_F(ResourceAdaptationProcessorTest,
OveruseTriggersRestrictingResolutionInMaintainFrameRate) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -194,7 +194,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
OveruseTriggersRestrictingFrameRateInMaintainResolution) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_RESOLUTION);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -205,7 +205,8 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
OveruseTriggersRestrictingFrameRateAndResolutionInBalanced) {
- processor_->OnDegradationPreferenceUpdated(DegradationPreference::BALANCED);
+ video_stream_adapter_->SetDegradationPreference(
+ DegradationPreference::BALANCED);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
// Adapting multiple times eventually resticts both frame rate and
// resolution. Exactly many times we need to adapt depends on
@@ -223,7 +224,7 @@ TEST_F(ResourceAdaptationProcessorTest,
}
TEST_F(ResourceAdaptationProcessorTest, AwaitingPreviousAdaptation) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -235,7 +236,7 @@ TEST_F(ResourceAdaptationProcessorTest, AwaitingPreviousAdaptation) {
}
TEST_F(ResourceAdaptationProcessorTest, CannotAdaptUpWhenUnrestricted) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kUnderuse);
@@ -243,7 +244,7 @@ TEST_F(ResourceAdaptationProcessorTest, CannotAdaptUpWhenUnrestricted) {
}
TEST_F(ResourceAdaptationProcessorTest, UnderuseTakesUsBackToUnrestricted) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -255,7 +256,7 @@ TEST_F(ResourceAdaptationProcessorTest, UnderuseTakesUsBackToUnrestricted) {
}
TEST_F(ResourceAdaptationProcessorTest, ResourcesCanPreventAdaptingUp) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
// Adapt down so that we can adapt up.
@@ -270,7 +271,7 @@ TEST_F(ResourceAdaptationProcessorTest, ResourcesCanPreventAdaptingUp) {
TEST_F(ResourceAdaptationProcessorTest,
ResourcesCanNotAdaptUpIfNeverAdaptedDown) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -284,7 +285,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
ResourcesCanNotAdaptUpIfNotAdaptedDownAfterReset) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -303,7 +304,7 @@ TEST_F(ResourceAdaptationProcessorTest,
}
TEST_F(ResourceAdaptationProcessorTest, OnlyMostLimitedResourceMayAdaptUp) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -333,7 +334,7 @@ TEST_F(ResourceAdaptationProcessorTest, OnlyMostLimitedResourceMayAdaptUp) {
TEST_F(ResourceAdaptationProcessorTest,
MultipleResourcesCanTriggerMultipleAdaptations) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -391,7 +392,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
MostLimitedResourceAdaptationWorksAfterChangingDegradataionPreference) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
// Adapt down until we can't anymore.
@@ -407,7 +408,7 @@ TEST_F(ResourceAdaptationProcessorTest,
RestrictSource(restrictions_listener_.restrictions());
int last_total = restrictions_listener_.adaptation_counters().Total();
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_RESOLUTION);
// resource_ can not adapt up since we have never reduced FPS.
resource_->SetUsageState(ResourceUsageState::kUnderuse);
@@ -423,7 +424,7 @@ TEST_F(ResourceAdaptationProcessorTest,
}
TEST_F(ResourceAdaptationProcessorTest, AdaptingTriggersOnAdaptationApplied) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -432,7 +433,7 @@ TEST_F(ResourceAdaptationProcessorTest, AdaptingTriggersOnAdaptationApplied) {
TEST_F(ResourceAdaptationProcessorTest,
AdaptsDownWhenOtherResourceIsAlwaysUnderused) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
other_resource_->SetUsageState(ResourceUsageState::kUnderuse);
@@ -453,7 +454,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
TriggerOveruseNotOnAdaptationTaskQueue) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -467,7 +468,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
DestroyProcessorWhileResourceListenerDelegateHasTaskInFlight) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -491,7 +492,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
ResourceOveruseIgnoredWhenSignalledDuringRemoval) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -520,7 +521,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovingOnlyAdaptedResourceResetsAdaptation) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -537,7 +538,8 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovingMostLimitedResourceSetsAdaptationToNextLimitedLevel) {
- processor_->OnDegradationPreferenceUpdated(DegradationPreference::BALANCED);
+ video_stream_adapter_->SetDegradationPreference(
+ DegradationPreference::BALANCED);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
other_resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -565,7 +567,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovingMostLimitedResourceSetsAdaptationIfInputStateUnchanged) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -602,7 +604,8 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovingResourceNotMostLimitedHasNoEffectOnLimitations) {
- processor_->OnDegradationPreferenceUpdated(DegradationPreference::BALANCED);
+ video_stream_adapter_->SetDegradationPreference(
+ DegradationPreference::BALANCED);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
other_resource_->SetUsageState(ResourceUsageState::kOveruse);
@@ -628,7 +631,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovingMostLimitedResourceAfterSwitchingDegradationPreferences) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -640,7 +643,7 @@ TEST_F(ResourceAdaptationProcessorTest,
VideoAdaptationCounters next_limited_counters =
restrictions_listener_.adaptation_counters();
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_RESOLUTION);
resource_->SetUsageState(ResourceUsageState::kOveruse);
RestrictSource(restrictions_listener_.restrictions());
@@ -654,7 +657,7 @@ TEST_F(ResourceAdaptationProcessorTest,
// After switching back to MAINTAIN_FRAMERATE, the next most limited settings
// are restored.
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
EXPECT_EQ(next_limited_restrictions, restrictions_listener_.restrictions());
@@ -664,7 +667,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovingMostLimitedResourceSetsNextLimitationsInDisabled) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -679,7 +682,8 @@ TEST_F(ResourceAdaptationProcessorTest,
RestrictSource(restrictions_listener_.restrictions());
EXPECT_EQ(2, restrictions_listener_.adaptation_counters().Total());
- processor_->OnDegradationPreferenceUpdated(DegradationPreference::DISABLED);
+ video_stream_adapter_->SetDegradationPreference(
+ DegradationPreference::DISABLED);
// Revert to |other_resource_| when removing |resource_| even though the
// current degradataion preference is disabled.
@@ -687,7 +691,7 @@ TEST_F(ResourceAdaptationProcessorTest,
// After switching back to MAINTAIN_FRAMERATE, the next most limited settings
// are restored.
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
EXPECT_EQ(next_limited_restrictions, restrictions_listener_.restrictions());
EXPECT_EQ(next_limited_counters,
@@ -699,7 +703,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovedResourceSignalsIgnoredByProcessor) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
@@ -713,7 +717,7 @@ TEST_F(ResourceAdaptationProcessorTest,
TEST_F(ResourceAdaptationProcessorTest,
RemovingResourceWhenMultipleMostLimtedHasNoEffect) {
- processor_->OnDegradationPreferenceUpdated(
+ video_stream_adapter_->SetDegradationPreference(
DegradationPreference::MAINTAIN_FRAMERATE);
SetInputStates(true, kDefaultFrameRate, kDefaultFrameSize);
diff --git a/call/adaptation/video_stream_adapter.cc b/call/adaptation/video_stream_adapter.cc
index 0cc03e48d6..51433efee4 100644
--- a/call/adaptation/video_stream_adapter.cc
+++ b/call/adaptation/video_stream_adapter.cc
@@ -151,6 +151,8 @@ const char* Adaptation::StatusToString(Adaptation::Status status) {
return "kAwaitingPreviousAdaptation";
case Status::kInsufficientInput:
return "kInsufficientInput";
+ case Status::kAdaptationDisabled:
+ return "kAdaptationDisabled";
}
}
@@ -305,7 +307,6 @@ Adaptation VideoStreamAdapter::GetAdaptationUp(
Adaptation VideoStreamAdapter::GetAdaptationUp() {
RTC_DCHECK_RUN_ON(&sequence_checker_);
- RTC_DCHECK_NE(degradation_preference_, DegradationPreference::DISABLED);
VideoStreamInputState input_state = input_state_provider_->InputState();
++adaptation_validation_id_;
Adaptation adaptation = GetAdaptationUp(input_state);
@@ -348,14 +349,12 @@ VideoStreamAdapter::RestrictionsOrState VideoStreamAdapter::GetAdaptationUpStep(
return IncreaseFramerate(input_state, current_restrictions_);
}
case DegradationPreference::DISABLED:
- RTC_NOTREACHED();
- return Adaptation::Status::kLimitReached;
+ return Adaptation::Status::kAdaptationDisabled;
}
}
Adaptation VideoStreamAdapter::GetAdaptationDown() {
RTC_DCHECK_RUN_ON(&sequence_checker_);
- RTC_DCHECK_NE(degradation_preference_, DegradationPreference::DISABLED);
VideoStreamInputState input_state = input_state_provider_->InputState();
++adaptation_validation_id_;
return RestrictionsOrStateToAdaptation(GetAdaptationDownStep(input_state),
@@ -397,8 +396,7 @@ VideoStreamAdapter::GetAdaptationDownStep(
return DecreaseFramerate(input_state, current_restrictions_);
}
case DegradationPreference::DISABLED:
- RTC_NOTREACHED();
- return Adaptation::Status::kLimitReached;
+ return Adaptation::Status::kAdaptationDisabled;
}
}
@@ -526,10 +524,11 @@ Adaptation VideoStreamAdapter::GetAdaptDownResolution() {
VideoStreamInputState input_state = input_state_provider_->InputState();
switch (degradation_preference_) {
case DegradationPreference::DISABLED:
- case DegradationPreference::MAINTAIN_RESOLUTION: {
- return Adaptation(adaptation_validation_id_,
- Adaptation::Status::kLimitReached, input_state, false);
- }
+ return RestrictionsOrStateToAdaptation(
+ Adaptation::Status::kAdaptationDisabled, input_state);
+ case DegradationPreference::MAINTAIN_RESOLUTION:
+ return RestrictionsOrStateToAdaptation(Adaptation::Status::kLimitReached,
+ input_state);
case DegradationPreference::MAINTAIN_FRAMERATE:
return GetAdaptationDown();
case DegradationPreference::BALANCED: {
diff --git a/call/adaptation/video_stream_adapter.h b/call/adaptation/video_stream_adapter.h
index f9202ea0d2..00a52a9ef5 100644
--- a/call/adaptation/video_stream_adapter.h
+++ b/call/adaptation/video_stream_adapter.h
@@ -74,6 +74,8 @@ class Adaptation final {
kAwaitingPreviousAdaptation,
// Not enough input.
kInsufficientInput,
+ // Adaptation disabled via degradation preference.
+ kAdaptationDisabled,
};
static const char* StatusToString(Status status);
diff --git a/call/adaptation/video_stream_adapter_unittest.cc b/call/adaptation/video_stream_adapter_unittest.cc
index 99b9e9c8df..86c53a96bc 100644
--- a/call/adaptation/video_stream_adapter_unittest.cc
+++ b/call/adaptation/video_stream_adapter_unittest.cc
@@ -794,15 +794,14 @@ TEST_F(VideoStreamAdapterTest,
EXPECT_EQ(0, adaptation.counters().fps_adaptations);
}
-TEST_F(
- VideoStreamAdapterTest,
- GetAdaptDownResolutionReturnsLimitReachedInDisabledAndMaintainResolution) {
+TEST_F(VideoStreamAdapterTest,
+ GetAdaptDownResolutionReturnsWithStatusInDisabledAndMaintainResolution) {
adapter_.SetDegradationPreference(DegradationPreference::DISABLED);
input_state_provider_.SetInputState(1280 * 720, 30,
kDefaultMinPixelsPerFrame);
- EXPECT_EQ(Adaptation::Status::kLimitReached,
+ EXPECT_EQ(Adaptation::Status::kAdaptationDisabled,
adapter_.GetAdaptDownResolution().status());
- adapter_.SetDegradationPreference(DegradationPreference::DISABLED);
+ adapter_.SetDegradationPreference(DegradationPreference::MAINTAIN_RESOLUTION);
EXPECT_EQ(Adaptation::Status::kLimitReached,
adapter_.GetAdaptDownResolution().status());
}
@@ -858,6 +857,19 @@ TEST_F(VideoStreamAdapterTest,
EXPECT_EQ(1, adaptation.counters().fps_adaptations);
}
+TEST_F(VideoStreamAdapterTest,
+ AdaptationDisabledStatusAlwaysWhenDegradationPreferenceDisabled) {
+ adapter_.SetDegradationPreference(DegradationPreference::DISABLED);
+ input_state_provider_.SetInputState(1280 * 720, 30,
+ kDefaultMinPixelsPerFrame);
+ EXPECT_EQ(Adaptation::Status::kAdaptationDisabled,
+ adapter_.GetAdaptationDown().status());
+ EXPECT_EQ(Adaptation::Status::kAdaptationDisabled,
+ adapter_.GetAdaptationUp().status());
+ EXPECT_EQ(Adaptation::Status::kAdaptationDisabled,
+ adapter_.GetAdaptDownResolution().status());
+}
+
// Death tests.
// Disabled on Android because death tests misbehave on Android, see
// base/test/gtest_util.h.