measure decode time in TimeDelta instead of ms
increasing precision since summing up rounded values leads to
a rounding error, in particular for small frames which take very
little time to decode.
BUG=webrtc:12526,webrtc:13756
Change-Id: I647c702808856a002c746ed9f115aa9bcaddc1f3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/262810
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Cr-Commit-Position: refs/heads/main@{#37249}
diff --git a/video/receive_statistics_proxy2.cc b/video/receive_statistics_proxy2.cc
index 0f816bb..286ef62 100644
--- a/video/receive_statistics_proxy2.cc
+++ b/video/receive_statistics_proxy2.cc
@@ -828,7 +828,7 @@
void ReceiveStatisticsProxy::OnDecodedFrame(const VideoFrame& frame,
absl::optional<uint8_t> qp,
- int32_t decode_time_ms,
+ TimeDelta decode_time,
VideoContentType content_type) {
webrtc::TimeDelta processing_delay = webrtc::TimeDelta::Millis(0);
webrtc::Timestamp current_time = clock_->CurrentTime();
@@ -853,17 +853,17 @@
// "com.apple.coremedia.decompressionsession.clientcallback"
VideoFrameMetaData meta(frame, current_time);
worker_thread_->PostTask(
- ToQueuedTask(task_safety_, [meta, qp, decode_time_ms, processing_delay,
+ ToQueuedTask(task_safety_, [meta, qp, decode_time, processing_delay,
assembly_time, content_type, this]() {
- OnDecodedFrame(meta, qp, decode_time_ms, processing_delay,
- assembly_time, content_type);
+ OnDecodedFrame(meta, qp, decode_time, processing_delay, assembly_time,
+ content_type);
}));
}
void ReceiveStatisticsProxy::OnDecodedFrame(
const VideoFrameMetaData& frame_meta,
absl::optional<uint8_t> qp,
- int32_t decode_time_ms,
+ TimeDelta decode_time,
webrtc::TimeDelta processing_delay,
webrtc::TimeDelta assembly_time,
VideoContentType content_type) {
@@ -903,9 +903,9 @@
<< "QP sum was already set and no QP was given for a frame.";
stats_.qp_sum.reset();
}
- decode_time_counter_.Add(decode_time_ms);
- stats_.decode_ms = decode_time_ms;
- stats_.total_decode_time_ms += decode_time_ms;
+ decode_time_counter_.Add(decode_time.ms());
+ stats_.decode_ms = decode_time.ms();
+ stats_.total_decode_time += decode_time;
stats_.total_processing_delay += processing_delay;
stats_.total_assembly_time += assembly_time;
if (!assembly_time.IsZero()) {
@@ -913,7 +913,7 @@
}
if (enable_decode_time_histograms_) {
UpdateDecodeTimeHistograms(frame_meta.width, frame_meta.height,
- decode_time_ms);
+ decode_time.ms());
}
last_content_type_ = content_type;