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) {
