Repaint Issue
Ander Conselvan de Oliveira
conselvan2 at gmail.com
Wed Sep 12 00:53:59 PDT 2012
On 09/11/2012 05:48 PM, Abhijit Potnis wrote:
> > Repaint is supposed to be as-needed only, not periodical, but clearly
> > some trigger is missing. Maybe a new surface is not assigned an
> output
> > until redraw, and redraw does not happen until there is damage, and
> > damage is not applied, if the window is not mapped? Or something like
> > that, chicken-and-egg problem with assigning an output. A wild
> guess...
> >
>
>
> Ya, I too feel so. I see that the final weston_output_finish_frame()
> call after
> a client is killed arrives with output->repaint_needed set to 0, and hence
> weston_output_repaint is not called.
If there is nothing else updating the screen you would see this happen
when the first frame without the killed surface is shown on the screen.
So this is expect, although it seems you're getting this one frame too
early.
> How does the window unmap-ing
> process occur ? Is this expected ?
Unmapping a surface involves damaging the area below the surface so it
gets repainted on the next frame, removing the surface from the surface
list, resetting keyboard and pointer focus if appropriate and scheduling
a repaint. All this is done in weston_surface_unmap().
It seems the problem you are seeing is caused by a failure to schedule a
repaint. Looking at weston_surface_schedule_repaint(), the only possible
explanation for the failure would be the surface having a bad
output_mask. So I would advise you to first verify if the output_mask is
valid (i.e., the bits for the outputs the surface is in are set, should
be 1 if you have just one output) and if that is invalid, try to figure
out why you end up with a bad value. You probably want to look at
weston_surface_assign_output() for that.
Cheers,
Ander
More information about the wayland-devel
mailing list