| /* |
| * Copyright 2019 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 API_ADAPTATION_RESOURCE_H_ |
| #define API_ADAPTATION_RESOURCE_H_ |
| |
| #include <string> |
| |
| #include "api/scoped_refptr.h" |
| #include "rtc_base/ref_count.h" |
| #include "rtc_base/system/rtc_export.h" |
| |
| namespace webrtc { |
| |
| class Resource; |
| |
| enum class ResourceUsageState { |
| // Action is needed to minimze the load on this resource. |
| kOveruse, |
| // Increasing the load on this resource is desired, if possible. |
| kUnderuse, |
| }; |
| |
| RTC_EXPORT const char* ResourceUsageStateToString( |
| ResourceUsageState usage_state); |
| |
| class RTC_EXPORT ResourceListener { |
| public: |
| virtual ~ResourceListener(); |
| |
| virtual void OnResourceUsageStateMeasured( |
| rtc::scoped_refptr<Resource> resource, |
| ResourceUsageState usage_state) = 0; |
| }; |
| |
| // A Resource monitors an implementation-specific resource. It may report |
| // kOveruse or kUnderuse when resource usage is high or low enough that we |
| // should perform some sort of mitigation to fulfil the resource's constraints. |
| // |
| // The methods on this interface are invoked on the adaptation task queue. |
| // Resource usage measurements may be performed on an any task queue. |
| // |
| // The Resource is reference counted to prevent use-after-free when posting |
| // between task queues. As such, the implementation MUST NOT make any |
| // assumptions about which task queue Resource is destructed on. |
| class RTC_EXPORT Resource : public rtc::RefCountInterface { |
| public: |
| Resource(); |
| // Destruction may happen on any task queue. |
| ~Resource() override; |
| |
| virtual std::string Name() const = 0; |
| // The |listener| may be informed of resource usage measurements on any task |
| // queue, but not after this method is invoked with the null argument. |
| virtual void SetResourceListener(ResourceListener* listener) = 0; |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // API_ADAPTATION_RESOURCE_H_ |