ResourceListener::OnResourceUsageStateMeasured() now takes ResourceUsageState as argument, making Resource::UsageState() superfluous. With the existing "fire-and-forget" behavior of always clearing usage state on reacting to a signal, there is no longer a need to call ClearUsageState() so this too is removed. (We may want to have a callback in the future to hint to the Resource that it is a good idea to clear internal measurement samples, i.e. because the load of the system is about to change, but we can revisit that when we need it.) Moving the usage state to the callback has the benefit of getting rid of the assumption that UsageState() has to return the same value every time it is called in the same task. This CL is also the final nail in the coffin for Resource needing to know about the adaptation task queue: ResourceAdaptationProcessor's ResourceListener now takes care of posting to the adaptation task queue. To support this, the processor's SequenceChecker is replaced by a TaskQueueBase pointer. Bug: webrtc:11525, webrtc:11618 Change-Id: I2277e71cc3759c85b62465020935603f03792c94 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176376 Commit-Queue: Henrik Boström <hbos@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Reviewed-by: Evan Shrubsole <eshr@google.com> Cr-Commit-Position: refs/heads/master@{#31416}
102 lines
4.5 KiB
C++
102 lines
4.5 KiB
C++
/*
|
|
* 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_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|
|
#define CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "api/rtp_parameters.h"
|
|
#include "api/scoped_refptr.h"
|
|
#include "api/task_queue/task_queue_base.h"
|
|
#include "api/video/video_adaptation_counters.h"
|
|
#include "api/video/video_frame.h"
|
|
#include "call/adaptation/adaptation_constraint.h"
|
|
#include "call/adaptation/adaptation_listener.h"
|
|
#include "call/adaptation/encoder_settings.h"
|
|
#include "call/adaptation/resource.h"
|
|
#include "call/adaptation/video_source_restrictions.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// The listener is responsible for carrying out the reconfiguration of the video
|
|
// source such that the VideoSourceRestrictions are fulfilled.
|
|
class VideoSourceRestrictionsListener {
|
|
public:
|
|
virtual ~VideoSourceRestrictionsListener();
|
|
|
|
// The |restrictions| are filtered by degradation preference but not the
|
|
// |adaptation_counters|, which are currently only reported for legacy stats
|
|
// calculation purposes.
|
|
virtual void OnVideoSourceRestrictionsUpdated(
|
|
VideoSourceRestrictions restrictions,
|
|
const VideoAdaptationCounters& adaptation_counters,
|
|
rtc::scoped_refptr<Resource> reason) = 0;
|
|
};
|
|
|
|
// The Resource Adaptation Processor is responsible for reacting to resource
|
|
// usage measurements (e.g. overusing or underusing CPU). When a resource is
|
|
// overused the Processor is responsible for performing mitigations in order to
|
|
// consume less resources.
|
|
class ResourceAdaptationProcessorInterface {
|
|
public:
|
|
virtual ~ResourceAdaptationProcessorInterface();
|
|
|
|
virtual void SetResourceAdaptationQueue(
|
|
TaskQueueBase* resource_adaptation_queue) = 0;
|
|
|
|
virtual DegradationPreference degradation_preference() const = 0;
|
|
// Reinterprets "balanced + screenshare" as "maintain-resolution".
|
|
// TODO(hbos): Don't do this. This is not what "balanced" means. If the
|
|
// application wants to maintain resolution it should set that degradation
|
|
// preference rather than depend on non-standard behaviors.
|
|
virtual DegradationPreference effective_degradation_preference() const = 0;
|
|
|
|
// Starts or stops listening to resources, effectively enabling or disabling
|
|
// processing.
|
|
// TODO(https://crbug.com/webrtc/11172): Automatically register and unregister
|
|
// with AddResource() and RemoveResource() instead. When the processor is
|
|
// multi-stream aware, stream-specific resouces will get added and removed
|
|
// over time.
|
|
virtual void StartResourceAdaptation() = 0;
|
|
virtual void StopResourceAdaptation() = 0;
|
|
virtual void AddRestrictionsListener(
|
|
VideoSourceRestrictionsListener* restrictions_listener) = 0;
|
|
virtual void RemoveRestrictionsListener(
|
|
VideoSourceRestrictionsListener* restrictions_listener) = 0;
|
|
virtual void AddResource(rtc::scoped_refptr<Resource> resource) = 0;
|
|
virtual void RemoveResource(rtc::scoped_refptr<Resource> resource) = 0;
|
|
virtual void AddAdaptationConstraint(
|
|
AdaptationConstraint* adaptation_constraint) = 0;
|
|
virtual void RemoveAdaptationConstraint(
|
|
AdaptationConstraint* adaptation_constraint) = 0;
|
|
virtual void AddAdaptationListener(
|
|
AdaptationListener* adaptation_listener) = 0;
|
|
virtual void RemoveAdaptationListener(
|
|
AdaptationListener* adaptation_listener) = 0;
|
|
|
|
virtual void SetDegradationPreference(
|
|
DegradationPreference degradation_preference) = 0;
|
|
virtual void SetIsScreenshare(bool is_screenshare) = 0;
|
|
virtual void ResetVideoSourceRestrictions() = 0;
|
|
|
|
// May trigger one or more adaptations. It is meant to reduce resolution -
|
|
// useful if a frame was dropped due to its size - however, the implementation
|
|
// may not guarantee this (see resource_adaptation_processor.h).
|
|
// TODO(hbos): This is only part of the interface for backwards-compatiblity
|
|
// reasons. Can we replace this by something which actually satisfies the
|
|
// resolution constraints or get rid of it altogether?
|
|
virtual void TriggerAdaptationDueToFrameDroppedDueToSize(
|
|
rtc::scoped_refptr<Resource> reason_resource) = 0;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // CALL_ADAPTATION_RESOURCE_ADAPTATION_PROCESSOR_INTERFACE_H_
|