Surface receive_timestamp to QuicStream::OnStreamFrameAcked.
In order to surface to the application when a message (video frame in our case)
is received on the client--for logging and for online phase adjustment.
gfe-relnote: n/a (noop change)
PiperOrigin-RevId: 295743926
Change-Id: Icff772ef85cd7de4c4b758850456701c72b07897
diff --git a/quic/core/http/quic_headers_stream.cc b/quic/core/http/quic_headers_stream.cc
index 1bac2b7..1e7feb3 100644
--- a/quic/core/http/quic_headers_stream.cc
+++ b/quic/core/http/quic_headers_stream.cc
@@ -60,6 +60,7 @@
QuicByteCount data_length,
bool fin_acked,
QuicTime::Delta ack_delay_time,
+ QuicTime receive_timestamp,
QuicByteCount* newly_acked_length) {
QuicIntervalSet<QuicStreamOffset> newly_acked(offset, offset + data_length);
newly_acked.Difference(bytes_acked());
@@ -104,7 +105,8 @@
unacked_headers_.pop_front();
}
return QuicStream::OnStreamFrameAcked(offset, data_length, fin_acked,
- ack_delay_time, newly_acked_length);
+ ack_delay_time, receive_timestamp,
+ newly_acked_length);
}
void QuicHeadersStream::OnStreamFrameRetransmitted(QuicStreamOffset offset,
diff --git a/quic/core/http/quic_headers_stream.h b/quic/core/http/quic_headers_stream.h
index c54ce95..e97a78d 100644
--- a/quic/core/http/quic_headers_stream.h
+++ b/quic/core/http/quic_headers_stream.h
@@ -43,6 +43,7 @@
QuicByteCount data_length,
bool fin_acked,
QuicTime::Delta ack_delay_time,
+ QuicTime receive_timestamp,
QuicByteCount* newly_acked_length) override;
void OnStreamFrameRetransmitted(QuicStreamOffset offset,
diff --git a/quic/core/http/quic_headers_stream_test.cc b/quic/core/http/quic_headers_stream_test.cc
index aef31b1..68bbadf 100644
--- a/quic/core/http/quic_headers_stream_test.cc
+++ b/quic/core/http/quic_headers_stream_test.cc
@@ -863,29 +863,35 @@
EXPECT_CALL(*ack_listener3, OnPacketAcked(7, _));
EXPECT_CALL(*ack_listener2, OnPacketAcked(7, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 21, 7, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 21, 7, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(7u, newly_acked_length);
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 28, 7, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 28, 7, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(7u, newly_acked_length);
EXPECT_CALL(*ack_listener3, OnPacketAcked(7, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 35, 7, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 35, 7, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(7u, newly_acked_length);
EXPECT_CALL(*ack_listener1, OnPacketAcked(7, _));
EXPECT_CALL(*ack_listener1, OnPacketAcked(7, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 0, 7, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 0, 7, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(7u, newly_acked_length);
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 7, 7, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 7, 7, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(7u, newly_acked_length);
// Unsent data is acked.
EXPECT_CALL(*ack_listener2, OnPacketAcked(7, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 14, 10, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 14, 10, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(7u, newly_acked_length);
}
@@ -922,19 +928,22 @@
EXPECT_CALL(*ack_listener3, OnPacketAcked(7, _));
EXPECT_CALL(*ack_listener2, OnPacketAcked(2, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 17, 13, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 17, 13, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(13u, newly_acked_length);
EXPECT_CALL(*ack_listener2, OnPacketAcked(5, _));
EXPECT_CALL(*ack_listener3, OnPacketAcked(7, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 30, 12, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 30, 12, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(12u, newly_acked_length);
EXPECT_CALL(*ack_listener1, OnPacketAcked(14, _));
EXPECT_CALL(*ack_listener2, OnPacketAcked(3, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 0, 17, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 0, 17, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(17u, newly_acked_length);
}
@@ -964,7 +973,8 @@
QuicByteCount newly_acked_length = 0;
EXPECT_CALL(*ack_listener2, OnPacketAcked(5, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 15, 5, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 15, 5, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(5u, newly_acked_length);
EXPECT_CALL(*ack_listener1, OnPacketAcked(9, _));
@@ -972,24 +982,28 @@
EXPECT_CALL(*ack_listener2, OnPacketAcked(1, _));
EXPECT_CALL(*ack_listener3, OnPacketAcked(4, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 5, 20, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 5, 20, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(15u, newly_acked_length);
// Duplicate ack.
EXPECT_FALSE(headers_stream_->OnStreamFrameAcked(
- 10, 7, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 10, 7, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(0u, newly_acked_length);
EXPECT_CALL(*ack_listener1, OnPacketAcked(5, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 0, 12, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 0, 12, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(5u, newly_acked_length);
EXPECT_CALL(*ack_listener3, OnPacketAcked(3, _));
EXPECT_CALL(*ack_listener2, OnPacketAcked(7, _));
EXPECT_CALL(*ack_listener3, OnPacketAcked(7, _));
EXPECT_TRUE(headers_stream_->OnStreamFrameAcked(
- 22, 20, false, QuicTime::Delta::Zero(), &newly_acked_length));
+ 22, 20, false, QuicTime::Delta::Zero(), QuicTime::Zero(),
+ &newly_acked_length));
EXPECT_EQ(17u, newly_acked_length);
}
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 8625dae..67cc6b4 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -881,9 +881,11 @@
QuicByteCount data_length,
bool fin_acked,
QuicTime::Delta ack_delay_time,
+ QuicTime receive_timestamp,
QuicByteCount* newly_acked_length) {
const bool new_data_acked = QuicStream::OnStreamFrameAcked(
- offset, data_length, fin_acked, ack_delay_time, newly_acked_length);
+ offset, data_length, fin_acked, ack_delay_time, receive_timestamp,
+ newly_acked_length);
const QuicByteCount newly_acked_header_length =
GetNumFrameHeadersInInterval(offset, data_length);
diff --git a/quic/core/http/quic_spdy_stream.h b/quic/core/http/quic_spdy_stream.h
index 923ff7c..e231a35 100644
--- a/quic/core/http/quic_spdy_stream.h
+++ b/quic/core/http/quic_spdy_stream.h
@@ -140,6 +140,7 @@
QuicByteCount data_length,
bool fin_acked,
QuicTime::Delta ack_delay_time,
+ QuicTime receive_timestamp,
QuicByteCount* newly_acked_length) override;
// Override to report bytes retransmitted via ack_listener_.
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index aae249c..e68091d 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -1646,6 +1646,7 @@
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(9, _));
QuicByteCount newly_acked_length = 0;
EXPECT_TRUE(stream_->OnStreamFrameAcked(0, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
// Stream is not waiting for acks as all sent data is acked.
EXPECT_FALSE(stream_->IsWaitingForAcks());
@@ -1667,6 +1668,7 @@
// kData2 is acked.
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(9, _));
EXPECT_TRUE(stream_->OnStreamFrameAcked(9, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
// Stream is waiting for acks as FIN is not acked.
EXPECT_TRUE(stream_->IsWaitingForAcks());
@@ -1675,6 +1677,7 @@
// FIN is acked.
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(0, _));
EXPECT_TRUE(stream_->OnStreamFrameAcked(18, 0, true, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_FALSE(stream_->IsWaitingForAcks());
EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
@@ -1696,16 +1699,19 @@
QuicByteCount newly_acked_length = 0;
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(9, _));
EXPECT_TRUE(stream_->OnStreamFrameAcked(0, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(2u, QuicStreamPeer::SendBuffer(stream_).size());
// Verify [9, 22) 13 bytes are acked.
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(13, _));
EXPECT_TRUE(stream_->OnStreamFrameAcked(5, 17, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
// Verify [22, 26) 4 bytes are acked.
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(4, _));
EXPECT_TRUE(stream_->OnStreamFrameAcked(18, 8, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
EXPECT_TRUE(stream_->IsWaitingForAcks());
@@ -1714,6 +1720,7 @@
// Verify [26, 27) 1 byte is acked.
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(1, _));
EXPECT_TRUE(stream_->OnStreamFrameAcked(26, 1, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
EXPECT_TRUE(stream_->IsWaitingForAcks());
@@ -1721,6 +1728,7 @@
// Ack Fin. Verify OnPacketAcked is called.
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(0, _));
EXPECT_TRUE(stream_->OnStreamFrameAcked(27, 0, true, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
EXPECT_FALSE(stream_->IsWaitingForAcks());
@@ -1728,8 +1736,9 @@
// Ack [10, 27) and fin.
// No new data is acked, verify OnPacketAcked is not called.
EXPECT_CALL(*mock_ack_listener, OnPacketAcked(_, _)).Times(0);
- EXPECT_FALSE(stream_->OnStreamFrameAcked(
- 10, 17, true, QuicTime::Delta::Zero(), &newly_acked_length));
+ EXPECT_FALSE(
+ stream_->OnStreamFrameAcked(10, 17, true, QuicTime::Delta::Zero(),
+ QuicTime::Zero(), &newly_acked_length));
EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
EXPECT_FALSE(stream_->IsWaitingForAcks());
}
diff --git a/quic/core/quic_crypto_stream_test.cc b/quic/core/quic_crypto_stream_test.cc
index 1e1967c..fd61522 100644
--- a/quic/core/quic_crypto_stream_test.cc
+++ b/quic/core/quic_crypto_stream_test.cc
@@ -374,7 +374,7 @@
// Ack [2000, 2500).
QuicByteCount newly_acked_length = 0;
stream_->OnStreamFrameAcked(2000, 500, false, QuicTime::Delta::Zero(),
- &newly_acked_length);
+ QuicTime::Zero(), &newly_acked_length);
EXPECT_EQ(500u, newly_acked_length);
// Force crypto stream to send [1350, 2700) and only [1350, 1500) is consumed.
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 7d8bc54..108060b 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -1883,7 +1883,8 @@
QuicByteCount newly_acked_length = 0;
new_stream_data_acked = stream->OnStreamFrameAcked(
frame.stream_frame.offset, frame.stream_frame.data_length,
- frame.stream_frame.fin, ack_delay_time, &newly_acked_length);
+ frame.stream_frame.fin, ack_delay_time, receive_timestamp,
+ &newly_acked_length);
if (!stream->HasPendingRetransmission()) {
streams_with_pending_retransmission_.erase(stream->id());
}
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index a59bfe5..fee630b 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -857,6 +857,7 @@
QuicByteCount data_length,
bool fin_acked,
QuicTime::Delta /*ack_delay_time*/,
+ QuicTime /*receive_timestamp*/,
QuicByteCount* newly_acked_length) {
QUIC_DVLOG(1) << ENDPOINT << "stream " << id_ << " Acking "
<< "[" << offset << ", " << offset + data_length << "]"
diff --git a/quic/core/quic_stream.h b/quic/core/quic_stream.h
index 4f13e7f..57bfede 100644
--- a/quic/core/quic_stream.h
+++ b/quic/core/quic_stream.h
@@ -297,6 +297,7 @@
QuicByteCount data_length,
bool fin_acked,
QuicTime::Delta ack_delay_time,
+ QuicTime receive_timestamp,
QuicByteCount* newly_acked_length);
// Called when data [offset, offset + data_length) was retransmitted.
diff --git a/quic/core/quic_stream_test.cc b/quic/core/quic_stream_test.cc
index 31fd411..0dad1aa 100644
--- a/quic/core/quic_stream_test.cc
+++ b/quic/core/quic_stream_test.cc
@@ -819,6 +819,7 @@
EXPECT_TRUE(stream_->IsWaitingForAcks());
QuicByteCount newly_acked_length = 0;
EXPECT_TRUE(stream_->OnStreamFrameAcked(0, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(9u, newly_acked_length);
// Stream is not waiting for acks as all sent data is acked.
@@ -841,6 +842,7 @@
// kData2 is acked.
EXPECT_TRUE(stream_->OnStreamFrameAcked(9, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(9u, newly_acked_length);
// Stream is waiting for acks as FIN is not acked.
@@ -850,6 +852,7 @@
// FIN is acked.
EXPECT_TRUE(stream_->OnStreamFrameAcked(18, 0, true, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(0u, newly_acked_length);
EXPECT_FALSE(stream_->IsWaitingForAcks());
@@ -871,16 +874,19 @@
EXPECT_TRUE(session_->HasUnackedStreamData());
QuicByteCount newly_acked_length = 0;
EXPECT_TRUE(stream_->OnStreamFrameAcked(9, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_TRUE(session_->HasUnackedStreamData());
EXPECT_EQ(9u, newly_acked_length);
EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
EXPECT_TRUE(stream_->OnStreamFrameAcked(18, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_TRUE(session_->HasUnackedStreamData());
EXPECT_EQ(9u, newly_acked_length);
EXPECT_EQ(3u, QuicStreamPeer::SendBuffer(stream_).size());
EXPECT_TRUE(stream_->OnStreamFrameAcked(0, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_TRUE(session_->HasUnackedStreamData());
EXPECT_EQ(9u, newly_acked_length);
@@ -889,6 +895,7 @@
EXPECT_TRUE(stream_->IsWaitingForAcks());
EXPECT_TRUE(session_->HasUnackedStreamData());
EXPECT_TRUE(stream_->OnStreamFrameAcked(27, 0, true, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(0u, newly_acked_length);
EXPECT_FALSE(stream_->IsWaitingForAcks());
@@ -1257,16 +1264,19 @@
// Verify [0, 9) 9 bytes are acked.
QuicByteCount newly_acked_length = 0;
EXPECT_TRUE(stream_->OnStreamFrameAcked(0, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(9u, newly_acked_length);
EXPECT_EQ(2u, QuicStreamPeer::SendBuffer(stream_).size());
// Verify [9, 22) 13 bytes are acked.
EXPECT_TRUE(stream_->OnStreamFrameAcked(5, 17, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(13u, newly_acked_length);
EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
// Verify [22, 26) 4 bytes are acked.
EXPECT_TRUE(stream_->OnStreamFrameAcked(18, 8, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(4u, newly_acked_length);
EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
@@ -1275,6 +1285,7 @@
// Ack [0, 27). Verify [26, 27) 1 byte is acked.
EXPECT_TRUE(stream_->OnStreamFrameAcked(26, 1, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(1u, newly_acked_length);
EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
@@ -1283,6 +1294,7 @@
// Ack Fin.
EXPECT_TRUE(stream_->OnStreamFrameAcked(27, 0, true, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(0u, newly_acked_length);
EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
@@ -1290,8 +1302,9 @@
EXPECT_FALSE(session_->HasUnackedStreamData());
// Ack [10, 27) and fin. No new data is acked.
- EXPECT_FALSE(stream_->OnStreamFrameAcked(
- 10, 17, true, QuicTime::Delta::Zero(), &newly_acked_length));
+ EXPECT_FALSE(
+ stream_->OnStreamFrameAcked(10, 17, true, QuicTime::Delta::Zero(),
+ QuicTime::Zero(), &newly_acked_length));
EXPECT_EQ(0u, newly_acked_length);
EXPECT_EQ(0u, QuicStreamPeer::SendBuffer(stream_).size());
EXPECT_FALSE(stream_->IsWaitingForAcks());
@@ -1346,6 +1359,7 @@
// Ack [9, 18).
QuicByteCount newly_acked_length = 0;
EXPECT_TRUE(stream_->OnStreamFrameAcked(9, 9, false, QuicTime::Delta::Zero(),
+ QuicTime::Zero(),
&newly_acked_length));
EXPECT_EQ(9u, newly_acked_length);
EXPECT_FALSE(stream_->IsStreamFrameOutstanding(9, 3, false));
@@ -1468,7 +1482,7 @@
// Ack [10, 13).
QuicByteCount newly_acked_length = 0;
stream_->OnStreamFrameAcked(10, 3, false, QuicTime::Delta::Zero(),
- &newly_acked_length);
+ QuicTime::Zero(), &newly_acked_length);
EXPECT_EQ(3u, newly_acked_length);
// Retransmit [0, 18) with fin, and only [0, 8) is consumed.
EXPECT_CALL(*session_, WritevData(_, stream_->id(), 10, 0, NO_FIN))