Closed
Bug 1490393
Opened 6 years ago
Closed 6 years ago
Trello scrollbar jumps to the wrong position when dragged with WebRender enabled
Categories
(Core :: Graphics: WebRender, defect, P2)
Tracking
()
RESOLVED
FIXED
mozilla65
People
(Reporter: cpeterson, Assigned: kats)
References
()
Details
(Keywords: regression)
Attachments
(6 files, 1 obsolete file)
STR: 1. Enable gfx.webrender.all 2. Open a Trello board, such as https://trello.com/b/TTAVI7Ny/ue4-roadmap 3. Click and drag the "Future Releases" column's scrollbar EXPECTED RESULT: The scrollbar position should smoothly follow the mouse pointer. ACTUAL RESULT: The scrollbar position will jump down below the mouse pointer position. I see this bug on both Windows 10 and macOS. Bisecting with mozregression took me way back to bug 1423370 in Nightly 61, which was also the source of (fixed) Google Docs scrollbar bug 1450871. I use Trello a lot, so I'm surprised I didn't notice this bug earlier.
Updated•6 years ago
|
Blocks: stage-wr-trains
Priority: -- → P2
Updated•6 years ago
|
Keywords: regression
Updated•6 years ago
|
Priority: P2 → P3
Updated•6 years ago
|
Priority: P3 → P2
Assignee | ||
Comment 2•6 years ago
|
||
Assignee | ||
Comment 3•6 years ago
|
||
I think what's happening here is that we have two nsDisplayTransform items, one nested inside the other, but with the same ASR. The outer one has a nonempty transform and the inner one has an identity transform. When walking the display list, we "defer" the outer nsDisplayTransform (by stashing it in StackingContextHelper::mDeferredTransformItem) so that child items will incorporate the transform as needed. However, when we encounter the nested nsDisplayTransform, we defer that one too, and so the earlier deferred one is effectively lost. Instead in this situation we need to combine the transforms. Doing this might entail storing just the ASR and transform from the nsDisplayTransform item on the StackingContextHelper instead of a pointer to the nsDisplayTransform itself, because we'll want an easy way to combine transforms. I'll try implementing that.
Assignee | ||
Comment 4•6 years ago
|
||
Argh. My patches fixed the reduced testcase but not the original site. :(
Assignee | ||
Comment 5•6 years ago
|
||
Here's a reduction that's slightly closer to the original page since my patches don't fix it. I think there can basically be an arbitrary number of StackingContextHelpers between the one with the deferred transform and the one that we care about, so I need to extend my solution accordingly.
Attachment #9014009 -
Attachment is obsolete: true
Assignee | ||
Comment 6•6 years ago
|
||
Still not good enough! My updated patches fix the better reduced testcase but still not the original page.
Assignee | ||
Comment 7•6 years ago
|
||
This one still fails with my latest fixes. I want to keep attachment 9014118 [details] since this reduction is not a strict superset of that one, so it's possible my fix for this will break that and it would be good to turn both into regression tests.
Assignee | ||
Comment 8•6 years ago
|
||
Finally got to the bottom of it. The patch to fix attachment 9014158 [details] also fixes the original site. WIPs are at https://github.com/staktrace/gecko-dev/commits/trello, it'll take some cleaning up and documenting before they're ready for review.
QA Contact: mreavy
Updated•6 years ago
|
QA Contact: mreavy
Assignee | ||
Comment 9•6 years ago
|
||
https://treeherder.mozilla.org/#/jobs?repo=try&bugfiler=&group_state=expanded&revision=62942980d57eae3190ba6517da1219824f3f3e6b
Assignee | ||
Comment 10•6 years ago
|
||
This code will be expanded a bit in the next few patches, so hopefully the comments here provide a reasonable explanation of what this code is about.
Assignee | ||
Comment 11•6 years ago
|
||
Depends on D8108
Assignee | ||
Comment 12•6 years ago
|
||
The implementation of deferred transforms did not handle the case where we ended up deferring multiple transform items before encountering the APZ-relevant display item. In this case we need to somehow accumulate all the deferred transforms. This patch accomplishes that, and includes a mochitest that exercises the relevant behaviour. Depends on D8109
Assignee | ||
Comment 13•6 years ago
|
||
The implementation of deferred transforms did not handle the case where we ended up deferring multiple transform items in a row with different ASRs. In this case, when we encounter the nested transform item that we want to defer, we need to flush the previously-deferred transform item into a WebRenderLayerScrollData item. This patch accomplishes that, and includes a mochitest that exercises the relevant behaviour. Depends on D8110
Assignee | ||
Comment 14•6 years ago
|
||
Here's a try push with the patches rebased and Markus' comments addressed: https://treeherder.mozilla.org/#/jobs?repo=try&group_state=expanded&revision=b16532a2d52bb1307ff96ad731fe2ae9f0d9a404
Comment 15•6 years ago
|
||
Pushed by kgupta@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/b3bdc9c20e2a Improve documentation regarding the deferred transforms. r=mstange https://hg.mozilla.org/integration/autoland/rev/992aeaea02b6 Extract a helper method on StackingContextHelper to get the deferred transform matrix. r=mstange https://hg.mozilla.org/integration/autoland/rev/b1e8ab8ec051 Accumulate the deferred transform down the StackingContextHelper chain if the ASR matches. r=mstange https://hg.mozilla.org/integration/autoland/rev/0b39b9d22436 Flush a deferred transform before picking up another if the ASR changes. r=mstange
Comment 16•6 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/b3bdc9c20e2a https://hg.mozilla.org/mozilla-central/rev/992aeaea02b6 https://hg.mozilla.org/mozilla-central/rev/b1e8ab8ec051 https://hg.mozilla.org/mozilla-central/rev/0b39b9d22436
Status: NEW → RESOLVED
Closed: 6 years ago
status-firefox65:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla65
Updated•6 years ago
|
You need to log in
before you can comment on or make changes to this bug.
Description
•