diff --git a/logging/rtc_event_log/rtc_event_log_parser_new.h b/logging/rtc_event_log/rtc_event_log_parser_new.h
index 7d24684..c4293c7 100644
--- a/logging/rtc_event_log/rtc_event_log_parser_new.h
+++ b/logging/rtc_event_log/rtc_event_log_parser_new.h
@@ -57,70 +57,136 @@
 // considered to outweigh the added memory and runtime overhead incurred by
 // adding a vptr.
 struct LoggedAlrStateEvent {
-  int64_t timestamp_us;
-  bool in_alr;
+  LoggedAlrStateEvent() = default;
+  LoggedAlrStateEvent(int64_t timestamp_us, bool in_alr)
+      : timestamp_us(timestamp_us), in_alr(in_alr) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  bool in_alr;
 };
 
 struct LoggedAudioPlayoutEvent {
-  int64_t timestamp_us;
-  uint32_t ssrc;
+  LoggedAudioPlayoutEvent() = default;
+  LoggedAudioPlayoutEvent(int64_t timestamp_us, uint32_t ssrc)
+      : timestamp_us(timestamp_us), ssrc(ssrc) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  uint32_t ssrc;
 };
 
 struct LoggedAudioNetworkAdaptationEvent {
-  int64_t timestamp_us;
-  AudioEncoderRuntimeConfig config;
+  LoggedAudioNetworkAdaptationEvent() = default;
+  LoggedAudioNetworkAdaptationEvent(int64_t timestamp_us,
+                                    const AudioEncoderRuntimeConfig& config)
+      : timestamp_us(timestamp_us), config(config) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  AudioEncoderRuntimeConfig config;
 };
 
 struct LoggedBweDelayBasedUpdate {
+  LoggedBweDelayBasedUpdate() = default;
+  LoggedBweDelayBasedUpdate(int64_t timestamp_us,
+                            int32_t bitrate_bps,
+                            BandwidthUsage detector_state)
+      : timestamp_us(timestamp_us),
+        bitrate_bps(bitrate_bps),
+        detector_state(detector_state) {}
+
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   int32_t bitrate_bps;
   BandwidthUsage detector_state;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedBweLossBasedUpdate {
+  LoggedBweLossBasedUpdate() = default;
+  LoggedBweLossBasedUpdate(int64_t timestamp_us,
+                           int32_t bitrate_bps,
+                           uint8_t fraction_lost,
+                           int32_t expected_packets)
+      : timestamp_us(timestamp_us),
+        bitrate_bps(bitrate_bps),
+        fraction_lost(fraction_lost),
+        expected_packets(expected_packets) {}
+
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   int32_t bitrate_bps;
   uint8_t fraction_lost;
   int32_t expected_packets;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedBweProbeClusterCreatedEvent {
+  LoggedBweProbeClusterCreatedEvent() = default;
+  LoggedBweProbeClusterCreatedEvent(int64_t timestamp_us,
+                                    int32_t id,
+                                    int32_t bitrate_bps,
+                                    uint32_t min_packets,
+                                    uint32_t min_bytes)
+      : timestamp_us(timestamp_us),
+        id(id),
+        bitrate_bps(bitrate_bps),
+        min_packets(min_packets),
+        min_bytes(min_bytes) {}
+
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   int32_t id;
   int32_t bitrate_bps;
   uint32_t min_packets;
   uint32_t min_bytes;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedBweProbeSuccessEvent {
+  LoggedBweProbeSuccessEvent() = default;
+  LoggedBweProbeSuccessEvent(int64_t timestamp_us,
+                             int32_t id,
+                             int32_t bitrate_bps)
+      : timestamp_us(timestamp_us), id(id), bitrate_bps(bitrate_bps) {}
+
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   int32_t id;
   int32_t bitrate_bps;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedBweProbeFailureEvent {
+  LoggedBweProbeFailureEvent() = default;
+  LoggedBweProbeFailureEvent(int64_t timestamp_us,
+                             int32_t id,
+                             ProbeFailureReason failure_reason)
+      : timestamp_us(timestamp_us), id(id), failure_reason(failure_reason) {}
+
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   int32_t id;
   ProbeFailureReason failure_reason;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedIceCandidatePairConfig {
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   IceCandidatePairConfigType type;
   uint32_t candidate_pair_id;
@@ -131,16 +197,23 @@
   IceCandidateType remote_candidate_type;
   IceCandidatePairAddressFamily remote_address_family;
   IceCandidatePairProtocol candidate_pair_protocol;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedIceCandidatePairEvent {
+  LoggedIceCandidatePairEvent() = default;
+  LoggedIceCandidatePairEvent(int64_t timestamp_us,
+                              IceCandidatePairEventType type,
+                              uint32_t candidate_pair_id)
+      : timestamp_us(timestamp_us),
+        type(type),
+        candidate_pair_id(candidate_pair_id) {}
+
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   IceCandidatePairEventType type;
   uint32_t candidate_pair_id;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedRtpPacket {
@@ -152,13 +225,15 @@
         header(header),
         header_length(header_length),
         total_length(total_length) {}
+
+  int64_t log_time_us() const { return timestamp_us; }
+  int64_t log_time_ms() const { return timestamp_us / 1000; }
+
   int64_t timestamp_us;
   // TODO(terelius): This allocates space for 15 CSRCs even if none are used.
   RTPHeader header;
   size_t header_length;
   size_t total_length;
-  int64_t log_time_us() const { return timestamp_us; }
-  int64_t log_time_ms() const { return timestamp_us / 1000; }
 };
 
 struct LoggedRtpPacketIncoming {
@@ -167,9 +242,10 @@
                           size_t header_length,
                           size_t total_length)
       : rtp(timestamp_us, header, header_length, total_length) {}
-  LoggedRtpPacket rtp;
   int64_t log_time_us() const { return rtp.timestamp_us; }
   int64_t log_time_ms() const { return rtp.timestamp_us / 1000; }
+
+  LoggedRtpPacket rtp;
 };
 
 struct LoggedRtpPacketOutgoing {
@@ -178,9 +254,10 @@
                           size_t header_length,
                           size_t total_length)
       : rtp(timestamp_us, header, header_length, total_length) {}
-  LoggedRtpPacket rtp;
   int64_t log_time_us() const { return rtp.timestamp_us; }
   int64_t log_time_ms() const { return rtp.timestamp_us / 1000; }
+
+  LoggedRtpPacket rtp;
 };
 
 struct LoggedRtcpPacket {
@@ -190,10 +267,12 @@
   LoggedRtcpPacket(uint64_t timestamp_us, const std::string& packet);
   LoggedRtcpPacket(const LoggedRtcpPacket&);
   ~LoggedRtcpPacket();
-  int64_t timestamp_us;
-  std::vector<uint8_t> raw_data;
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  std::vector<uint8_t> raw_data;
 };
 
 struct LoggedRtcpPacketIncoming {
@@ -203,9 +282,11 @@
       : rtcp(timestamp_us, packet, total_length) {}
   LoggedRtcpPacketIncoming(uint64_t timestamp_us, const std::string& packet)
       : rtcp(timestamp_us, packet) {}
-  LoggedRtcpPacket rtcp;
+
   int64_t log_time_us() const { return rtcp.timestamp_us; }
   int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; }
+
+  LoggedRtcpPacket rtcp;
 };
 
 struct LoggedRtcpPacketOutgoing {
@@ -215,89 +296,130 @@
       : rtcp(timestamp_us, packet, total_length) {}
   LoggedRtcpPacketOutgoing(uint64_t timestamp_us, const std::string& packet)
       : rtcp(timestamp_us, packet) {}
-  LoggedRtcpPacket rtcp;
+
   int64_t log_time_us() const { return rtcp.timestamp_us; }
   int64_t log_time_ms() const { return rtcp.timestamp_us / 1000; }
+
+  LoggedRtcpPacket rtcp;
 };
 
 struct LoggedRtcpPacketReceiverReport {
-  int64_t timestamp_us;
-  rtcp::ReceiverReport rr;
+  LoggedRtcpPacketReceiverReport() = default;
+  LoggedRtcpPacketReceiverReport(int64_t timestamp_us,
+                                 const rtcp::ReceiverReport& rr)
+      : timestamp_us(timestamp_us), rr(rr) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtcp::ReceiverReport rr;
 };
 
 struct LoggedRtcpPacketSenderReport {
-  int64_t timestamp_us;
-  rtcp::SenderReport sr;
+  LoggedRtcpPacketSenderReport() = default;
+  LoggedRtcpPacketSenderReport(int64_t timestamp_us,
+                               const rtcp::SenderReport& sr)
+      : timestamp_us(timestamp_us), sr(sr) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtcp::SenderReport sr;
 };
 
 struct LoggedRtcpPacketRemb {
-  int64_t timestamp_us;
-  rtcp::Remb remb;
+  LoggedRtcpPacketRemb() = default;
+  LoggedRtcpPacketRemb(int64_t timestamp_us, const rtcp::Remb& remb)
+      : timestamp_us(timestamp_us), remb(remb) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtcp::Remb remb;
 };
 
 struct LoggedRtcpPacketNack {
-  int64_t timestamp_us;
-  rtcp::Nack nack;
+  LoggedRtcpPacketNack() = default;
+  LoggedRtcpPacketNack(int64_t timestamp_us, const rtcp::Nack& nack)
+      : timestamp_us(timestamp_us), nack(nack) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtcp::Nack nack;
 };
 
 struct LoggedRtcpPacketTransportFeedback {
-  int64_t timestamp_us;
-  rtcp::TransportFeedback transport_feedback;
+  LoggedRtcpPacketTransportFeedback() = default;
+  LoggedRtcpPacketTransportFeedback(
+      int64_t timestamp_us,
+      const rtcp::TransportFeedback& transport_feedback)
+      : timestamp_us(timestamp_us), transport_feedback(transport_feedback) {}
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtcp::TransportFeedback transport_feedback;
 };
 
 struct LoggedStartEvent {
   explicit LoggedStartEvent(int64_t timestamp_us)
       : timestamp_us(timestamp_us) {}
-  int64_t timestamp_us;
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
 };
 
 struct LoggedStopEvent {
   explicit LoggedStopEvent(int64_t timestamp_us) : timestamp_us(timestamp_us) {}
-  int64_t timestamp_us;
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
 };
 
 struct LoggedAudioRecvConfig {
   LoggedAudioRecvConfig() = default;
   LoggedAudioRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config)
       : timestamp_us(timestamp_us), config(config) {}
-  int64_t timestamp_us;
-  rtclog::StreamConfig config;
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtclog::StreamConfig config;
 };
 
 struct LoggedAudioSendConfig {
   LoggedAudioSendConfig() = default;
   LoggedAudioSendConfig(int64_t timestamp_us, const rtclog::StreamConfig config)
       : timestamp_us(timestamp_us), config(config) {}
-  int64_t timestamp_us;
-  rtclog::StreamConfig config;
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtclog::StreamConfig config;
 };
 
 struct LoggedVideoRecvConfig {
   LoggedVideoRecvConfig() = default;
   LoggedVideoRecvConfig(int64_t timestamp_us, const rtclog::StreamConfig config)
       : timestamp_us(timestamp_us), config(config) {}
-  int64_t timestamp_us;
-  rtclog::StreamConfig config;
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  rtclog::StreamConfig config;
 };
 
 struct LoggedVideoSendConfig {
@@ -306,10 +428,12 @@
                         const std::vector<rtclog::StreamConfig>& configs);
   LoggedVideoSendConfig(const LoggedVideoSendConfig&);
   ~LoggedVideoSendConfig();
-  int64_t timestamp_us;
-  std::vector<rtclog::StreamConfig> configs;
+
   int64_t log_time_us() const { return timestamp_us; }
   int64_t log_time_ms() const { return timestamp_us / 1000; }
+
+  int64_t timestamp_us;
+  std::vector<rtclog::StreamConfig> configs;
 };
 
 template <typename T>
