SVG graphs broken with Webrender enabled

RESOLVED FIXED in Firefox 69

Status

()

defect
P2
normal
RESOLVED FIXED
Last month
2 days ago

People

(Reporter: alberts, Assigned: gw)

Tracking

(Blocks 1 bug, Regression, {nightly-community, regression})

69 Branch
mozilla69
Points:
---
Dependency tree / graph
Bug Flags:
qe-verify +

Firefox Tracking Flags

(firefox-esr60 unaffected, firefox67 unaffected, firefox68 unaffected, firefox69 fixed)

Details

()

Attachments

(2 attachments)

Firefox Nightly 69.0a1 (2019-06-13); Webrender enabled; macOS latest

Page: https://www.shodan.io/report/89bnfUyJ

Many of the SVG elements are only partly rendered while scrolling up and down. Resizing the window fixes the graphs in the viewport.

Confirmed on

  • Debian Testing, KDE, X11, Macbook Pro
  • Win10, GTX1060

Not fixed by bug 1559284 comment 11.

Blocks: wr-69
Has Regression Range: --- → yes
Has STR: --- → yes
OS: macOS → All
Priority: -- → P2
Regressed by: 1558106
Hardware: x86_64 → All

Nical, can you reproduce?

Flags: needinfo?(nical.bugzilla)

found another one (just in case you can't reproduce on the first link): https://2019.stateofcss.com/demographics/

I can't reproduce so far, keeping the needinfo to check again later.

Win10, GTX1060
mozregression --launch 2019-06-14 --pref gfx.webrender.all:true -a https://www.shodan.io/report/89bnfUyJ

I can reproduce this on the https://www.shodan.io/report/89bnfUyJ link above, doing some investigation now. I don't know the blob code very well, but I'm wondering if I need to adjust the way SetBlobImageVisibleArea is used, in order to handle picture caching now rasterizing tiles that are (partially) outside the screen viewport? I'll start looking there and see what I find.

It doesn't appear related to SetBlobImageVisibleArea - there are calls to that, but in this test case it never seems to remove tiles.

Visually, it looks like the blobs are being clipped to a viewport that will need adjustment, but I'm not sure how / where yet.

Current theory: resource_cache.is_image_dirty() fails in some cases with blob images, which results in picture caching not knowing that an image dependency has changed and needs to be redrawn.

It does seem like resource_cache.is_image_dirty() is incorrect. I think there are cases where there are texture cache updates for blobs, which are not detected as dirty images and invalidating tiles.

This is somewhat tricky due to ordering - we need to know this before the resource block / texture cache update occurs. I think all the information is available, but I don't know the blob code very well.

This patch fixes two issues with blob images + new picture caching.

  1. The logic that determines a conservative set of visible tiles
    for tiled / blob images was no longer correct. It was relying
    on the bounds of a single tile to build the conservative rect.
    Instead, take the overall primitive world bounds and derive a
    conservative set of visible tiles from this.

  2. The logic to detect if an image was dirty was incorrect, and
    somewhat error prone. It now maintains a set of dirty images
    that have been requested. The image key dependencies are then
    checked during the tile cache post_update step.

I was able to reproduce the bug report on both pages listed above. However, with the attached patch applied, I can no longer reproduce the issue on either page.

Assignee: nobody → gwatson
Pushed by gwatson@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/c79599cda731
SVG graphs broken with Webrender enabled. r=nical
Status: NEW → RESOLVED
Closed: 29 days ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla69

Thank you! 👌

Flags: needinfo?(nical.bugzilla)
Flags: qe-verify+
You need to log in before you can comment on or make changes to this bug.