| Index: webrtc/video/receive_statistics_proxy.cc
 | 
| diff --git a/webrtc/video/receive_statistics_proxy.cc b/webrtc/video/receive_statistics_proxy.cc
 | 
| index 2ed2faeb3754c344f670c355e0e0505eac4e5e3a..e40a7efd16b0103b8410c595ea30b6b9291579ea 100644
 | 
| --- a/webrtc/video/receive_statistics_proxy.cc
 | 
| +++ b/webrtc/video/receive_statistics_proxy.cc
 | 
| @@ -74,9 +74,12 @@
 | 
|        render_fps_tracker_(100, 10u),
 | 
|        render_pixel_tracker_(100, 10u),
 | 
|        total_byte_tracker_(100, 10u),  // bucket_interval_ms, bucket_count
 | 
| +      e2e_delay_max_ms_video_(-1),
 | 
| +      e2e_delay_max_ms_screenshare_(-1),
 | 
|        freq_offset_counter_(clock, nullptr, kFreqOffsetProcessIntervalMs),
 | 
|        first_report_block_time_ms_(-1),
 | 
| -      avg_rtt_ms_(0) {
 | 
| +      avg_rtt_ms_(0),
 | 
| +      last_content_type_(VideoContentType::UNSPECIFIED) {
 | 
|    stats_.ssrc = config_.rtp.remote_ssrc;
 | 
|    // TODO(brandtr): Replace |rtx_stats_| with a single instance of
 | 
|    // StreamDataCounters.
 | 
| @@ -169,9 +172,30 @@
 | 
|    if (delay_ms != -1)
 | 
|      RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.OnewayDelayInMs", delay_ms);
 | 
|  
 | 
| -  int e2e_delay_ms = e2e_delay_counter_.Avg(kMinRequiredSamples);
 | 
| -  if (e2e_delay_ms != -1)
 | 
| -    RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.EndToEndDelayInMs", e2e_delay_ms);
 | 
| +  int e2e_delay_ms_video = e2e_delay_counter_video_.Avg(kMinRequiredSamples);
 | 
| +  if (e2e_delay_ms_video != -1) {
 | 
| +    RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.EndToEndDelayInMs",
 | 
| +                               e2e_delay_ms_video);
 | 
| +  }
 | 
| +
 | 
| +  int e2e_delay_ms_screenshare =
 | 
| +      e2e_delay_counter_screenshare_.Avg(kMinRequiredSamples);
 | 
| +  if (e2e_delay_ms_screenshare != -1) {
 | 
| +    RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.Screenshare.EndToEndDelayInMs",
 | 
| +                               e2e_delay_ms_screenshare);
 | 
| +  }
 | 
| +
 | 
| +  int e2e_delay_max_ms_video = e2e_delay_max_ms_video_;
 | 
| +  if (e2e_delay_max_ms_video != -1) {
 | 
| +    RTC_HISTOGRAM_COUNTS_100000("WebRTC.Video.EndToEndDelayMaxInMs",
 | 
| +                                e2e_delay_max_ms_video);
 | 
| +  }
 | 
| +
 | 
| +  int e2e_delay_max_ms_screenshare = e2e_delay_max_ms_screenshare_;
 | 
| +  if (e2e_delay_max_ms_screenshare != -1) {
 | 
| +    RTC_HISTOGRAM_COUNTS_100000("WebRTC.Video.Screenshare.EndToEndDelayMaxInMs",
 | 
| +                                e2e_delay_max_ms_screenshare);
 | 
| +  }
 | 
|  
 | 
|    StreamDataCounters rtp = stats_.rtp_stats;
 | 
|    StreamDataCounters rtx;
 | 
| @@ -431,7 +455,8 @@
 | 
|      total_byte_tracker_.AddSamples(total_bytes - last_total_bytes);
 | 
|  }
 | 
|  
 | 
| -void ReceiveStatisticsProxy::OnDecodedFrame(rtc::Optional<uint8_t> qp) {
 | 
| +void ReceiveStatisticsProxy::OnDecodedFrame(rtc::Optional<uint8_t> qp,
 | 
| +                                            VideoContentType content_type) {
 | 
|    uint64_t now = clock_->TimeInMilliseconds();
 | 
|  
 | 
|    rtc::CritScope lock(&crit_);
 | 
| @@ -451,6 +476,7 @@
 | 
|          << "QP sum was already set and no QP was given for a frame.";
 | 
|      stats_.qp_sum = rtc::Optional<uint64_t>();
 | 
|    }
 | 
| +  last_content_type_ = content_type;
 | 
|    decode_fps_estimator_.Update(1, now);
 | 
|    stats_.decode_frame_rate = decode_fps_estimator_.Rate(now).value_or(0);
 | 
|  }
 | 
| @@ -475,8 +501,16 @@
 | 
|  
 | 
|    if (frame.ntp_time_ms() > 0) {
 | 
|      int64_t delay_ms = clock_->CurrentNtpInMilliseconds() - frame.ntp_time_ms();
 | 
| -    if (delay_ms >= 0)
 | 
| -      e2e_delay_counter_.Add(delay_ms);
 | 
| +    if (delay_ms >= 0) {
 | 
| +      if (last_content_type_ == VideoContentType::SCREENSHARE) {
 | 
| +        e2e_delay_max_ms_screenshare_ =
 | 
| +            std::max(delay_ms, e2e_delay_max_ms_screenshare_);
 | 
| +        e2e_delay_counter_screenshare_.Add(delay_ms);
 | 
| +      } else {
 | 
| +        e2e_delay_max_ms_video_ = std::max(delay_ms, e2e_delay_max_ms_video_);
 | 
| +        e2e_delay_counter_video_.Add(delay_ms);
 | 
| +      }
 | 
| +    }
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |