Branch data Line data Source code
1 : : /*
2 : : * Copyright 2025 Jinwoo Sung
3 : : *
4 : : * Licensed under the Apache License, Version 2.0 (the "License");
5 : : * you may not use this file except in compliance with the License.
6 : : * You may obtain a copy of the License at
7 : : *
8 : : * http://www.apache.org/licenses/LICENSE-2.0
9 : : *
10 : : * Unless required by applicable law or agreed to in writing, software
11 : : * distributed under the License is distributed on an "AS IS" BASIS,
12 : : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : : * See the License for the specific language governing permissions and
14 : : * limitations under the License.
15 : : */
16 : :
17 : : #pragma once
18 : : #include <cstdint>
19 : : #include <optional>
20 : :
21 : : #include "wirestead/diagnostics/runtime_stats_counter.hpp"
22 : : #include "wirestead/diagnostics/send_accounting.hpp"
23 : : #include "wirestead/wrapper/send_result.hpp"
24 : :
25 : : namespace wirestead::transport::detail {
26 : : struct UdpSessionStats {
27 : : diagnostics::SendAccountingLedger::GroupHandle accounting =
28 : : std::make_shared<diagnostics::SendAccountingLedger::Group>();
29 : : diagnostics::RuntimeStatsCounters counters;
30 : : std::atomic<size_t> queued{0}, pending{0};
31 : 906 : void observe_queue() { counters.observe_queue(queued.load() + pending.load()); }
32 : : };
33 : :
34 : : // Access is serialized by UdpChannel's submission mutex.
35 : : struct UdpWriteWait {
36 : : uint64_t sequence;
37 : : bool require_remote;
38 : : std::optional<wrapper::SendRejection> ended_by;
39 : : std::shared_ptr<UdpSessionStats> stats;
40 : 662 : void end(wrapper::SendRejection reason) {
41 [ + + ]: 662 : if (!ended_by) ended_by = reason;
42 : 662 : }
43 : : };
44 : : } // namespace wirestead::transport::detail
|