Closed Bug 1659227 Opened 4 years ago Closed 4 years ago

Intermittent bugs/1614788-1.svg == bugs/1614788-1-ref.svg | image comparison, max difference: 255, number of differing pixels: 45438

Categories

(Core :: SVG, defect, P5)

defect

Tracking

()

RESOLVED FIXED
83 Branch
Tracking Status
firefox-esr68 --- unaffected
firefox-esr78 --- unaffected
firefox79 --- unaffected
firefox80 --- unaffected
firefox81 --- wontfix
firefox82 --- wontfix
firefox83 --- fixed

People

(Reporter: intermittent-bug-filer, Assigned: hiro)

References

(Regressed 8 open bugs, Regression)

Details

(Keywords: intermittent-failure, regression, Whiteboard: [stockwell unknown])

Attachments

(4 files)

Filed by: btara [at] mozilla.com
Parsed log: https://treeherder.mozilla.org/logviewer.html#?job_id=313062614&repo=autoland
Full log: https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/LekSVl8dQO-9tCXE5m9NrQ/runs/0/artifacts/public/logs/live_backing.log
Reftest URL: https://hg.mozilla.org/mozilla-central/raw-file/tip/layout/tools/reftest/reftest-analyzer.xhtml#logurl=https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/LekSVl8dQO-9tCXE5m9NrQ/runs/0/artifacts/public/logs/live_backing.log&only_show_unexpected=1


[task 2020-08-14T21:36:17.440Z] 21:36:17     INFO -  REFTEST TEST-START | layout/reftests/bugs/1614788-1.svg == layout/reftests/bugs/1614788-1-ref.svg
[task 2020-08-14T21:36:17.440Z] 21:36:17     INFO -  REFTEST TEST-LOAD | http://10.0.2.2:8854/tests/layout/reftests/bugs/1614788-1.svg | 4932 / 7075 (69%)
[task 2020-08-14T21:36:17.440Z] 21:36:17     INFO -  REFTEST TEST-LOAD | http://10.0.2.2:8854/tests/layout/reftests/bugs/1614788-1-ref.svg | 4932 / 7075 (69%)
[task 2020-08-14T21:36:17.441Z] 21:36:17     INFO -  REFTEST INFO | REFTEST fuzzy test (0, 0) <= (255, 45438) <= (145, 48536)
[task 2020-08-14T21:36:17.447Z] 21:36:17  WARNING -  REFTEST TEST-UNEXPECTED-FAIL | layout/reftests/bugs/1614788-1.svg == layout/reftests/bugs/1614788-1-ref.svg | image comparison, max difference: 255, number of differing pixels: 45438
[task 2020-08-14T21:36:17.492Z] 21:36:17     INFO -  REFTEST   IMAGE 1 (TEST): data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5q...
[task 2020-08-14T21:36:17.528Z] 21:36:17     INFO -  REFTEST   IMAGE 2 (REFERENCE): data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAA...
[task 2020-08-14T21:36:17.529Z] 21:36:17     INFO -  REFTEST TEST-END | layout/reftests/bugs/1614788-1.svg == layout/reftests/bugs/1614788-1-ref.svg

The test started to fail on 'slower' (?) platforms. Can you check what regressed it or what needs to be done?

Flags: needinfo?(tnikkel)

Set release status flags based on info from the regressing bug 1656418

AFAIK we think bug 1656418 regressed it. Passing ni to hiro

Flags: needinfo?(tnikkel) → needinfo?(hikezoe.birchill)

I am assigning to me, that said I can't tell I can work on this soon.

Assignee: nobody → hikezoe.birchill
Status: NEW → ASSIGNED
Flags: needinfo?(hikezoe.birchill)

I am the owner. I am sorry I haven't worked on this yet. I know what the problem is.

We use a scrollable frame as the clip frame for partial prerender rects, but in SVG case there is no reasonable scrollable frame, so we need a different way to get the clip frame. I don't have enough knowledge about SVG stuff, so I have to ask someone who is familiar with SVG stuff.

We reached 53 occurrences of this failure in the past week.
Most recent failure: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=315537933&repo=autoland&lineNumber=20032
Hiroyuki, any updates o this?

Flags: needinfo?(hikezoe.birchill)

Yep, I will fix this next Monday.

There are four different issues I've found so far.

  1. SVG{Inner,Outer}Frame clips descendants even if it's not scrollable at all (I didn't know that, thanks to Cameron)
  2. We use LayoutDeviceIntRect to represent the partial pre-render area, but in this test case the rect will be based on (2,1), it easily losts accuracy
  3. The animation in the test case jumps at positions where the partial pre-render rect is totally outside of the viewport, the current jank detect function fails on the cases
  4. With RDL incoming |aDirtyRect|s on ShouldPrerenderTransformedContent call are sometimes 0-width and 0-height, thus the expanded pre-render rect is not sufficient (i.e. the expanded rect is still smaller than the visible area)

I've already fixed 1 - 3 issues, but I don't quite understand about 4).

Attaching file is an example to see the incoming empty dirty rect on ShouldPrerenderTransformedContent call. There is no animation, no transform either, it's just a frame with will-change:transform.
I've also seen the incoming empty dirty rect on a test case in bug 1661316 comment 8.

(In reply to Hiroyuki Ikezoe (:hiro) from comment #16)

  1. With RDL incoming |aDirtyRect|s on ShouldPrerenderTransformedContent call are sometimes 0-width and 0-height, thus the expanded pre-render rect is not sufficient (i.e. the expanded rect is still smaller than the visible area)

:mattwoodrow suggested to me using visibleRect instead for dirtyRect for partial pre-render check (ShouldPrerenderTransformedContent). Indeed it fixes bug 1661316 and the 4) issue.

I am going to fix bug 1661316 first.

Depends on: 1661316
Flags: needinfo?(hikezoe.birchill)

In SVG frame tree SVG{Inner,Outer}Frame is normally not scrollable but clips
descendants, thus nsLayoutUtils::GetNearestScrollableFrame is not able to find
the clip/scroll frame. So in this change, we introduce
GetNearestOverflowClipFrame which is a similar function to
GetNearestScrollableFrame but it also checks whether the frame is SVGInnerFrame
or SVGOuterFrame which is clipping the given nsIFrame during walking up the
frame tree.

In this change we also change the logic to get the clip/scroll frame and the scroll
id as follows;

  1. Get the nearest overflow clip frame in the same document
  2. Use the root frame if there is no clip frame
  3. Then try to find the scroll id if the clip frame is asynchronously scrollable

so that it becomes clearer before. It's still messy though.

In SVG coordinates the rect size might be fractional.

Depends on D90647

This change regresses partial-prerender-translate-1.html which is a test case
that we don't consider transforms making the entire element outside of the clip
rect as jank (i.e. there is nothign to be composited). That said, it won't be
a big problem since even if the jank happened on the compositor, then there is
nothing to be painted on the main-thread, moreover with step timing functions
most of animation restyling are going to be skipped on the main-thread. So
the layout.animation.prerender.partial pref for the test case is dropped.

Depends on D90648

See Also: → 1666694
Pushed by hikezoe.birchill@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/9bcb053caba3
Handle SVG{Inner,Outer}Frame as the clip frame for partial pre-render. r=heycam,botond
https://hg.mozilla.org/integration/autoland/rev/2ca45c433eb7
Change the partial pre-render rect unit to LayoutDeviceRect. r=botond
https://hg.mozilla.org/integration/autoland/rev/0a92348ed335
Jank if the partial pre-render area is outside of the clip rect regardless of whether the entire element is also outside of the clip rect or not. r=botond

Since the status are different for nightly and release, what's the status for beta?
For more information, please visit auto_nag documentation.

The feature regressed this bug has not been enabled in beta/release channels.

Regressions: 1668170
Regressions: 1675076
Regressions: 1711708
Regressions: 1713113
Regressions: 1738126
Has Regression Range: --- → yes
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: