xref: /aosp_15_r20/external/grpc-grpc/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.cc (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 // Copyright 2023 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include <grpc/support/port_platform.h>
16 
17 #include "src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.h"
18 
19 #include <utility>
20 
21 #include <grpc/support/log.h>
22 
23 namespace grpc_core {
24 
AddDemerit()25 void Chttp2MaxConcurrentStreamsPolicy::AddDemerit() {
26   ++new_demerits_;
27   ++unacked_demerits_;
28 }
29 
FlushedSettings()30 void Chttp2MaxConcurrentStreamsPolicy::FlushedSettings() {
31   sent_demerits_ += std::exchange(new_demerits_, 0);
32 }
33 
AckLastSend()34 void Chttp2MaxConcurrentStreamsPolicy::AckLastSend() {
35   GPR_ASSERT(unacked_demerits_ >= sent_demerits_);
36   unacked_demerits_ -= std::exchange(sent_demerits_, 0);
37 }
38 
AdvertiseValue() const39 uint32_t Chttp2MaxConcurrentStreamsPolicy::AdvertiseValue() const {
40   if (target_ < unacked_demerits_) return 0;
41   return target_ - unacked_demerits_;
42 }
43 
44 }  // namespace grpc_core
45