Remove usage of RateTracker in ReceiveStatisticsProxy

To reduce usage of global time functions: RateTracker relies on global clock, replacement code uses injected clock.

This usage of RateTracker queries only total rate which doesn't need
bucketing feature of RateTracker and can be implemented with a simple counter.

Bug: webrtc:42223992
Change-Id: I9fee8bbf68be6edde400d147d675ccb8979e01d8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/406581
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45453}
diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc
index 84b00b7..bce7093 100644
--- a/video/receive_statistics_proxy.cc
+++ b/video/receive_statistics_proxy.cc
@@ -95,8 +95,8 @@
       // 1000ms window, scale 1000 for ms to s.
       decode_fps_estimator_(1000, 1000),
       renders_fps_estimator_(1000, 1000),
-      render_fps_tracker_(100, 10u),
-      render_pixel_tracker_(100, 10u),
+      first_frame_rendered_(Timestamp::MinusInfinity()),
+      total_render_sqrt_pixels_(0),
       video_quality_observer_(new VideoQualityObserver()),
       interframe_delay_max_moving_(kMovingMaxWindowMs),
       freq_offset_counter_(clock, nullptr, kFreqOffsetProcessIntervalMs),
@@ -124,7 +124,8 @@
   char log_stream_buf[8 * 1024];
   SimpleStringBuilder log_stream(log_stream_buf);
 
-  TimeDelta stream_duration = clock_->CurrentTime() - start_;
+  Timestamp now = clock_->CurrentTime();
+  TimeDelta stream_duration = now - start_;
 
   if (stats_.frame_counts.key_frames > 0 ||
       stats_.frame_counts.delta_frames > 0) {
@@ -178,15 +179,16 @@
   }
 
   const int kMinRequiredSamples = 200;
-  int samples = static_cast<int>(render_fps_tracker_.TotalSampleCount());
-  if (samples >= kMinRequiredSamples) {
-    int rendered_fps = round(render_fps_tracker_.ComputeTotalRate());
+  TimeDelta render_duration = now - first_frame_rendered_;
+  if (stats_.frames_rendered >= kMinRequiredSamples &&
+      render_duration > TimeDelta::Zero()) {
+    int rendered_fps = (stats_.frames_rendered / render_duration).hertz();
     RTC_HISTOGRAM_COUNTS_100("WebRTC.Video.RenderFramesPerSecond",
                              rendered_fps);
     log_stream << "WebRTC.Video.RenderFramesPerSecond " << rendered_fps << '\n';
     RTC_HISTOGRAM_COUNTS_100000(
         "WebRTC.Video.RenderSqrtPixelsPerSecond",
-        round(render_pixel_tracker_.ComputeTotalRate()));
+        (total_render_sqrt_pixels_ / render_duration).hertz());
   }
 
   std::optional<int> sync_offset_ms =
@@ -734,12 +736,13 @@
       &content_specific_stats_[last_content_type_];
   renders_fps_estimator_.Update(1, frame_meta.decode_timestamp.ms());
 
+  if (stats_.frames_rendered == 0) {
+    first_frame_rendered_ = clock_->CurrentTime();
+  }
   ++stats_.frames_rendered;
   stats_.width = frame_meta.width;
   stats_.height = frame_meta.height;
-
-  render_fps_tracker_.AddSamples(1);
-  render_pixel_tracker_.AddSamples(sqrt(frame_meta.width * frame_meta.height));
+  total_render_sqrt_pixels_ += sqrt(frame_meta.width * frame_meta.height);
   content_specific_stats->received_width.Add(frame_meta.width);
   content_specific_stats->received_height.Add(frame_meta.height);
 
diff --git a/video/receive_statistics_proxy.h b/video/receive_statistics_proxy.h
index e3cd922..b72ed92 100644
--- a/video/receive_statistics_proxy.h
+++ b/video/receive_statistics_proxy.h
@@ -39,7 +39,6 @@
 #include "rtc_base/numerics/running_statistics.h"
 #include "rtc_base/numerics/sample_counter.h"
 #include "rtc_base/rate_statistics.h"
-#include "rtc_base/rate_tracker.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/thread_annotations.h"
 #include "video/stats_counter.h"
@@ -177,8 +176,8 @@
   const uint32_t remote_ssrc_;
   RateStatistics decode_fps_estimator_ RTC_GUARDED_BY(main_thread_);
   RateStatistics renders_fps_estimator_ RTC_GUARDED_BY(main_thread_);
-  RateTracker render_fps_tracker_ RTC_GUARDED_BY(main_thread_);
-  RateTracker render_pixel_tracker_ RTC_GUARDED_BY(main_thread_);
+  Timestamp first_frame_rendered_ RTC_GUARDED_BY(main_thread_);
+  int64_t total_render_sqrt_pixels_ RTC_GUARDED_BY(main_thread_);
   SampleCounter sync_offset_counter_ RTC_GUARDED_BY(main_thread_);
   SampleCounter decode_time_counter_ RTC_GUARDED_BY(main_thread_);
   SampleCounter jitter_delay_counter_ RTC_GUARDED_BY(main_thread_);
diff --git a/video/receive_statistics_proxy_unittest.cc b/video/receive_statistics_proxy_unittest.cc
index b90d476..a1cef74 100644
--- a/video/receive_statistics_proxy_unittest.cc
+++ b/video/receive_statistics_proxy_unittest.cc
@@ -1113,6 +1113,7 @@
 TEST_F(ReceiveStatisticsProxyTest, ReceivedFrameHistogramsAreUpdated) {
   for (int i = 0; i < kMinRequiredSamples; ++i) {
     statistics_proxy_->OnRenderedFrame(MetaData(CreateFrame(kWidth, kHeight)));
+    time_controller_.AdvanceTime(TimeDelta::Millis(33));
   }
 
   statistics_proxy_->UpdateHistograms(std::nullopt, StreamDataCounters(),