Closed
Bug 28522
Opened 26 years ago
Closed 26 years ago
Clicking or tabbing to link causes incremental reflow
Categories
(Core :: CSS Parsing and Computation, defect, P2)
Core
CSS Parsing and Computation
Tracking
()
VERIFIED
FIXED
M16
People
(Reporter: troy, Assigned: attinasi)
References
Details
(Keywords: perf, Whiteboard: [PDT-])
Attachments
(2 files)
See the attached test case for the HTML, but this simple test case causes us to
generate an incremental reflow command when the link is clicked
The page is very straight forward (a slight;y simplified version of the test
case David Baron filed for bug #28434) HTML.
It seems that the vlink="#444464" link="#000066" attributes are what is causing
the incremental reflow command to be generated.
This is a performance problem to have us doing an incremental reflow when links
are clicked on. Marking beta1 and setting milestone for M14, because I think we
need to fix this and I think it's a regression
This might seem like a weird request but please don't fix this untill the
crasher bug 28434 is fixed, the reason I say this is that the reason for the
crash in 28434 is the reflow that happends when you click on a link and if
there's no more reflow when clicking on a link that bug will be mush harder to
reproduce...
I'm not worried about being able to reproduce bug 2834. It's a recent regression
and I know exactly what lines of code caused the regression.
We really do need to fix before we go out to beta
Why is this being downgraded to PDT-? This is a performance problem and it needs
to get fixed...
Keywords: perf
Whiteboard: [PDT-] → [PDT]
Rick asked me to better explain this. What happens is that when you click on the
link the _current_ page gets an incremental reflow, and then we proceed to load
the new page.
Doing the incremental reflow on the page we're leaving is unnecessary (it's only
a color change), and it slows down the load of the new page
Troy, what is the performance gain from fixing this?
Whiteboard: [PDT]
We avoid doing an unnecessary incremental reflow. That means we will get the new
page displayed that much quicker.
I can't give you a percentage improvement, because it depends on the current
page (that will get the additional incremental reflow) and how big it is and the
new page and how small it is
Comment 10•26 years ago
|
||
Putting on PDT+ radar for beta1. Can you please add an estimated time to fix in
the Status Whiteboard. Thanks!
Whiteboard: [PDT+]
Comment 11•26 years ago
|
||
Removing PDT+ from this bug. It's not *as* important as other issues, and pierre
is swamped. Let's try again in m15.
Whiteboard: [PDT+]
| Assignee | ||
Comment 13•26 years ago
|
||
Taking over this one to help reduce Pierre's bug count. Moved to M15 also.
Assignee: pierre → attinasi
Target Milestone: M14 → M15
| Assignee | ||
Updated•26 years ago
|
Status: NEW → ASSIGNED
Comment 14•26 years ago
|
||
Marking this bug as dependent of bug 7617 and bug 28212. These 2 bugs are
probably duplicates: they both describe reflow problems inside tables
consecutively to a reflow generated by a clicking a link inside the table.
In fact there is no real dependency between this bug and the 2 others except that
we should make sure we fix the table code before we stop generating the reflow
from the link, unless we have another way to cause the problem described in 7617
and 28212.
| Assignee | ||
Comment 15•26 years ago
|
||
The problem here is that clicking on a link causes the border to appear around
the link (as a focus indicator) and that causes a reflow. Also, you can get the
reflow by tabbing the focus to a link, you don;t have to click on one.
I will attach another testcase that shows how the color change on the link does
NOT cause a reflow, it is just the border being drawn to indicate focus.
This is the simplest of a series of bugs relating to the same problem: focus is
indicated by drawing a border and that changes the spacing which causes a
reflow.
Summary: Clicking link causes incremental reflow → Clicking or tabbing to link causes incremental reflow
| Assignee | ||
Comment 16•26 years ago
|
||
What's being drawn is an *outline*, not a border, and the outline does not
affect spacing.
However, see my 2000-02-18 18:47 comment on bug 28434.
| Assignee | ||
Comment 18•26 years ago
|
||
I the culprit is in StyleSpacingImpl::CalcDifference where it says:
if ((mOutlineWidth != aOther.mOutlineWidth) ||
(mOutlineStyle != aOther.mOutlineStyle) ||
(mOutlineColor != aOther.mOutlineColor) ||
(mOutlineRadius != aOther.mOutlineRadius)) {
return NS_STYLE_HINT_REFLOW;
// XXX: should be VISUAL: see bugs 9809 and 9816
}
Clearly there are problems with outlines that we need to address wholesale,
because if I fix this one then we get painting problems in outlines. From
looking over the comments in bug 9816 it sounds like the frame code needs to
compute the area to invalidate such that it includes the outlines.
I'm marking thsi dependent on 9809 since that addresses fixing the paint issues.
Depends on: 9809
Just thinking, without really looking at the code, I think there would be a few
ways to do this:
* store the previous outline width in the frame. This is bad for memory usage.
* use a new style hint, NS_STYLE_HINT_OUTLINE, that tells the style system to
invalidate the frame both before and after the re-styling, so that the changes
are sure to be repainted correctly. (I have not investigated the feasibility of
this at all in the code. I'm just making things up here...) We'd also need to
make sure invalidating the frame included invalidating the outline (which it
might not need to for any other invalidates).
This wouldn't deal with the problems with views, though, but it would be a
start. It's not even clear if the invalidate works correctly on outlines... I'd
have to check.
I'm pretty sure the :focus is implemented using outlines, since the rule:
:link:focus, :visited:focus, :out-of-date:focus,
:link:focus img, :visited:focus img, :out-of-date:focus img {
outline: 1px dotted black;
}
exists in html.css.
I'd like to look into this more, but I just don't have the time...
The style change is created in StyleSpacingImpl::CalcDifference
http://lxr.mozilla.org/seamonkey/source/layout/base/src/nsStyleContext.cpp#744
and handled in nsCSSFrameConstructor::ProcessRestyledFrames
http://lxr.mozilla.org/seamonkey/source/layout/html/style/src/nsCSSFrameConstructor.cpp#7602
However, it doesn't look like it would be to easy to do two invalidates, because
the style context is replaced.
| Assignee | ||
Comment 21•26 years ago
|
||
Moving to M16: too many M15 bugs and this one is dependent on 9809 which is M16.
OS: Windows NT → All
Hardware: PC → All
Target Milestone: M15 → M16
| Assignee | ||
Comment 22•26 years ago
|
||
I just noticed that the offending line of code has been changed by jst (checking
in for Vidur). StyleSpacingImpl::CalcDifference now returns VISUAL instead of
REFLOW whent he spacing is different, however this is going to cause outlines to
be left on the screen (see bug 9809 and 9816).
Marking fixed even though I didn't fix it; the reflow is no longer happening.
Status: ASSIGNED → RESOLVED
Closed: 26 years ago
Resolution: --- → FIXED
| Assignee | ||
Comment 23•26 years ago
|
||
Regarding my last comment:
VISUAL is returned when the spacing's *outline* values have changed, I didn't
mean all spacing values.
Comment 24•26 years ago
|
||
Marking VERIFIED FIXED on:
- MacOS9 2000-07-06-08-M17 Commercial
- Linux6 2000-07-07-10-M17 Commercial
- Win98 2000-07-07-13-M17 Commercial
Status: RESOLVED → VERIFIED
You need to log in
before you can comment on or make changes to this bug.
Description
•