Closed Bug 1676474 Opened 4 years ago Closed 3 years ago

[Bug] Display corruption occurs when WebRender is enabled

Categories

(Core :: Graphics: WebRender, defect, P3)

Unspecified
Android
defect

Tracking

()

RESOLVED FIXED
85 Branch
Tracking Status
firefox84 --- fixed
firefox85 --- fixed

People

(Reporter: kbrosnan, Assigned: jnicol)

References

(Blocks 1 open bug)

Details

Attachments

(1 file)

From github: https://github.com/mozilla-mobile/fenix/issues/16469.

Steps to reproduce

  1. Go to about:config
  2. Click on the search input
  3. Write something on the search input (in my case - screenshot - I wrote Webrender)

Expected behavior

The cursor in the input to flash and the text to appear without any corruption.

Actual behavior

Display corruption occurs, showing weird rectangles when the cursor is flashing (after step 2):

and garbled text (after step 3):

Workaround

By setting gfx.webrender.force-disabled to true, the issue does not occur, as it falls back to using OpenGL instead of WebRender.

Device information

  • Android device: Samsung Galaxy S20 Ultra (Exynos 990 / Mali-G77 MP11)
  • Fenix version: Firefox Nightly 84.0a1; Build ID20201106093443

Extra notes

This issue occurs on almost every website, especially when writing on inputs, but also when interacting with other elements. In the screenshot below, the text became like that after I clicked the "Copy text to clipboard" button.

When using Firefox Nightly 84.0a1 Build ID20201105045247, the issue does not occur (WebRender is enabled according to the about:support page).

Not sure if it helps, but here is the text from the about:support page for the 20201105045247 build (the one that works as expected) and the 20201106093443 build (the one where the issue occurs).

Using an Xperia XZ2 Compact (Qualcomm SDM845 / Adreno 630) with the same Build ID20201106093443, this issue does not occur (WebRender is enabled according to the about:support page).

Change performed by the Move to Bugzilla add-on.

I think this was likely regressed by bug 1675159. Mozregression managed to give this range, although it wasn't cooperating with the reporter to narrow it down further. The reporter mentions that enabling gfx.webrender.debug.gpu-cache made it so that the bug did not reproduce, and partial present is disabled when the debug overlay is enabled. The video the reporter shared also plausibly looks like a partial present issue, even though the screenshots looked more like texture/gpu cache corruption.

Reporter's device is a Mali-G77. I cannot reproduce on any of my devices, including a Mali-G72.

Glenn, can you think of any functional changes the refactoring could have introduced?

Possible bugs could be:

  • Damage region tracking incorrect, due to a different buffer age value than before, or perhaps calling BufferDamageTracker::push_dirty_rect() with a different value or skipping calling it for a present.
  • Not querying the buffer age before calling eglSetDamageRegion is undefined.
  • Calling eglSetDamageRegion more than once per present is undefined.
  • Perhaps draw_previous_partial_present_regions is false, or not being honoured.
Flags: needinfo?(gwatson)
Blocks: wr-android
Severity: -- → S3
Priority: -- → P3
See Also: → 1675159

User reports the bug no longer reproduces after yesterday's play store update. I don't think there were any further changes to this code... so maybe it's not partial present related after all (or it's due to something very subtle).

OK. Yea, it seems unlikely to be that patch, but if it's something very subtle / timing related it might be. Let me know if you see any more reports of it.

Flags: needinfo?(gwatson)

Update from github: the reporter says the bug has recently started occurring again, and found this regression range: https://hg.mozilla.org/integration/autoland/pushloghtml?fromchange=d22dc65be538930b205704bb8026dd7dfd51a833&tochange=98c926d9289f5c45565a3a157971b46f98210133

Bug 1676390 seems the most likely in there. It doesn't really make any sense at all, but I guess we're dealing with a subtle issue here. I am concerned because that has just been uplifted to beta.

The user also confirmed that disabling partial present (gfx.webrender.max-partial-present-rects=0) fixes the issue, confirming my suspicion in comment 1 that it was related to partial present. (Because enabling a debug overlay, which causes partial present to be disabled, made the issue go away)

cc Jim and Ryan. Should we uplift a patch to disable partial present on Android to beta? Or just for Mali-Gxx? Or just Mali-G77 (the reporter's device)? FTR I cannot reproduce on non-Mali or Mali-G72.

Jim, should I order myself a Mali-G77 to investigate further?

Flags: needinfo?(ryanvm)
Flags: needinfo?(jmathies)

(In reply to Jamie Nicol [:jnicol] from comment #4)

cc Jim and Ryan. Should we uplift a patch to disable partial present on Android to beta? Or just for Mali-Gxx? Or just Mali-G77 (the reporter's device)? FTR I cannot reproduce on non-Mali or Mali-G72.

Can you please attach a patch for this and get it reviewed and nominated for release approval? If we do end up taking this in an RC respin, it would be good to have the patch ready to go ASAP.

Flags: needinfo?(ryanvm) → needinfo?(jnicol)

Due to rendering issues reported on a Mali-G77, disable partial
present on all Mali-Gxx devices.

Assignee: nobody → jnicol
Status: NEW → ASSIGNED
Pushed by jnicol@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/d75f7d0a6d52
Disable webrender partial present on Mali-Gxx. r=aosmond

Comment on attachment 9192170 [details]
Bug 1676474 - Disable webrender partial present on Mali-Gxx. r?aosmond

Beta/Release Uplift Approval Request

  • User impact if declined: Rendering artefacts on some Mali-Gxx devices
  • Is this code covered by automated tests?: Yes
  • Has the fix been verified in Nightly?: No
  • Needs manual test from QE?: No
  • If yes, steps to reproduce:
  • List of other uplifts needed: None
  • Risk to taking this patch: Low
  • Why is the change risky/not risky? (and alternatives if risky): Disables minor webrender feature, which makes us use simpler compositing path in webrender.
  • String changes made/needed:
Flags: needinfo?(jnicol)
Attachment #9192170 - Flags: approval-mozilla-release?

For "Has the fix been verified in Nightly?": technically no, but the reporter has confirmed that disabling the pref that this patch disables fixes the issue.

Status: ASSIGNED → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → 85 Branch

Just for info - i have device with Mali G71 and on Firefox 84.0b9 with Webrender and partial present enabled i dont see any glitches mentioned in this bug.

Me neither on a Mali-G72. It has only been confirmed on a G77, but we decided to disable the feature temporarily on all Gxx as a precaution.

We've just had another user report seeing this bug. On 84.1.0-rc1, also with a Mali-G77.

https://github.com/mozilla-mobile/fenix/issues/13153#issuecomment-742159588

Comment on attachment 9192170 [details]
Bug 1676474 - Disable webrender partial present on Mali-Gxx. r?aosmond

Approved for 84.0rc2. This should be fixed in the final Fenix 84.1.0 release.

Flags: needinfo?(jmathies)
Attachment #9192170 - Flags: approval-mozilla-release? → approval-mozilla-release+
Blocks: 1685276
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: