[fuchsia] MaybeRunInitialVsyncCallback should only called once (flutter/engine#56429)

Currently, flutter keeps calling MaybeRunInitialVsyncCallback() until 1
OnNextFrameBegin() called from Fuchsia which maybe problem when display
is off.

Tested manually.

Bug: http://fxbug.dev/376079469

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide] and the [C++,
Objective-C, Java style guides].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I added new tests to check the change I am making or feature I am
adding, or the PR is [test-exempt]. See [testing the engine] for
instructions on writing and running engine tests.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I signed the [CLA].
- [x] All existing and new tests are passing.
This commit is contained in:
巢鹏 2024-11-15 14:05:06 -05:00 committed by GitHub
parent 8e0d6da738
commit 2faf5c1ff6
2 changed files with 10 additions and 10 deletions

View File

@ -222,7 +222,6 @@ void FlatlandConnection::OnNextFrameBegin(
const auto now = fml::TimePoint::Now();
std::scoped_lock<std::mutex> lock(threadsafe_state_.mutex_);
threadsafe_state_.first_feedback_received_ = true;
threadsafe_state_.present_credits_ += values.additional_present_credits();
TRACE_DURATION("flutter", "FlatlandConnection::OnNextFrameBegin",
"present_credits", threadsafe_state_.present_credits_);
@ -319,15 +318,16 @@ fml::TimePoint FlatlandConnection::GetNextPresentationTime(
bool FlatlandConnection::MaybeRunInitialVsyncCallback(
const fml::TimePoint& now,
FireCallbackCallback& callback) {
if (!threadsafe_state_.first_feedback_received_) {
TRACE_DURATION("flutter",
"FlatlandConnection::MaybeRunInitialVsyncCallback");
const auto frame_end = now + kInitialFlatlandVsyncOffset;
threadsafe_state_.last_presentation_time_ = frame_end;
callback(now, frame_end);
return true;
// Only sent maybe_run_initial_vsync once.
if (threadsafe_state_.initial_vsync_callback_ran_) {
return false;
}
return false;
TRACE_DURATION("flutter", "FlatlandConnection::MaybeRunInitialVsyncCallback");
const auto frame_end = now + kInitialFlatlandVsyncOffset;
threadsafe_state_.last_presentation_time_ = frame_end;
threadsafe_state_.initial_vsync_callback_ran_ = true;
callback(now, frame_end);
return true;
}
// This method may be called from the raster or UI thread, but it is safe

View File

@ -137,7 +137,7 @@ class FlatlandConnection final {
fml::TimePoint last_presentation_time_;
FireCallbackCallback pending_fire_callback_;
uint32_t present_credits_ = 1;
bool first_feedback_received_ = false;
bool initial_vsync_callback_ran_ = false;
} threadsafe_state_;
// Acquire fences sent to Flatland.