Closed Bug 972728 Opened 6 years ago Closed 6 years ago

Basic compositor doesn't invalidate on wakeup

Categories

(Core :: Graphics: Layers, defect)

x86_64
Linux
defect
Not set

Tracking

()

RESOLVED FIXED
mozilla30

People

(Reporter: billm, Assigned: billm)

References

Details

Attachments

(1 file)

If I put my laptop to sleep and then wake it up when the basic compositor is in use on Linux, the screen doesn't refresh. It's just an empty gray rectangle.
Another instance of this: if I open "About Nightly" (to download an update), most of the window isn't ever drawn.
Is this a recent regression?

The code to only composite the areas that have changed was broken until recently, so that would be a likely cause. I wouldn't be surprised if there are bugs where we miss a change, and don't composite that area of the window.
Yes, I don't remember seeing this before those fixes landed.

I've also had problems where, when I visit a new web page, the screen doesn't update right away. Hopefully it's caused by the same issue as the wakeup problem, which is easier to reproduce. If it isn't, I'll file a separate bug once we figure out the problem in this bug.
Try removing the gdk_screen_is_composited condition from this if statement:

http://mxr.mozilla.org/mozilla-central/source/widget/gtk/nsWindow.cpp#2054

If that doesn't work, then I guess we can disable the invalidation stuff :(
(In reply to Matt Woodrow (:mattwoodrow) from comment #4)
> Try removing the gdk_screen_is_composited condition from this if statement:
> 
> http://mxr.mozilla.org/mozilla-central/source/widget/gtk/nsWindow.cpp#2054
> 
> If that doesn't work, then I guess we can disable the invalidation stuff :(

I think that fixes the problem. I didn't see it in my testing at least, while I did without the change. What do you think is going on?
I can't remember why we made that condition specific to non-composited window managers, but it no longer makes any sense to me.

What I think is happening, is while sleeping, the window manager discarded it's copy of our pixels. Then on wakeup, it sends an OnExpose() event to ask us to redraw them.

We send a message to the compositor, but the invalid region is empty (since nothing has actually changed) and we don't draw anything. Sadness ensues.

Anytime the OS asks us to repaint a certain area using this event, we should probably do what it wants.
Sounds good to me. Thanks.
Assignee: nobody → wmccloskey
Status: NEW → ASSIGNED
Attachment #8387112 - Flags: review?(matt.woodrow)
Attachment #8387112 - Flags: review?(matt.woodrow) → review+
https://hg.mozilla.org/mozilla-central/rev/0654a11c120a
Status: ASSIGNED → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla30
You need to log in before you can comment on or make changes to this bug.