diff --git a/api/rtp_parameters.h b/api/rtp_parameters.h
index 09eebca..b84bb79 100644
--- a/api/rtp_parameters.h
+++ b/api/rtp_parameters.h
@@ -60,18 +60,24 @@
 };
 
 // Used in RtcpFeedback struct.
+// Also used as an UMA key.
 enum class RtcpFeedbackType {
+  NONE,
   CCM,
   LNTF,  // "goog-lntf"
   NACK,
   REMB,  // "goog-remb"
   TRANSPORT_CC,
   CCFB,  // RFC8888
+  MAX = CCFB
 };
 
 template <typename Sink>
 void AbslStringify(Sink& sink, RtcpFeedbackType type) {
   switch (type) {
+    case RtcpFeedbackType::NONE:
+      sink.Append("NONE");
+      break;
     case RtcpFeedbackType::CCM:
       sink.Append("CCM");
       break;
diff --git a/pc/congestion_control_integrationtest.cc b/pc/congestion_control_integrationtest.cc
index 4eea57b..b712b6b 100644
--- a/pc/congestion_control_integrationtest.cc
+++ b/pc/congestion_control_integrationtest.cc
@@ -24,6 +24,7 @@
 #include "api/test/rtc_error_matchers.h"
 #include "pc/session_description.h"
 #include "pc/test/integration_test_helpers.h"
+#include "system_wrappers/include/metrics.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/wait_until.h"
@@ -360,6 +361,7 @@
 
 TEST_F(PeerConnectionCongestionControlTest, CcfbGetsUsedWithPrAnswer) {
   SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Enabled,offer:true/");
+  metrics::Reset();
   ASSERT_TRUE(CreatePeerConnectionWrappers());
   ConnectFakeSignaling();
   caller()->AddAudioVideoTracks();
@@ -390,10 +392,23 @@
   // There should be no transport-cc generated.
   EXPECT_THAT(pc_internal->FeedbackAccordingToTransportCcCountForTesting(),
               Eq(0));
+  // Note that metrics are picked up from both PCs, so the number
+  // of metric counts is 2.
+  EXPECT_METRIC_EQ(
+      metrics::NumSamples("WebRTC.PeerConnection.NegotiatedFeedbackType"), 2);
+  EXPECT_METRIC_EQ(
+      metrics::NumEvents("WebRTC.PeerConnection.NegotiatedFeedbackType",
+                         static_cast<int>(RtcpFeedbackType::CCFB)),
+      2);
+  EXPECT_METRIC_EQ(
+      metrics::NumEvents("WebRTC.PeerConnection.NegotiatedFeedbackType",
+                         static_cast<int>(RtcpFeedbackType::TRANSPORT_CC)),
+      0);
 }
 
 TEST_F(PeerConnectionCongestionControlTest, TransportCcGetsUsed) {
   SetFieldTrials("WebRTC-RFC8888CongestionControlFeedback/Disabled/");
+  metrics::Reset();
   ASSERT_TRUE(CreatePeerConnectionWrappers());
   ConnectFakeSignaling();
   caller()->AddAudioVideoTracks();
@@ -414,6 +429,18 @@
       IsRtcOk());
   // Test that RFC 8888 feedback is NOT generated when field trial disabled.
   EXPECT_THAT(pc_internal->FeedbackAccordingToRfc8888CountForTesting(), Eq(0));
+  // Note that metrics are picked up from both PCs, so the number
+  // of metric counts is 2.
+  EXPECT_METRIC_EQ(
+      metrics::NumSamples("WebRTC.PeerConnection.NegotiatedFeedbackType"), 2);
+  EXPECT_METRIC_EQ(
+      metrics::NumEvents("WebRTC.PeerConnection.NegotiatedFeedbackType",
+                         static_cast<int>(RtcpFeedbackType::CCFB)),
+      0);
+  EXPECT_METRIC_EQ(
+      metrics::NumEvents("WebRTC.PeerConnection.NegotiatedFeedbackType",
+                         static_cast<int>(RtcpFeedbackType::TRANSPORT_CC)),
+      2);
 }
 
 TEST_F(PeerConnectionCongestionControlTest,
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index 7b52fdb..e0efa95 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -2096,23 +2096,49 @@
   }
   bool negotiated_sctp_snap = false;
   const SessionDescription* desc = nullptr;
-  if (local_description()->GetType() == SdpType::kAnswer) {
+  if (local_description()->GetType() == SdpType::kAnswer ||
+      local_description()->GetType() == SdpType::kPrAnswer) {
     desc = local_description()->description();
-  } else if (remote_description()->GetType() == SdpType::kAnswer) {
+  } else if (remote_description()->GetType() == SdpType::kAnswer ||
+             remote_description()->GetType() == SdpType::kPrAnswer) {
     desc = remote_description()->description();
   }
-  if (desc) {
-    const ContentInfo* sctp_content = GetFirstDataContent(desc);
-    if (sctp_content && !sctp_content->rejected) {
-      const SctpDataContentDescription* sctp_desc =
-          sctp_content->media_description()->as_sctp();
-      if (sctp_desc) {
-        negotiated_sctp_snap |= sctp_desc->sctp_init().has_value();
-      }
+  if (!desc) {
+    RTC_LOG(LS_INFO) << "Connection established without an answer, local="
+                     << local_description()->GetType()
+                     << ", remote=" << remote_description()->GetType();
+    return;
+  }
+  // Below this point, we assume that we have an answer in `desc`
+  const ContentInfo* sctp_content = GetFirstDataContent(desc);
+  if (sctp_content && !sctp_content->rejected) {
+    const SctpDataContentDescription* sctp_desc =
+        sctp_content->media_description()->as_sctp();
+    if (sctp_desc) {
+      negotiated_sctp_snap |= sctp_desc->sctp_init().has_value();
     }
   }
   RTC_HISTOGRAM_BOOLEAN("WebRTC.PeerConnection.NegotiatedSctpSnap",
                         negotiated_sctp_snap);
+  // Record congestion control mechanism in use, if any.
+  // The information is taken from the last seen Answer SDP.
+  std::optional<RtcpFeedbackType> feedback_type;
+  for (const auto& content : desc->contents()) {
+    std::optional<RtcpFeedbackType> this_feedback_type =
+        content.media_description()->preferred_rtcp_cc_ack_type();
+    if (this_feedback_type) {
+      feedback_type = this_feedback_type;
+      break;
+    }
+  }
+  if (!feedback_type) {
+    feedback_type = RtcpFeedbackType::NONE;
+  }
+  // Note that NONE will be reported for datachannel-only calls.
+  // Only TRANSPORT_CC and CCFB are currently reported.
+  RTC_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.NegotiatedFeedbackType",
+                            static_cast<int>(*feedback_type),
+                            static_cast<int>(RtcpFeedbackType::MAX));
 }
 
 void PeerConnection::ReportCloseUsageMetrics() {
