[PATCH 1/2] compositor: don't schedule idle_repaint from calls to repaint
Kristian Høgsberg
krh at bitplanet.net
Mon Oct 24 12:31:35 PDT 2011
On Mon, Oct 24, 2011 at 3:22 PM, Ander Conselvan de Oliveira
<conselvan2 at gmail.com> wrote:
> Em 24-10-2011 18:57, Kristian Høgsberg escreveu:
>>
>> On Mon, Oct 24, 2011 at 9:30 AM, Ander Conselvan de Oliveira
>> <ander.conselvan.de.oliveira at intel.com> wrote:
>>>
>>> wlsc_output_repaint may call wlsc_surface_damage indirectly through
>>> wlsc_output_set_cursor. If this happens in the call made from repaint,
>>> one ends up with repaint being called from both idle_repaint and
>>> wlsc_output_finish_frame.
>>>
>>> Fix this by setting output->repaint_scheduled to 1 before calling
>>> wlsc_output_repaint in the function repaint.
>>
>> Ah, yes, I see. Good catch. I think we want a slightly different fix
>> though. The damage that is added in wlsc_output_set_cursor() gets
>> fixed up in the following repaint, so we need to make sure
>> repaint_needed is cleared to 0 after wlsc_output_repaint(). I would
>> prefer to only clear repaint_scheduled in the else clause of if
>> (output->repaint_needed) in wlsc_output_finish_frame(), and just not
>> set it to 1 in repaint() (see attached patch). That way we only clear
>> repaint_scheduled, when there really isn't a repaint scheduled. Does
>> that work for you?
>
> Yep. That's a lot better.
Cool, committed.
Kristian
More information about the wayland-devel
mailing list