Always record receive timestamps even on when the invalid flag is set.

This change is based on a discussion for integrating a new statistic that
measures the delay between the first frame being received and the first frame
being decoded. To enable this in the context of FrameEncryption it makes sense
for packet receive timestamps to be unconditionally recorded.

Bug: webrtc:10105
Change-Id: I6b3b0118121db1fe5d4a4fb16cf5d94341cd2b1b
Reviewed-on: https://webrtc-review.googlesource.com/c/113487
Commit-Queue: Benjamin Wright <benwright@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25931}
diff --git a/modules/video_coding/frame_object.cc b/modules/video_coding/frame_object.cc
index 925f1a1..46511ce 100644
--- a/modules/video_coding/frame_object.cc
+++ b/modules/video_coding/frame_object.cc
@@ -99,11 +99,10 @@
     timing_.network2_timestamp_ms =
         ntp_time_ms_ +
         last_packet->video_header.video_timing.network2_timestamp_delta_ms;
-
-    timing_.receive_start_ms = first_packet->receive_time_ms;
-    timing_.receive_finish_ms = last_packet->receive_time_ms;
   }
   timing_.flags = last_packet->video_header.video_timing.flags;
+  timing_.receive_start_ms = first_packet->receive_time_ms;
+  timing_.receive_finish_ms = last_packet->receive_time_ms;
   is_last_spatial_layer = last_packet->markerBit;
 }
 
diff --git a/modules/video_coding/generic_decoder.cc b/modules/video_coding/generic_decoder.cc
index 5ee8d4e..dee28ae 100644
--- a/modules/video_coding/generic_decoder.cc
+++ b/modules/video_coding/generic_decoder.cc
@@ -91,6 +91,7 @@
                            frameInfo->renderTimeMs);
 
   // Report timing information.
+  TimingFrameInfo timing_frame_info;
   if (frameInfo->timing.flags != VideoSendTiming::kInvalid) {
     int64_t capture_time_ms = decodedImage.ntp_time_ms() - ntp_offset_;
     // Convert remote timestamps to local time from ntp timestamps.
@@ -115,7 +116,6 @@
           1;
     }
 
-    TimingFrameInfo timing_frame_info;
 
     timing_frame_info.capture_time_ms = capture_time_ms - sender_delta_ms;
     timing_frame_info.encode_start_ms =
@@ -130,17 +130,17 @@
         frameInfo->timing.network_timestamp_ms - sender_delta_ms;
     timing_frame_info.network2_timestamp_ms =
         frameInfo->timing.network2_timestamp_ms - sender_delta_ms;
-    timing_frame_info.receive_start_ms = frameInfo->timing.receive_start_ms;
-    timing_frame_info.receive_finish_ms = frameInfo->timing.receive_finish_ms;
-    timing_frame_info.decode_start_ms = frameInfo->decodeStartTimeMs;
-    timing_frame_info.decode_finish_ms = now_ms;
-    timing_frame_info.render_time_ms = frameInfo->renderTimeMs;
-    timing_frame_info.rtp_timestamp = decodedImage.timestamp();
-    timing_frame_info.flags = frameInfo->timing.flags;
-
-    _timing->SetTimingFrameInfo(timing_frame_info);
   }
 
+  timing_frame_info.flags = frameInfo->timing.flags;
+  timing_frame_info.decode_start_ms = frameInfo->decodeStartTimeMs;
+  timing_frame_info.decode_finish_ms = now_ms;
+  timing_frame_info.render_time_ms = frameInfo->renderTimeMs;
+  timing_frame_info.rtp_timestamp = decodedImage.timestamp();
+  timing_frame_info.receive_start_ms = frameInfo->timing.receive_start_ms;
+  timing_frame_info.receive_finish_ms = frameInfo->timing.receive_finish_ms;
+  _timing->SetTimingFrameInfo(timing_frame_info);
+
   decodedImage.set_timestamp_us(frameInfo->renderTimeMs *
                                 rtc::kNumMicrosecsPerMillisec);
   decodedImage.set_rotation(frameInfo->rotation);
diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc
index e20b7d2..8d39887 100644
--- a/video/receive_statistics_proxy.cc
+++ b/video/receive_statistics_proxy.cc
@@ -638,8 +638,10 @@
 void ReceiveStatisticsProxy::OnTimingFrameInfoUpdated(
     const TimingFrameInfo& info) {
   rtc::CritScope lock(&crit_);
-  int64_t now_ms = clock_->TimeInMilliseconds();
-  timing_frame_info_counter_.Add(info, now_ms);
+  if (info.flags != VideoSendTiming::kInvalid) {
+    int64_t now_ms = clock_->TimeInMilliseconds();
+    timing_frame_info_counter_.Add(info, now_ms);
+  }
 }
 
 void ReceiveStatisticsProxy::RtcpPacketTypesCounterUpdated(