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;
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_);
}