Fix CEF browser handling during screenshots#5040
Open
HeresHavi wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Restored CEF browser textures immediately after
takePlayerScreenShotusing their retained frame.Screenshot restoration now also skips browser views that have not finished asynchronous CEF creation.
Browser content remains excluded from uploaded screenshots.
Motivation
MTA clears browser textures before capturing an uploaded screenshot. The old restoration path only requested an asynchronous CEF repaint afterward, which left the cleared white texture visible to the player for a rendered frame.
The restoration path also assumed every web view already had a CEF browser. Browser creation is asynchronous, so a screenshot could reach this path while
GetCefBrowser()was still null.For example, a server may use
takePlayerScreenShotwhile the player has a browser-based chat or HUD. The browser could briefly flash white, or the restoration path could encounter a browser that was still being created.Addresses the confirmed browser flicker reported in #4521.
Confirmed Reproduction
dxDrawImage.takePlayerScreenShot.OnPostScreenshotwhileGetCefBrowser()was null in 1 of 20 attempts.Issue #4521 also reports a later
libcef.dllclient failure. That failure was not reproduced during the screenshot and resource-restart tests, so this PR does not claim a matching crash stack for it.Test plan
Runtime
Builds and Tests
Debug | Win32:Client Webbrowserbuild passed.Release | Win32:Client Webbrowserbuild passed.clang-format.Checklist