Commit c6ec81f9 authored by Thomas Guilbert's avatar Thomas Guilbert Committed by Commit Bot

[video-raf] Fix never run callbacks.

The WebRTC's |total_frame_count_| tracks how many frames have been
enqueued, and not how many frames have been presented. This means that
|total_frame_count_| could have the same value for different presented
frames, which can give the appearance of stale frames and cause
video.rAF callbacks to never fire.

This CL fixes the issue by keeping track of the number of presented
frames separately from the total frames.

The CL also passes along rendering interval and average frame duration
from the compositor, to help with performance when dealing with high
frame rate videos.

Bug: 1012063
Change-Id: I222887ed3554dbb71830f904f24526895bda5947
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2088636
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarDale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#747813}
parent eefef9be
...@@ -593,6 +593,7 @@ void WebMediaPlayerMSCompositor::SetCurrentFrame( ...@@ -593,6 +593,7 @@ void WebMediaPlayerMSCompositor::SetCurrentFrame(
base::TimeTicks now = base::TimeTicks::Now(); base::TimeTicks now = base::TimeTicks::Now();
last_presentation_time_ = now; last_presentation_time_ = now;
last_expected_presentation_time_ = expected_presentation_time.value_or(now); last_expected_presentation_time_ = expected_presentation_time.value_or(now);
++presented_frames_;
OnNewFramePresentedCB presented_frame_cb; OnNewFramePresentedCB presented_frame_cb;
{ {
...@@ -743,8 +744,10 @@ WebMediaPlayerMSCompositor::GetLastPresentedFrameMetadata() { ...@@ -743,8 +744,10 @@ WebMediaPlayerMSCompositor::GetLastPresentedFrameMetadata() {
frame_metadata->presentation_time = last_presentation_time_; frame_metadata->presentation_time = last_presentation_time_;
frame_metadata->expected_presentation_time = frame_metadata->expected_presentation_time =
last_expected_presentation_time_; last_expected_presentation_time_;
frame_metadata->presented_frames = frame_metadata->presented_frames = static_cast<uint32_t>(presented_frames_);
static_cast<uint32_t>(total_frame_count_);
frame_metadata->average_frame_duration = GetPreferredRenderInterval();
frame_metadata->rendering_interval = last_render_length_;
} }
frame_metadata->width = last_frame->visible_rect().width(); frame_metadata->width = last_frame->visible_rect().width();
......
...@@ -238,6 +238,7 @@ class MODULES_EXPORT WebMediaPlayerMSCompositor ...@@ -238,6 +238,7 @@ class MODULES_EXPORT WebMediaPlayerMSCompositor
base::TimeTicks last_presentation_time_ GUARDED_BY(current_frame_lock_); base::TimeTicks last_presentation_time_ GUARDED_BY(current_frame_lock_);
base::TimeTicks last_expected_presentation_time_ base::TimeTicks last_expected_presentation_time_
GUARDED_BY(current_frame_lock_); GUARDED_BY(current_frame_lock_);
size_t presented_frames_ GUARDED_BY(current_frame_lock_) = 0u;
bool stopped_; bool stopped_;
bool render_started_; bool render_started_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment