|  | /* | 
|  | *  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_ |