Reduce quic::ConnectionId size from 24 bytes to 16 bytes on 64 bit system. This reduces some memory usage of connection & session on the server side.

sizeof(GfeQuicServerSession) = 4080 -> 4032
sizeof(GfeQuicConnection) = 5968 -> 5880

PiperOrigin-RevId: 338718268
Change-Id: Ibce3233b9b9b6499021b95ef11eb75868388cb06
diff --git a/quic/core/quic_connection_id.cc b/quic/core/quic_connection_id.cc
index a1c1439..57e57c5 100644
--- a/quic/core/quic_connection_id.cc
+++ b/quic/core/quic_connection_id.cc
@@ -50,7 +50,12 @@
 
 }  // namespace
 
-QuicConnectionId::QuicConnectionId() : QuicConnectionId(nullptr, 0) {}
+QuicConnectionId::QuicConnectionId() : QuicConnectionId(nullptr, 0) {
+  static_assert(offsetof(QuicConnectionId, padding_) ==
+                    offsetof(QuicConnectionId, length_),
+                "bad offset");
+  static_assert(sizeof(QuicConnectionId) <= 16, "bad size");
+}
 
 QuicConnectionId::QuicConnectionId(const char* data, uint8_t length) {
   length_ = length;
diff --git a/quic/core/quic_connection_id.h b/quic/core/quic_connection_id.h
index 52d5e11..d3706c8 100644
--- a/quic/core/quic_connection_id.h
+++ b/quic/core/quic_connection_id.h
@@ -99,7 +99,6 @@
   bool operator<(const QuicConnectionId& v) const;
 
  private:
-  uint8_t length_;  // length of the connection ID, in bytes.
   // The connection ID is represented in network byte order.
   union {
     // If the connection ID fits in |data_short_|, it is stored in the
@@ -107,9 +106,16 @@
     // Otherwise it is stored in |data_long_| which is guaranteed to have a size
     // equal to |length_|.
     // A value of 11 was chosen because our commonly used connection ID length
-    // is 8 and with the length, the class is padded to 12 bytes anyway.
-    char data_short_[11];
-    char* data_long_;
+    // is 8 and with the length, the class is padded to at least 12 bytes
+    // anyway.
+    struct {
+      uint8_t padding_;  // Match length_ field of the other union member.
+      char data_short_[11];
+    };
+    struct {
+      uint8_t length_;  // length of the connection ID, in bytes.
+      char* data_long_;
+    };
   };
 };