Closed
Bug 651469
Opened 14 years ago
Closed 14 years ago
Scrolling up renders page unreadable (X11 with GL layers)
Categories
(Core :: Graphics, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: bjacob, Assigned: mattwoodrow)
References
()
Details
Attachments
(2 files, 1 obsolete file)
6.46 KB,
patch
|
roc
:
review+
|
Details | Diff | Splinter Review |
2.25 KB,
patch
|
roc
:
review+
|
Details | Diff | Splinter Review |
Here on linux x86-64, proprietary NVIDIA driver, with layers.acceleration.force-enabled=true, scrolling is completely broken on this page:
http://zrusin.blogspot.com/
Reporter | ||
Comment 1•14 years ago
|
||
To be more precise, the problem seems to be only/mostly with scrolling up, as opposed to scrolling down.
Summary: Scrolling renders page unreadable (X11 with GL layers) → Scrolling up renders page unreadable (X11 with GL layers)
Reporter | ||
Comment 2•14 years ago
|
||
The timing makes it plausible that this might be a regression from bug 640082, but I haven't verified this.
Assignee | ||
Comment 3•14 years ago
|
||
Interestingly this happens when scrolling up the page (moving pixels down on the backing surface). With Image surfaces copying up is the problem, so I guess this means our internal data is Y-inverted.
If this ends up being a bottleneck we could try detect the flip (is it always the case for X surface?) and only allocate a temporary if we need one.
XCopyArea can handle self copies without manual intervention, but it is apparently rather slow. See http://lists.freedesktop.org/archives/cairo/2009-June/017290.html
Attachment #529895 -
Flags: review?(roc)
I actually think that gfxASurface::MovePixels should use the safe, copying version by default, and a "fast" self-copy should be used in each backend where we know it works. I think gfxWindowsSurface and gfxQuartzSurface can use the fast implementation; gfxImageSurface already has its own implementation.
Oh, I guess D2D can use the fast version too.
A protected helper method in gfxASurface could implement the direct self-copy so each subclass only needs a few lines of code to use it.
Assignee | ||
Comment 8•14 years ago
|
||
Sure, works for me.
Attachment #529895 -
Attachment is obsolete: true
Attachment #529895 -
Flags: review?(roc)
Attachment #529911 -
Flags: review?(roc)
Comment on attachment 529911 [details] [diff] [review]
Add FastMovePixels to gfxASurface and use it where appropriate
Review of attachment 529911 [details] [diff] [review]:
Attachment #529911 -
Flags: review?(roc) → review+
Do you have a testcase for this that could be turned into a reftest?
Assignee | ||
Comment 11•14 years ago
|
||
Fails without the patch, passes with.
Attachment #529922 -
Flags: review?(roc)
Comment on attachment 529922 [details] [diff] [review]
Add new scrolling reftest that scrolls backwards
Review of attachment 529922 [details] [diff] [review]:
lovely!
Attachment #529922 -
Flags: review?(roc) → review+
Assignee | ||
Comment 13•14 years ago
|
||
http://hg.mozilla.org/mozilla-central/rev/a0fd33b098f6
http://hg.mozilla.org/mozilla-central/rev/e861aabf1631
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
Updated•13 years ago
|
Assignee: nobody → matt.woodrow+bugzilla
Comment 14•13 years ago
|
||
(In reply to Matt Woodrow (:mattwoodrow) from comment #3)
> XCopyArea can handle self copies without manual intervention, but it is
> apparently rather slow. See
> http://lists.freedesktop.org/archives/cairo/2009-June/017290.html
Quoting that post:
> When an overlapped XCopyArea is issued - as is typical for a short
> scroll in any direction - XCopyArea breaks up the request into
> individual scanline fetches and puts. This produces correct results,
> but because each scanline is done via two full Pixman call chains, it is
> hideously slow. By that I mean that it can be about a third of the
> speed of a full copy-out followed by copy-back.
FWIW it looks like this is describing the fb implementation, the one used when the ddx graphics driver doesn't provide it's own implementation.
You need to log in
before you can comment on or make changes to this bug.
Description
•