blob: 917d1b5c82cd93bb3b3aa61572ee54107c9f4139 [file] [log] [blame]
Henrik Boströmb04b2a12019-12-10 14:14:09 +01001/*
2 * Copyright 2019 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "call/adaptation/resource.h"
12
Evan Shrubsoleaa6fbc12020-02-25 16:26:01 +010013#include "absl/algorithm/container.h"
Henrik Boström48258ac2020-02-06 12:49:57 +010014#include "rtc_base/checks.h"
Henrik Boströmb04b2a12019-12-10 14:14:09 +010015
16namespace webrtc {
17
Henrik Boström48258ac2020-02-06 12:49:57 +010018ResourceListener::~ResourceListener() {}
Henrik Boströmb04b2a12019-12-10 14:14:09 +010019
Henrik Boström48258ac2020-02-06 12:49:57 +010020Resource::Resource() : usage_state_(ResourceUsageState::kStable) {}
Henrik Boströmb04b2a12019-12-10 14:14:09 +010021
Evan Shrubsoleaa6fbc12020-02-25 16:26:01 +010022Resource::~Resource() {
23 RTC_DCHECK(listeners_.empty());
24}
Henrik Boströmb04b2a12019-12-10 14:14:09 +010025
Henrik Boström48258ac2020-02-06 12:49:57 +010026void Resource::RegisterListener(ResourceListener* listener) {
27 RTC_DCHECK(listener);
Evan Shrubsoleaa6fbc12020-02-25 16:26:01 +010028 RTC_DCHECK(absl::c_find(listeners_, listener) == listeners_.end())
29 << "ResourceListener was added twice.";
Henrik Boström48258ac2020-02-06 12:49:57 +010030 listeners_.push_back(listener);
31}
32
Evan Shrubsoleaa6fbc12020-02-25 16:26:01 +010033void Resource::UnregisterListener(ResourceListener* listener) {
34 RTC_DCHECK(listener);
35 auto it = absl::c_find(listeners_, listener);
36 if (it != listeners_.end())
37 listeners_.erase(it);
38}
39
Henrik Boström48258ac2020-02-06 12:49:57 +010040ResourceUsageState Resource::usage_state() const {
41 return usage_state_;
42}
43
44ResourceListenerResponse Resource::OnResourceUsageStateMeasured(
45 ResourceUsageState usage_state) {
46 ResourceListenerResponse response = ResourceListenerResponse::kNothing;
47 usage_state_ = usage_state;
48 for (auto* listener : listeners_) {
49 ResourceListenerResponse listener_response =
50 listener->OnResourceUsageStateMeasured(*this);
51 if (listener_response != ResourceListenerResponse::kNothing)
52 response = listener_response;
53 }
54 return response;
Henrik Boströmb04b2a12019-12-10 14:14:09 +010055}
56
57} // namespace webrtc