Closed Bug 1455387 Opened 6 years ago Closed 6 years ago

Crashtest failure with gfx.webrender.async-scene-build enabled

Categories

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

Other Branch
defect

Tracking

()

RESOLVED FIXED

People

(Reporter: kats, Unassigned)

References

Details

(Whiteboard: [gfx-noted])

When I do a try push with async scene building enabled, there is a crashtest failure - it doesn't happen on the same test every time, but there's usually at least one test that hits the crash. [1] is an example failure.

I was able to reproduce it (or a similar-looking crash, anyway) locally as well, by running

MOZ_ACCELERATED=1 MOZ_WEBRENDER=1 xr ./mach crashtest dom/base/crashtests/

I can reproduce even under rr but I don't know enough about this code to figure out what is wrong. The point of the crash is that request.tile.unwrap() panics at [2], and this is part of a render() call that is triggered from [3] (the SceneBuilderResult::Transaction handler).

nical, are you familiar with this code and/or have any ideas on why it might not be working? My best guess is that the C++ side is freeing resources too early on the assumption that the scene is built and discarded, but because async scene building defers the build we need to keep those resources around longer.

[1] https://treeherder.mozilla.org/logviewer.html#?job_id=174538795&repo=try&lineNumber=12027
[2] https://searchfox.org/mozilla-central/rev/59a9a86553e9bfd9277202748ff791fd9bc0713b/gfx/webrender/src/resource_cache.rs#641
[3] https://searchfox.org/mozilla-central/rev/59a9a86553e9bfd9277202748ff791fd9bc0713b/gfx/webrender/src/render_backend.rs#727
Flags: needinfo?(nical.bugzilla)
This assertion blows up because we have a tiled image in the resource cache and we queried the whole image as a source for a primitive rather than a piece of it. The code that generates the requests should check whether the image is tiled and only generate tile requests if so. It's unclear why we would get a mismatch when using async scene building specifically, though. Maybe There can be situations where the "tiledness" of an image changes with a new transaction and the async nature of this configuration introduces something that we didn't think of, but I think we shouldn't even try to support transitioning an image from tiled to non-tiled or vs-versa.
With a WR update that includes servo/webrender#2742 the crashtest looks green with async-scene-building enabled.

https://treeherder.mozilla.org/#/jobs?repo=try&revision=e08515974664869e3eea9a0ffdde8ab2ad9f9113
Depends on: 1459935
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Flags: needinfo?(nical.bugzilla)
You need to log in before you can comment on or make changes to this bug.