Closed
Bug 67495
Opened 24 years ago
Closed 23 years ago
poor perf during incremental reflow in a text control (inline frame reflow problem)
Categories
(Core :: Layout, defect, P2)
Tracking
()
mozilla1.0
People
(Reporter: buster, Assigned: attinasi)
References
()
Details
(Keywords: perf)
Attachments
(3 files)
5.52 KB,
text/html
|
Details | |
3.32 KB,
patch
|
Details | Diff | Splinter Review | |
1.83 KB,
patch
|
Details | Diff | Splinter Review |
To reproduce:
Turn on paint flashing.
Load http://bugzilla.mozilla.org
Type into the text control
You'll see content outside the text control getting repainted. This is because
it's getting reflowed, and it shouldn't.
See nsBlockFrame::DoReflowInlineFrames()
(http://lxr.mozilla.org/seamonkey/source/layout/html/base/src/nsBlockFrame.cpp#4246)
At the point where we're looping to reflow each frame on the line, we should
know if we're doing an incremental reflow, and whether that incr. reflow is
constrained (as in the case of a text control, where incr. reflows within the
text control can't change the dimensions of the text control itself.)
If so, we should only reflow |frame| if it is in the path to the target or the
target itself.
For all other frames on the line, |aLineLayout| and maybe |aState|, will have to
recover the state for |frame| as if it was reflowed. Something like
nsBlockReflowState::RecoverStateFrom() would have to be added to nsLineLayout so
that the line was properly computed.
Kevin: this is the remaining "leaking incremental reflow" problem you've been
seeing.
Cc'ing mcafee@netscape.com since he's interested in typing performance in the
browser.
Comment 4•24 years ago
|
||
This could likely be fixed by fixing bug 43914. I tried at one point, and
failed, causing a regression (bug 56102). I'll revisit...
Depends on: 43914
Assignee | ||
Comment 6•24 years ago
|
||
Assigning milestone
Status: NEW → ASSIGNED
Priority: -- → P1
Target Milestone: --- → mozilla0.9
The patch I just attached fixes the majority of this problem. A better solution
will include expanding the notion of IsIncrementalDamageConstrained() to include
lots of incremental reflow types, not just typing in a text control.
Assignee | ||
Comment 9•24 years ago
|
||
Milestone shift --> Moz 0.8.1
Keywords: patch
Target Milestone: mozilla0.9 → mozilla0.8.1
Assignee | ||
Comment 10•24 years ago
|
||
I've been running with this in since mid February (when buster left) - I just
forgot about it. Maybe you can review it, Chris K. or Chris W.? I'd like to
check it in and take the performance gains if we can.
Comment 11•24 years ago
|
||
Do me a favor and post ``diff -wu'' (because I'm lazy and don't want to have to
apply the patch, but want to see if anything but indentation changed.)
Also, sfraser: is it the case that only plaintext controls have their frame type
as nsLayoutAtoms::textInputFrame? (This is how
nsBlockFrame::IsIncrementalDamangeConstrained() decides whether or not to return
``true''.)
Assignee | ||
Comment 12•24 years ago
|
||
Comment 13•24 years ago
|
||
waterson: i know not the answer to your question
Assignee | ||
Comment 14•24 years ago
|
||
The only references I see to textInputFrame are in layout (where we test it) and
in the GfxTextControlFrame where the frame type is set.
I checked this query:
http://lxr.mozilla.org/seamonkey/search?string=textInputFrame
Seems safe to me...
Comment 15•24 years ago
|
||
Ok, I'm looking at nsGfxTextControlFrame2.cpp, which is what I think is used for
text controls. It's not clear to me whether or not nsGfxTextControlFrame2 is
used for HTML, but I'm pretty sure it's *not*. (Maybe that's the XUL <text> object?)
That said, it looks like nsGfxTextControlFrame2 is used for multi-line text
fields, and I'm a bit worried that these changes might cause weird bustage with
those. Have you made sure that typing in MLE's still works properly? (Especially
with insertion points in the middle of the text, etc., since this affects
pushing and pulling of lines.)
Also, it wouldn't hurt to verify that plaintext mail compose still works right,
as well as doing some sanity checks in the HTML mail compose and editor windows.
If all those check out, r=waterson
Comment 16•24 years ago
|
||
nsGfxTextControlFrame2 is used for single and multi-line text inputs. It is NOT
used for composer, or plain text compose (which use full-blown composers).
Assignee | ||
Comment 17•24 years ago
|
||
OK - I'll do some focused testing on editing single and multiline edit controls.
I have been running with this for a while, filing bugs and the like, but I think
it is only prudent to specifically test the cases you mentioned Chris. Thanks
for the tips and the review.
Assignee | ||
Comment 18•24 years ago
|
||
Well, the patch makes editing large blocks of text in multiline edits _much_
faster, but it does have some problems. I pasted some large blocks of text into
a MLE (this one, in fact) and tried prepending, inserting, and appending text.
Each case seemed fine for a while but ended up with text not showing up, lines
getting glommed together or other visual problems. This one will take some
investigating as I am pretty new to the line/block reflow world.
Pushing out to Mozilla 1.0 to give us lots of time to understand where the
problems are. Thanks, Chris, for the testing clue.
Target Milestone: mozilla0.8.1 → mozilla1.0
Comment 19•24 years ago
|
||
You guys propably know this already, but easy way to see this bug is to
turn on user_pref("layout.reflow.showframecounts", true);
This is also on prefs panel: Edit->Preferences->Debug->Events->"Show frame
counts"
When you type, only count inside input frame should increment, others
should not change, right?
Comment 21•24 years ago
|
||
Wow, this Edit->Preferences->Debug->Events->"Show frame counts" is great...
Comment 22•23 years ago
|
||
*** This bug has been marked as a duplicate of 67235 ***
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → DUPLICATE
You need to log in
before you can comment on or make changes to this bug.
Description
•