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