| Index: webrtc/video/send_statistics_proxy.cc
 | 
| diff --git a/webrtc/video/send_statistics_proxy.cc b/webrtc/video/send_statistics_proxy.cc
 | 
| index 5c2052a207868d9c6b2e5c7bd4e7edbb0a83d7e1..efd53fc043c97557349e12822f63d491330c2ebc 100644
 | 
| --- a/webrtc/video/send_statistics_proxy.cc
 | 
| +++ b/webrtc/video/send_statistics_proxy.cc
 | 
| @@ -126,6 +126,11 @@ void SendStatisticsProxy::UpdateHistograms() {
 | 
|      RTC_HISTOGRAM_COUNTS_100000(
 | 
|          "WebRTC.Video.SendSideDelayMaxInMs", max_delay_ms);
 | 
|    }
 | 
| +  for (const auto& it : qp_counters_) {
 | 
| +    int qp = it.second.vp8.Avg(kMinRequiredSamples);
 | 
| +    if (qp != -1)
 | 
| +      RTC_HISTOGRAM_COUNTS_200("WebRTC.Video.Encoded.Vp8.Qp", qp);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  void SendStatisticsProxy::OnOutgoingRate(uint32_t framerate, uint32_t bitrate) {
 | 
| @@ -243,6 +248,13 @@ void SendStatisticsProxy::OnSendEncodedImage(
 | 
|           encoded_image.adapt_reason_.bw_resolutions_disabled);
 | 
|      }
 | 
|    }
 | 
| +  if (encoded_image.qp_ != -1 && rtp_video_header != nullptr) {
 | 
| +    if (rtp_video_header->codec == kRtpVideoVp8) {
 | 
| +      qp_counters_[ssrc].vp8.Add(encoded_image.qp_);
 | 
| +      qp_filters_[ssrc].qp.Apply(1.0f, encoded_image.qp_);
 | 
| +      stats->qp = round(qp_filters_[ssrc].qp.filtered());
 | 
| +    }
 | 
| +  }
 | 
|  
 | 
|    // TODO(asapersson): This is incorrect if simulcast layers are encoded on
 | 
|    // different threads and there is no guarantee that one frame of all layers
 | 
| 
 |