Introduce QuicUtils::InvertPerspective and refactor code to use it

gfe-relnote: quic perspective refactor, no behavior change
PiperOrigin-RevId: 255318447
Change-Id: I10a7cb3478382f851d3f5a1293a248918ec95844
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc
index 94456a9..9af2678 100644
--- a/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -58,8 +58,7 @@
     auto pending = QuicMakeUnique<PendingStream>(
         QuicUtils::GetFirstUnidirectionalStreamId(
             GetParam().version.transport_version,
-            perspective() == Perspective::IS_CLIENT ? Perspective::IS_SERVER
-                                                    : Perspective::IS_CLIENT),
+            QuicUtils::InvertPerspective(perspective())),
         &session_);
     receive_control_stream_ =
         QuicMakeUnique<QuicReceiveControlStream>(pending.get());
diff --git a/quic/core/qpack/qpack_receive_stream_test.cc b/quic/core/qpack/qpack_receive_stream_test.cc
index d324a0f..121043f 100644
--- a/quic/core/qpack/qpack_receive_stream_test.cc
+++ b/quic/core/qpack/qpack_receive_stream_test.cc
@@ -55,12 +55,11 @@
             SupportedVersions(GetParam().version))),
         session_(connection_) {
     session_.Initialize();
-    PendingStream* pending = new PendingStream(
-        QuicUtils::GetFirstUnidirectionalStreamId(
-            GetParam().version.transport_version,
-            perspective() == Perspective::IS_CLIENT ? Perspective::IS_SERVER
-                                                    : Perspective::IS_CLIENT),
-        &session_);
+    PendingStream* pending =
+        new PendingStream(QuicUtils::GetFirstUnidirectionalStreamId(
+                              GetParam().version.transport_version,
+                              QuicUtils::InvertPerspective(perspective())),
+                          &session_);
     qpack_receive_stream_ = QuicMakeUnique<QpackReceiveStream>(pending);
     delete pending;
   }
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index b51ca45..749b3b6 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -85,11 +85,6 @@
     QuicSocketAddress(QuicIpAddress::Loopback6(),
                       /*port=*/443);
 
-Perspective InvertPerspective(Perspective perspective) {
-  return perspective == Perspective::IS_CLIENT ? Perspective::IS_SERVER
-                                               : Perspective::IS_CLIENT;
-}
-
 QuicStreamId GetNthClientInitiatedStreamId(int n,
                                            QuicTransportVersion version) {
   return QuicUtils::GetFirstBidirectionalStreamId(version,
@@ -533,7 +528,7 @@
     // We invert perspective here, because the framer needs to parse packets
     // we send.
     QuicFramerPeer::SetPerspective(framer_.framer(),
-                                   InvertPerspective(perspective));
+                                   QuicUtils::InvertPerspective(perspective));
   }
 
   // final_bytes_of_last_packet_ returns the last four bytes of the previous
@@ -1539,7 +1534,7 @@
       connection_.set_can_truncate_connection_ids(true);
     }
     QuicFramerPeer::SetPerspective(&peer_framer_,
-                                   InvertPerspective(perspective));
+                                   QuicUtils::InvertPerspective(perspective));
   }
 
   void set_packets_between_probes_base(
diff --git a/quic/core/quic_stream_id_manager.cc b/quic/core/quic_stream_id_manager.cc
index 793ee6c..8b8ff90 100644
--- a/quic/core/quic_stream_id_manager.cc
+++ b/quic/core/quic_stream_id_manager.cc
@@ -402,8 +402,7 @@
 }
 
 Perspective QuicStreamIdManager::peer_perspective() const {
-  return (perspective() == Perspective::IS_SERVER) ? Perspective::IS_CLIENT
-                                                   : Perspective::IS_SERVER;
+  return QuicUtils::InvertPerspective(perspective());
 }
 
 QuicTransportVersion QuicStreamIdManager::transport_version() const {
diff --git a/quic/core/quic_utils.h b/quic/core/quic_utils.h
index bac025e..294f52f 100644
--- a/quic/core/quic_utils.h
+++ b/quic/core/quic_utils.h
@@ -85,6 +85,12 @@
   // Creates an iovec pointing to the same data as |data|.
   static struct iovec MakeIovec(QuicStringPiece data);
 
+  // Returns the opposite Perspective of the |perspective| passed in.
+  static constexpr Perspective InvertPerspective(Perspective perspective) {
+    return perspective == Perspective::IS_CLIENT ? Perspective::IS_SERVER
+                                                 : Perspective::IS_CLIENT;
+  }
+
   // Returns true if a packet is ackable. A packet is unackable if it can never
   // be acked. Occurs when a packet is never sent, after it is acknowledged
   // once, or if it's a crypto packet we never expect to receive an ack for.
diff --git a/quic/core/uber_quic_stream_id_manager_test.cc b/quic/core/uber_quic_stream_id_manager_test.cc
index 291f63b..203dbb8 100644
--- a/quic/core/uber_quic_stream_id_manager_test.cc
+++ b/quic/core/uber_quic_stream_id_manager_test.cc
@@ -275,16 +275,10 @@
   EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0);
   EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
       manager_->actual_max_allowed_incoming_bidirectional_streams(),
-      /* Perspective=*/GetParam() == Perspective::IS_SERVER
-          ? Perspective::IS_CLIENT
-          : Perspective::IS_SERVER,
-      /* bidirectional=*/true)));
+      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/true)));
   EXPECT_TRUE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
       manager_->actual_max_allowed_incoming_bidirectional_streams(),
-      /* Perspective=*/GetParam() == Perspective::IS_SERVER
-          ? Perspective::IS_CLIENT
-          : Perspective::IS_SERVER,
-      /* bidirectional=*/false)));
+      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/false)));
 
   std::string error_details =
       GetParam() == Perspective::IS_SERVER
@@ -295,10 +289,7 @@
               CloseConnection(QUIC_INVALID_STREAM_ID, error_details, _));
   EXPECT_FALSE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
       manager_->actual_max_allowed_incoming_bidirectional_streams() + 1,
-      /* Perspective=*/GetParam() == Perspective::IS_SERVER
-          ? Perspective::IS_CLIENT
-          : Perspective::IS_SERVER,
-      /* bidirectional=*/true)));
+      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/true)));
   error_details = GetParam() == Perspective::IS_SERVER
                       ? "Stream id 402 would exceed stream count limit 100"
                       : "Stream id 403 would exceed stream count limit 100";
@@ -306,10 +297,7 @@
               CloseConnection(QUIC_INVALID_STREAM_ID, error_details, _));
   EXPECT_FALSE(manager_->MaybeIncreaseLargestPeerStreamId(StreamCountToId(
       manager_->actual_max_allowed_incoming_bidirectional_streams() + 1,
-      /* Perspective=*/GetParam() == Perspective::IS_SERVER
-          ? Perspective::IS_CLIENT
-          : Perspective::IS_SERVER,
-      /* bidirectional=*/false)));
+      QuicUtils::InvertPerspective(GetParam()), /* bidirectional=*/false)));
 }
 
 TEST_P(UberQuicStreamIdManagerTest, OnMaxStreamsFrame) {