[TTVD] Fix timing calculations on start and timer delays 92/324892/2
authorJakub Gajownik <j.gajownik2@samsung.com>
Fri, 16 May 2025 07:02:26 +0000 (09:02 +0200)
committerBot Blink <blinkbot@samsung.com>
Thu, 29 May 2025 10:30:47 +0000 (10:30 +0000)
There are 2 situations when dedicated rendering mode timer
starts to flooding thread with new callbacks:
- at start of dedicated mode - the more the later mode is
  enabled,
- when callback is delayed, it tries to fill whole gap
  unnecessarily.

Bug: https://jira-eu.sec.samsung.net/browse/VDGAME-706
Change-Id: I10e9f6960d9dcc3fcfb1908e295c0e77035dfd38
Signed-off-by: Jakub Gajownik <j.gajownik2@samsung.com>
media/filters/tizen/overlay_frame_submitter.cc

index 5e31052943ff487a95c07edbe3b0dc19d34a03de..a269998d5e5112e93d6e75f9c6a7d8db644a219f 100644 (file)
@@ -59,7 +59,9 @@ void OverlayFrameSubmitter::UpdateFrame(const VideoFrame& video_frame) {
     enabled_ = true;
     picture_size_ = video_frame.natural_size();
     interval_ = kRenderingInterval;
-    ScheduleTimerRendering(begin_now_ + interval_);
+    // Current frame is scheduled standard way using Viz compositor, so
+    // start timer with next frame according to interval.
+    ScheduleTimerRendering(base::TimeTicks::Now() + interval_);
   } else if (!is_overlay_forced && enabled_) {
     TIZEN_MEDIA_LOG(INFO) << "Disable overlay rendering mode";
     enabled_ = false;
@@ -91,7 +93,13 @@ void OverlayFrameSubmitter::TimerRendering(base::TimeTicks target_time) {
 
   const auto now = base::TimeTicks::Now();
   const auto frame_deadline = now - begin_now_ + begin_deadline_;
-  ScheduleTimerRendering(target_time + interval_);
+  // If execution of current timer callback is delayed, there is no point in
+  // scheduling multiple updates with smaller interval. In such case skip
+  // several updates up to next non-immediate target time.
+  do {
+    target_time += interval_;
+  } while (target_time < now);
+  ScheduleTimerRendering(target_time);
   rendering_cb_.Run(frame_deadline, interval_);
 }