Closed
Bug 1412078
Opened 7 years ago
Closed 7 years ago
Rocket chat [version 0.48.1] is not working properly
Categories
(Core :: Graphics: Layers, defect)
Tracking
()
VERIFIED
FIXED
mozilla58
Tracking | Status | |
---|---|---|
firefox-esr52 | --- | unaffected |
firefox56 | --- | unaffected |
firefox57 | --- | verified |
firefox58 | --- | verified |
People
(Reporter: cladech_le_vrai, Assigned: dvander)
Details
(Keywords: regression)
Attachments
(1 file, 1 obsolete file)
5.62 KB,
patch
|
mattwoodrow
:
review+
ritu
:
approval-mozilla-beta+
|
Details | Diff | Splinter Review |
User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Build ID: 20171025230440
Steps to reproduce:
I've been here : https://chat.lescommuns.org/channel/communecter_accueil
and it's not working properly
Actual results:
When you scroll, it takes a lot of time to display.
Expected results:
To display directly.
Reporter | ||
Comment 1•7 years ago
|
||
It's probably because of the version of rocket chat 0.48.1 . But it's working on chrome for example.
Comment 2•7 years ago
|
||
User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Build ID: 20171030103605
Hello,
I have tested this issue on latest Nightly build and managed to reproduce it. I have accessed the provided link and scrolled the channel: the web painting isn't correctly rendered and also it takes a long time to display while scrolling.
[Regression]
Given the fact that this issue is not reproducible on latest Firefox Release 56.0.2, I've ran the Mozregression tool and managed to find a regression window.
Here are the results:
Last good revision: 8dba09333346ba9f445c6648622596a96a841e8d
First bad revision: 5bf42ef768d80ebeba9f0a634a38446c33f1c125
Pushlog: https://goo.gl/YNu5Va
From the pushlog, it seems that the bug 1408781 has caused this. David, can you please take a look?
This issue is not reproducible on Mac 10.12, nor on Ubuntu 14.04 x64, using latest Nightly build 58.0a1 (2017-10-30).
Blocks: 1408781
Status: UNCONFIRMED → NEW
status-firefox56:
--- → unaffected
status-firefox57:
--- → unaffected
status-firefox58:
--- → affected
Component: Untriaged → Graphics: Layers
Ever confirmed: true
Flags: needinfo?(dvander)
Keywords: regression
OS: Unspecified → Windows
Product: Firefox → Core
Hardware: Unspecified → x86_64
![]() |
Assignee | |
Comment 3•7 years ago
|
||
Okay, I can reproduce this. I don't think it's a regression from bug 1408781. It looks like it's been broken on Advanced Layers for a while, but bug 1408781 made it much more obvious. The site is not very smooth on the old D3D11 compositor but Advanced Layers definitely is clipping the invalid region incorrectly.
Assignee: nobody → dvander
Status: NEW → ASSIGNED
Flags: needinfo?(dvander)
![]() |
Assignee | |
Comment 4•7 years ago
|
||
Not related to bug 1408781 after all. Also not an invalidation bug since it happens with invalidation disabled.
What's happening is that there are two painted layers, A and B, with A sandwiched in between two visible strips of B. This means B has two rects as its visible region and A's visible region is between them:
B B B B B B B
A A A A A A A
B B B B B B B
A and B both are inside a container with FrameMetrics, which causes PaintedLayer::MayResample to return true, and that collapses B's visible region to one giant rect. Advanced Layers then adds that whole rect to the occlusion set, which makes A no longer visible.
There's two easy ways to fix this, one is to consider may-resample layers as never opaque. Another fix is to track the opaque and visible regions separately.
No longer blocks: 1408781
![]() |
Assignee | |
Updated•7 years ago
|
![]() |
Assignee | |
Comment 5•7 years ago
|
||
Attachment #8925427 -
Flags: review?(matt.woodrow)
Comment 6•7 years ago
|
||
Comment on attachment 8925427 [details] [diff] [review]
patch
Review of attachment 8925427 [details] [diff] [review]:
-----------------------------------------------------------------
::: gfx/layers/mlgpu/LayerMLGPU.h
@@ +83,5 @@
> }
>
> + // If the layer is opaque, this returns the subset of the visible region
> + // that can be considered opaque.
> + virtual const LayerIntRegion& GetOpaqueRegion() {
Somewhat confusing that this is only valid to call if the layer is opaque.
Maybe return an empty region if !IsContentOpaque()? Or assert that we don't call this if it's false?
::: gfx/layers/mlgpu/PaintedLayerMLGPU.cpp
@@ +61,5 @@
> // Note that when AL performs CPU-based occlusion culling (the default
> // behavior), we might break up the visible region again. If that turns
> // out to be a problem, we can factor this into ForEachDrawRect instead.
> if (MayResample()) {
> + mOpaqueRegion = Move(mRenderRegion);
Maybe just always write to mOpaqueRegion (before this branch)? That way GetOpaqueRegion can be a trivial getter, which makes this a bit simpler.
Attachment #8925427 -
Flags: review?(matt.woodrow) → review+
![]() |
Assignee | |
Comment 7•7 years ago
|
||
Matt suggested not having two MayResample() calls since it's confusing. Here, PaintedLayerMLGPU always stores the correct visible region. RenderPassMLGPU then calls a separate method to extract the draw rects, and that's where we handle MayResample().
(I didn't make GetDrawRects virtual and replace all the callers of GetRenderRegion - but that's quite doable.)
Attachment #8925427 -
Attachment is obsolete: true
Attachment #8925607 -
Flags: review?(matt.woodrow)
Comment 8•7 years ago
|
||
Comment on attachment 8925607 [details] [diff] [review]
v2
Review of attachment 8925607 [details] [diff] [review]:
-----------------------------------------------------------------
::: gfx/layers/mlgpu/PaintedLayerMLGPU.cpp
@@ +65,5 @@
> // Note that when AL performs CPU-based occlusion culling (the default
> // behavior), we might break up the visible region again. If that turns
> // out to be a problem, we can factor this into ForEachDrawRect instead.
> if (MayResample()) {
> + mDrawRects = mRenderRegion.GetBounds();
Do we need to store this? The bounds should already be cached as part of nsRegion, so I think we can just return mRenderRegion.GetBounds() directly here.
Attachment #8925607 -
Flags: review?(matt.woodrow) → review+
Pushed by danderson@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/02dd65e55fd1
Don't treat resampled layers as entirely opaque. (bug 1412078, r=mattwoodrow)
![]() |
Assignee | |
Comment 10•7 years ago
|
||
Comment on attachment 8925607 [details] [diff] [review]
v2
Approval Request Comment
[Feature/Bug causing the regression]: Advanced Layers
[User impact if declined]: broken rendering on some complex pages, like RocketChat
[Is this code covered by automated tests?]:
[Has the fix been verified in Nightly?]:
[Needs manual test from QE? If yes, steps to reproduce]: STR in comment #0
[List of other uplifts needed for the feature/fix]: none
[Is the change risky?]: no
[Why is the change risky/not risky?]: The bug is that Advanced Layers considers too many pixels to be opaque, and thus fails to render pixels that should be visible. This just restricts how many are considered opaque, which worst case is a very small deoptimization but not a cause for further correctness problems.
[String changes made/needed]:
Attachment #8925607 -
Flags: approval-mozilla-beta?
![]() |
||
Comment 11•7 years ago
|
||
bugherder |
Status: ASSIGNED → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla58
Comment on attachment 8925607 [details] [diff] [review]
v2
I got a second opinion from Milan on this one and he feels this is a low risk, potential high reward. Taking it based on his recommendation, Beta57+
Attachment #8925607 -
Flags: approval-mozilla-beta? → approval-mozilla-beta+
Comment 13•7 years ago
|
||
bugherder uplift |
Updated•7 years ago
|
Flags: qe-verify+
Comment 14•7 years ago
|
||
Reproduced on 2017-10-31 Nightly.
Verified as fixed using Firefox 57.0 build 3 and latest Nightly 58.0a1 2017-10-09 under Win 10 64-bit and Win 7 64-bit.
Status: RESOLVED → VERIFIED
Flags: qe-verify+
Updated•7 years ago
|
status-firefox-esr52:
--- → unaffected
You need to log in
before you can comment on or make changes to this bug.
Description
•