Add last_alarm_type_ to track the type of alarm set in QuicIdleNetworkDetector.

PiperOrigin-RevId: 877602275
diff --git a/quiche/quic/core/quic_idle_network_detector.cc b/quiche/quic/core/quic_idle_network_detector.cc
index 27f3a50..f469089 100644
--- a/quiche/quic/core/quic_idle_network_detector.cc
+++ b/quiche/quic/core/quic_idle_network_detector.cc
@@ -6,7 +6,6 @@
 
 #include <algorithm>
 
-#include "quiche/quic/core/quic_constants.h"
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/platform/api/quic_flag_utils.h"
 #include "quiche/quic/platform/api/quic_flags.h"
@@ -58,6 +57,7 @@
   alarm_.PermanentCancel();
   handshake_timeout_ = QuicTime::Delta::Infinite();
   idle_network_timeout_ = QuicTime::Delta::Infinite();
+  last_alarm_type_ = AlarmType::kUnknown;
   stopped_ = true;
 }
 
@@ -93,8 +93,10 @@
     return;
   }
   // Set alarm to the nearer deadline.
+  AlarmType alarm_type = AlarmType::kUnknown;
   QuicTime new_deadline = QuicTime::Zero();
   if (!handshake_timeout_.IsInfinite()) {
+    alarm_type = AlarmType::kHandshakeTimeout;
     new_deadline = start_time_ + handshake_timeout_;
   }
   if (!idle_network_timeout_.IsInfinite()) {
@@ -104,8 +106,11 @@
     } else {
       new_deadline = idle_network_deadline;
     }
+    if (new_deadline == idle_network_deadline) {
+      alarm_type = AlarmType::kIdleNetworkTimeout;
+    }
   }
-  alarm_.Update(new_deadline, kAlarmGranularity);
+  UpdateAlarm(alarm_type, new_deadline);
 }
 
 void QuicIdleNetworkDetector::MaybeSetAlarmOnSentPacket(
@@ -121,7 +126,7 @@
   if (deadline > min_deadline) {
     return;
   }
-  alarm_.Update(min_deadline, kAlarmGranularity);
+  UpdateAlarm(AlarmType::kPtoDelay, min_deadline);
 }
 
 QuicTime QuicIdleNetworkDetector::GetIdleNetworkDeadline() const {
diff --git a/quiche/quic/core/quic_idle_network_detector.h b/quiche/quic/core/quic_idle_network_detector.h
index d6ea7a5..a4d17dc 100644
--- a/quiche/quic/core/quic_idle_network_detector.h
+++ b/quiche/quic/core/quic_idle_network_detector.h
@@ -5,9 +5,12 @@
 #ifndef QUICHE_QUIC_CORE_QUIC_IDLE_NETWORK_DETECTOR_H_
 #define QUICHE_QUIC_CORE_QUIC_IDLE_NETWORK_DETECTOR_H_
 
+#include <cstdint>
+
 #include "quiche/quic/core/quic_alarm.h"
 #include "quiche/quic/core/quic_alarm_factory.h"
 #include "quiche/quic/core/quic_connection_alarms.h"
+#include "quiche/quic/core/quic_constants.h"
 #include "quiche/quic/core/quic_one_block_arena.h"
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/platform/api/quic_export.h"
@@ -78,6 +81,18 @@
   friend class test::QuicConnectionPeer;
   friend class test::QuicIdleNetworkDetectorTestPeer;
 
+  enum class AlarmType : uint8_t {
+    kHandshakeTimeout,
+    kIdleNetworkTimeout,
+    kPtoDelay,
+    kUnknown,
+  };
+
+  void UpdateAlarm(AlarmType alarm_type, QuicTime deadline) {
+    last_alarm_type_ = alarm_type;
+    alarm_.Update(deadline, kAlarmGranularity);
+  }
+
   void SetAlarm();
 
   void MaybeSetAlarmOnSentPacket(QuicTime::Delta pto_delay);
@@ -108,6 +123,8 @@
 
   QuicAlarmProxy alarm_;
 
+  AlarmType last_alarm_type_ = AlarmType::kUnknown;
+
   bool shorter_idle_timeout_on_sent_packet_ = false;
 
   // Whether |StopDetection| has been called.