Closed Bug 1560853 Opened 8 months ago Closed 8 months ago

Blurry text on Slickdeals page


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




Tracking Status
firefox-esr60 --- unaffected
firefox67 --- unaffected
firefox67.0.1 --- unaffected
firefox68 --- unaffected
firefox69 + fixed


(Reporter: yoasif, Assigned: gw)


(Regression, )


(Keywords: nightly-community, regression)


(2 files)

Steps to reproduce:

  1. Navigate to
  2. Scroll through comments, move to next page if needed (it shows up within a page or two)

What happens:

Blurry/smudged looking text.

Expected result:

Sharp text

15:54.17 INFO: Last good revision: 855d557b82a20e1ed87af46bceac3b918534d37e
15:54.17 INFO: First bad revision: 431c5142ff3ad102328d90cb29470b20ccd1271e
15:54.17 INFO: Pushlog:

Has Regression Range: --- → yes
Has STR: --- → yes
Regressed by: 1558106
Flags: needinfo?(gwatson)
Priority: -- → P1

I haven't been able to reproduce this, yet. It's possible (but I think unlikely) that it will be resolved by when it lands (it's in the merge queue now). I'll keep trying to reproduce locally.

Flags: needinfo?(gwatson)

I have a minimal case that reproduces the issue. It appears to be related to snapping.

In this case, the external scroll offset of the scroll frame is a fractional value - I think this is causing issues as the picture caching code assumes that the scroll offsets will be rounded.

Is this expected behavior that WR should handle, or should the incoming external scroll offset be an integer value?

Flags: needinfo?(kats)

I think it should be fine to handle this in WR - with a combination of snap offsets + tweaking the picture content origin.

Flags: needinfo?(kats)

Gecko layouts typically produce a picture cache where the origin
of the picture rect is an integer. However, it can occasionally
be a fractional origin.

In these cases, we need to ensure the content origin is floored,
to maintain consistent snapping. When this case occurs, the UV
rect for the tile also needs adjusting, to ensure the exact
1:1 texel:pixel mapping when drawing the tile.

It's a little difficult to 100% verify that the bug is gone with this change - but I was able to reproduce it fairly reliably without this patch, and was unable to repro at all with the patch applied.

Assignee: nobody → gwatson

(In reply to Glenn Watson [:gw] from comment #2)

In this case, the external scroll offset of the scroll frame is a fractional value

Are these bugs somehow related? bug 1541072, bug 1528180, bug 1553818

I think in general we want rounding to happen as late as possible, because e.g. a scrollframe might be inside a transform and if we do rounding in APZ/Gecko and then the scrollframe gets scaled up in WR it will scroll jankily. So to me it seems to make sense to pass in the fractional scroll offset to WR and then let it do the rounding if needed.

Pushed by
Fix picture cache tiles with fractional origins. r=kvark
Closed: 8 months ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla69
Flags: qe-verify+
Regressions: 1566178

For verification purposes:

  • @Glenn, could you provide the test case mentioned in comment 2? (since we where unable to reproduce the issjue at all)
  • after checking multiple pages with 69.0b11 on Windows10/macOS 10.13 the issue did not manifest at all with webrender on/off.
Flags: needinfo?(gwatson)

The minimal test case I was referring to was a wrench (standalone webrender test tool) test file, not a HTML file viewable in Firefox, sorry.

If you still want to try and verify it, I found that setting layout.css.devPixelsPerPx to 1.0 and scrolling through the URL in the first comment was usually enough for me to see the bug in the broken builds before it was fixed.

It does differ in how reproducible it is based on screen resolution + platform + GPU (Intel integrated GPU + Linux seemed to reliably show the problem for me), so it might be hard to verify conclusively.

Flags: needinfo?(gwatson)


Unfortunately, because of our hardware restrictions we can't reproduce this issue or confirm that the bug is fixed. I will remove the qe verify+ flag. If somebody has the hardware necessary to reproduce this, they are more than welcomed to verify the fix.

Flags: qe-verify+
You need to log in before you can comment on or make changes to this bug.