xref: /aosp_15_r20/external/webrtc/logging/rtc_event_log/events/rtc_event_generic_packet_sent.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 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 #ifndef LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_PACKET_SENT_H_
12 #define LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_PACKET_SENT_H_
13 
14 #include <memory>
15 #include <string>
16 #include <vector>
17 
18 #include "absl/strings/string_view.h"
19 #include "api/rtc_event_log/rtc_event.h"
20 #include "api/units/timestamp.h"
21 #include "logging/rtc_event_log/events/rtc_event_field_encoding_parser.h"
22 
23 namespace webrtc {
24 
25 struct LoggedGenericPacketSent {
26   LoggedGenericPacketSent() = default;
LoggedGenericPacketSentLoggedGenericPacketSent27   LoggedGenericPacketSent(Timestamp timestamp,
28                           int64_t packet_number,
29                           size_t overhead_length,
30                           size_t payload_length,
31                           size_t padding_length)
32       : timestamp(timestamp),
33         packet_number(packet_number),
34         overhead_length(overhead_length),
35         payload_length(payload_length),
36         padding_length(padding_length) {}
37 
log_time_usLoggedGenericPacketSent38   int64_t log_time_us() const { return timestamp.us(); }
log_time_msLoggedGenericPacketSent39   int64_t log_time_ms() const { return timestamp.ms(); }
log_timeLoggedGenericPacketSent40   Timestamp log_time() const { return timestamp; }
41 
packet_lengthLoggedGenericPacketSent42   size_t packet_length() const {
43     return payload_length + padding_length + overhead_length;
44   }
45   Timestamp timestamp = Timestamp::MinusInfinity();
46   int64_t packet_number;
47   size_t overhead_length;
48   size_t payload_length;
49   size_t padding_length;
50 };
51 
52 class RtcEventGenericPacketSent final : public RtcEvent {
53  public:
54   static constexpr Type kType = Type::GenericPacketSent;
55 
56   RtcEventGenericPacketSent(int64_t packet_number,
57                             size_t overhead_length,
58                             size_t payload_length,
59                             size_t padding_length);
60   ~RtcEventGenericPacketSent() override;
61 
62   std::unique_ptr<RtcEventGenericPacketSent> Copy() const;
63 
GetType()64   Type GetType() const override { return kType; }
IsConfigEvent()65   bool IsConfigEvent() const override { return false; }
66 
67   // An identifier of the packet.
packet_number()68   int64_t packet_number() const { return packet_number_; }
69 
70   // Total packet length, including all packetization overheads, but not
71   // including ICE/TURN/IP overheads.
packet_length()72   size_t packet_length() const {
73     return overhead_length_ + payload_length_ + padding_length_;
74   }
75 
76   // The number of bytes in overhead, including framing overheads, acks if
77   // present, etc.
overhead_length()78   size_t overhead_length() const { return overhead_length_; }
79 
80   // Length of payload sent (size of raw audio/video/data), without
81   // packetization overheads. This may still include serialization overheads.
payload_length()82   size_t payload_length() const { return payload_length_; }
83 
padding_length()84   size_t padding_length() const { return padding_length_; }
85 
Encode(rtc::ArrayView<const RtcEvent * > batch)86   static std::string Encode(rtc::ArrayView<const RtcEvent*> batch) {
87     // TODO(terelius): Implement
88     return "";
89   }
90 
Parse(absl::string_view encoded_bytes,bool batched,std::vector<LoggedGenericPacketSent> & output)91   static RtcEventLogParseStatus Parse(
92       absl::string_view encoded_bytes,
93       bool batched,
94       std::vector<LoggedGenericPacketSent>& output) {
95     // TODO(terelius): Implement
96     return RtcEventLogParseStatus::Error("Not Implemented", __FILE__, __LINE__);
97   }
98 
99  private:
100   RtcEventGenericPacketSent(const RtcEventGenericPacketSent& packet);
101 
102   const int64_t packet_number_;
103   const size_t overhead_length_;
104   const size_t payload_length_;
105   const size_t padding_length_;
106 };
107 
108 }  // namespace webrtc
109 
110 #endif  // LOGGING_RTC_EVENT_LOG_EVENTS_RTC_EVENT_GENERIC_PACKET_SENT_H_
111