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.