Commit 3caff958 authored by Khushal's avatar Khushal Committed by Commit Bot

viz: Eliminate delay in bumping up the refresh rate.

Be conservative when lowering down the refresh rate by waiting for a
consistent state for at least 60 frames but immediately switch if the
refresh rate should be increased.

R=dcastagna@chromium.org

Test: FrameRateDeciderTest.TogglesAfterMinNumOfFrames
Bug: 976583
Change-Id: I9483357807e81a28966254e1d89418dd12f03f4a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079264
Commit-Queue: Khushal <khushalsagar@chromium.org>
Auto-Submit: Khushal <khushalsagar@chromium.org>
Reviewed-by: default avatarDaniele Castagna <dcastagna@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745726}
parent 39ea63e8
...@@ -139,11 +139,18 @@ void FrameRateDecider::UpdatePreferredFrameIntervalIfNeeded() { ...@@ -139,11 +139,18 @@ void FrameRateDecider::UpdatePreferredFrameIntervalIfNeeded() {
} }
last_computed_preferred_frame_interval_ = new_preferred_interval; last_computed_preferred_frame_interval_ = new_preferred_interval;
if (current_preferred_frame_interval_ == new_preferred_interval)
return;
// The min num of frames heuristic is to ensure we see a constant pattern // The min num of frames heuristic is to ensure we see a constant pattern
// before toggling the global setting to avoid unnecessary switches. // before toggling the global setting to avoid unnecessary switches when
if (num_of_frames_since_preferred_interval_changed_ >= // lowering the refresh rate. For increasing the refresh rate we toggle
min_num_of_frames_to_toggle_interval_ && // immediately to prioritize smoothness.
current_preferred_frame_interval_ != new_preferred_interval) { bool should_toggle =
current_preferred_frame_interval_ > new_preferred_interval ||
num_of_frames_since_preferred_interval_changed_ >=
min_num_of_frames_to_toggle_interval_;
if (should_toggle) {
current_preferred_frame_interval_ = new_preferred_interval; current_preferred_frame_interval_ = new_preferred_interval;
client_->SetPreferredFrameInterval(new_preferred_interval); client_->SetPreferredFrameInterval(new_preferred_interval);
} }
......
...@@ -298,6 +298,20 @@ TEST_F(FrameRateDeciderTest, TogglesAfterMinNumOfFrames) { ...@@ -298,6 +298,20 @@ TEST_F(FrameRateDeciderTest, TogglesAfterMinNumOfFrames) {
frame_rate_decider_->OnSurfaceWillBeDrawn(surface); frame_rate_decider_->OnSurfaceWillBeDrawn(surface);
} }
EXPECT_EQ(display_interval_, preferred_interval); EXPECT_EQ(display_interval_, preferred_interval);
// The frame rate is immediately toggled on drawing a surface with a lower
// interval.
frame_rate_decider_->set_min_num_of_frames_to_toggle_interval_for_testing(
50u);
FrameSinkId frame_sink_id2(1u, 1u);
preferred_intervals_[frame_sink_id2] = min_supported_interval;
auto* surface2 = CreateAndDrawSurface(frame_sink_id2);
{
FrameRateDecider::ScopedAggregate scope(frame_rate_decider_.get());
frame_rate_decider_->OnSurfaceWillBeDrawn(surface);
frame_rate_decider_->OnSurfaceWillBeDrawn(surface2);
}
EXPECT_EQ(display_interval_, min_supported_interval);
} }
} // namespace } // namespace
......
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