Excessive repainting when appending some content that isn't in the visible part of the page

NEW
Unassigned

Status

()

Core
Layout
5 years ago
5 years ago

People

(Reporter: florian, Unassigned)

Tracking

(Blocks: 1 bug)

Firefox Tracking Flags

(Not tracked)

Details

(Whiteboard: [Snappy])

Attachments

(1 attachment)

(Reporter)

Description

5 years ago
Created attachment 694989 [details]
Reduced test case

I noticed this in Instantbird after turning on nglayout.debug.paint_flashing when I saw with the gecko profiler that more than 40% of the time spent while displaying a very large IM conversation is spent in -[NSView displayIfNeeded]

The full profile is http://people.mozilla.com/~bgirard/cleopatra/#report=1b1d4e07a264986d3d1a4a2780cb9601c013b867 (and yes, I've got lots of other things to optimize in my JS code).
Note: it's possible that this profile was taken with a message theme that used a background gradient on <body>. With the gradient the whole content area was repainted, without it only a part kept being repainted at the top, even though nothing had changed there.

Here is a screencast of the surprising painting behavior: http://www.youtube.com/watch?v=QNn7qHUsyiA

I've reduced the testcase (see attachment). In Firefox 17.0.1 (same gecko that Instantbird is currently using), I see a similar behavior: the first line is repainted all the time, but the repainted area has the length of the newly inserted line.
When testing on a current nightly, the whole content area is redisplayed all the time.

I tested only on OS X 10.8.
You need to log in before you can comment on or make changes to this bug.