Closed
Bug 191830
Opened 22 years ago
Closed 19 years ago
views screw up paint order
Categories
(Core :: Web Painting, defect, P2)
Core
Web Painting
Tracking
()
RESOLVED
FIXED
People
(Reporter: bzbarsky, Assigned: roc)
References
Details
(Keywords: testcase)
Attachments
(2 obsolete files)
I just found out (while debugging bug 191567) that we paint views totally
separately from inside the presshell, after normal painting finishes.
This screws up the layering of things that overlap if some of them have views
and others do not.... testcase attached.
Reporter | ||
Comment 1•22 years ago
|
||
Assignee | ||
Comment 2•22 years ago
|
||
Yes, this is a bug of the form "content order is not always honoured in the
presence of sibling content with views". I know about it :-). But I don't think
I have a specific bug for it.
Reporter | ||
Comment 3•22 years ago
|
||
Yep, that sums it up. And now you do. ;)
Assignee | ||
Comment 4•22 years ago
|
||
The problem is that we can have a frame tree like this:
F1(V1) --> F2 (V2)
--> F3
--> F4 (V4)
Assuming no z-index overrides, we will paint view V1, then V2, then V4. But
painting view V1 paints F1 and its children without views, i.e. F3. Then we
paint F2 and F4. So F2 is painted after F3 but it should be before F3.
I think the solution is to restructure nsIViewObserver::Paint so that we can
paint more specific parts of the view tree. E.g., we would paint the above frame
tree using the following callbacks:
"Paint the frames rooted at V1, up to but not including V2" (paints frame F1)
"Paint the frames rooted at V2" (paints frame F2)
"Paint the frames rooted at V1, starting after V2 and ending before V4 (paints
frame F3)
"Paint the frames rooted at V4" (paints frame F4)
"Paint the frames rooted at V1, starting after V4" (paints nothing)
This would require significant restructuring of the frame painting code to
support repainting of fragments of the frame tree, but I think it's doable. Also
some thought would have to be given to minimizing the additional overhead.
Reporter | ||
Comment 5•22 years ago
|
||
*** Bug 192698 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 6•22 years ago
|
||
*** Bug 198063 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 7•21 years ago
|
||
*** Bug 211830 has been marked as a duplicate of this bug. ***
Shouldn't this bug report receive the same priority as the most important
duplicate? This would be P2 in this case? (I am not accustomed to the rules for
changing priorities here)
Assignee | ||
Comment 9•21 years ago
|
||
well, it's really up to me to set the priority, but I agree that P2 is fair.
Priority: -- → P2
Comment 10•21 years ago
|
||
This is particularly nasty in XUL where IIRC you can't set the z-order :-(
Comment 11•21 years ago
|
||
*** Bug 221181 has been marked as a duplicate of this bug. ***
Comment 12•20 years ago
|
||
(In reply to comment #1)
> Created an attachment (id=113468)
> testcase
>
Hmms. This looks like the same bug which manifested when I added header/footer
support to abiword's xhtml exporter using the example given in 9.6.1 (iirc) of
CSS 2.1, glad to see it's already known about.
Comment 13•20 years ago
|
||
Around or just over 20 months I estimate since this bug was last touched by the
assignee, no? This with 4 dups and 3 being blocked... I by no means wish to
underappreciate how busy you must be, or the hard work you put in here or the
obligations and employment you have elsewhere, but could we possibly get a quick
30 second update? If not a status update (for I know not whether progress has
been made), at least a simple ping to let us know that this issue has not been
forgotten?
Again, please don't take this the wrong way, I have a profound appreciation for
your volunteering your time to take care of our problem. I'd just like to know
if this issue is still being looked at.
Comment 14•20 years ago
|
||
Well, the testcase WFM with 2005-04-04 trunk build. (I can see the bug in
Mozilla1.7).
Reporter | ||
Comment 15•20 years ago
|
||
The testcase used background-attachment to force a view. That stopped forcing
a view unless a background image is also specified (see bug 258793).
This new testcase uses opacity instead of background-attachment to force a
view; this bug is alive and well.
That said, Mark, the status is that we're not sure how to best fix this yet...
The proposal in comment 4 is basically a pretty complete rewrite of the way
painting happens; if that's what we need to do we need to find the time to do
it...
Attachment #113468 -
Attachment is obsolete: true
Assignee | ||
Comment 16•20 years ago
|
||
There's no way we can pull this off for 1.8.
Reporter | ||
Comment 17•20 years ago
|
||
Oh, ofcourse. The question is whether we can for 1.9.....
Assignee | ||
Comment 18•20 years ago
|
||
Should be able to, yeah.
Comment 19•20 years ago
|
||
(In reply to comment #15)
> That said, Mark, the status is that we're not sure how to best fix this yet...
> The proposal in comment 4 is basically a pretty complete rewrite of the way
> painting happens; if that's what we need to do we need to find the time to do
> it...
Gotcha, thanks! Glad to see an update, at least the 1.9 part.
Keep up the good work.
Blocks: acid2
Comment 20•20 years ago
|
||
The proposal for complete rewrite in comment #4 sounds a lot of work. I assume
tht it will take a pretty long time before this is fixed. Would it be possible
in the mean time to change the paint algorithm to something that works correctly
with a decreased performance?
Given frame tree like
F1(V1) --> F2 (V2)
--> F3
--> F4 (V4)
would it be possible to render F1 (View 1), F2 (View 2), F3 (repaint the frame 3
in View 1), F4 (View 4). As a possible tweak, F3 should repaint only if some
other view (View 2 in this case) has been repainted between the time View 1 and
F3 are repainted. A simple implementation could remember just the last view that
has been repainted and check if that is different from the view of current frame.
Would that cause a too big perfomance hit? Is it better to render incorrectly
with better performance?
*** Bug 293521 has been marked as a duplicate of this bug. ***
Comment 22•19 years ago
|
||
What if a view paints the frame, the children up to the first child with a view,
and siblings up to the first sibling with a view?
F1(V1) --> F2 (V2)
--> F3
--> F4 (V4)
V1 paints F1.
V2 paints F2 and F3.
V4 paints F4.
Assignee | ||
Comment 23•19 years ago
|
||
There's actually a much nicer way to fix this, which I thought of a while ago
but forgot to right down. Basically we just make it so that when we're painting
a frame subtree, and we encounter a frame with a view, we call back to the view
manager to paint that view. If the view is at the "right place" in the display
list then the view manager goes ahead and renders the view and crosses it off
the display list. If the view is at some other z-position then the view manager
just ignores the call and paints the view later (or earlier). This will require
much smaller changes.
Assignee | ||
Comment 24•19 years ago
|
||
*** Bug 301603 has been marked as a duplicate of this bug. ***
Blocks: 313190
Assignee | ||
Comment 25•19 years ago
|
||
*** Bug 319534 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 26•19 years ago
|
||
Comment on attachment 179963 [details]
Updated testcase
CSS 2.1 actually says that 'opacity' creates a new stacking context that's above normal in-flow content, so this testcase renders correctly before and after the patch in bug 317375.
Attachment #179963 -
Attachment is obsolete: true
Reporter | ||
Comment 27•19 years ago
|
||
Actually, opacity isn't in CSS2.1; all I see in CSS2.1 about stacking contexts is that non-auto z-index establishes a new stacking context.
That said, if opacity establishes a stacking context, we do need a new testcase. I tried using background-attachment instead of opacity, but then the bug went away, so the testcase might need to be sneakier... Or just use one from one of the bugs this blocks, I guess.
Comment 28•19 years ago
|
||
With bug 317375 being fixed, the paint order error in Acid2 is gone, although the new testcase still shows up fixed, but that's expected results. I think this bug should be marked as FIXED as fixing bug 317375 also removed the Acid2 problem (the exes are now on the top of everything). Also, this bug is platform "All", not platform "Linux", but I can't set that.
Reporter | ||
Comment 29•19 years ago
|
||
This bug was basically a tracking bug... please feel free to resolve fixed once all the bugs it blocks are tested and resolved.
Updated•19 years ago
|
OS: Linux → All
Hardware: PC → All
Comment 30•19 years ago
|
||
(In reply to comment #29)
> This bug was basically a tracking bug... please feel free to resolve fixed once
> all the bugs it blocks are tested and resolved.
I would resolve it, as FIXED, but it requires privileges. Do it for me or grant me the privilege to do it, else it's impossible.
Comment 31•19 years ago
|
||
(In reply to comment #29)
> This bug was basically a tracking bug... please feel free to resolve fixed once
> all the bugs it blocks are tested and resolved.
I would resolve it, as FIXED, but it requires privileges. Do it for me or grant me the privilege to do it, else it's impossible.
Comment 32•19 years ago
|
||
Oops... double post.
Reporter | ||
Comment 33•19 years ago
|
||
> I would resolve it, as FIXED, but it requires privileges. Do it for me or grant
> me the privilege to do it, else it's impossible.
Which part of "the bugs it blocks are tested and resolved" was missed? Or do you mean that all of those are fixed now and just need to be resolved accordingly?
Comment 34•19 years ago
|
||
So, regarding comment 26 and comment 27, what's the conclusion?
Should opacity create a new stacking context or not?
In the css spec, I found this sentence:
http://www.w3.org/TR/CSS21/visuren.html#z-index
"Stacking contexts are not necessarily related to containing blocks. In future levels of CSS, other properties may introduce stacking contexts, for example 'opacity'."
The outcome decides if bug 275251 is a valid bug or not, I think.
Assignee | ||
Comment 35•19 years ago
|
||
'opacity' definitely creates a new stacking context.
Comment 36•19 years ago
|
||
Actually the bug that blocked this (bug 317375) was fixed, so it should be now possible to resolve, but it doesn't even let me accept this bug (assign to self). Only "Leave as NEW" appears for me.
Comment 37•19 years ago
|
||
I guess this could be resolved->fixed now.
The remaining open bugs:
Bug 289480 is a meta bug for the acid2 test.
Bug 313190 depends on a fix for bug 130078.
Stefanik, it's always important to look at the bugs that were blocked by this bug before you can resolve this bug.
Reporter | ||
Comment 38•19 years ago
|
||
> Actually the bug that blocked this (bug 317375) was fixed
The next time you feel like ignoring my comments (comment 29), please just don't comment or uncc me before commenting, ok?
Martijn, thanks for looking at the deps!
Status: NEW → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
Updated•6 years ago
|
Component: Layout: View Rendering → Layout: Web Painting
You need to log in
before you can comment on or make changes to this bug.
Description
•