[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[E-devel] [Evas] Mouse move events and perfs

Hi there,

Sorry to annoy you again with my performance issues, but I noticed
something really weird, and I'd like to have some advices about it.
So the problem still concerns performances with scrolling a tree or an
iconbox in Etk.

I noticed that when I drag the scrollbar with the mouse, the redraw may
be laggy if the viewport is large. And worse, if the viewport is large
enough, Evas redraws the viewport only when I stop moving the mouse
(i.e. instead of redrawing it at low fps, it doesn't redraw it at all,
it just wait for the mouse to stop).

On the other hand, when I use a timer to scroll the viewport (by
clicking on one of the arrows of the vertical scrollbar for example),
it's not laggy anymore (or much less), scrolling just seems a lot
smoother. The delay of the timer is 1/30 sec.
Now if I start to move the mouse while I'm still pressing the arrow of
the scrollbar, the display become laggier. Really weird since the "mouse
move" event on the arrow is not connected to any callback (except maybe
by edje, the scrollbar being an edje object).

The problem is hard to explain, and hard for you to reproduce since I
guess most of you probably have some pretty powerful computers.
I sort of fixed the problem of "evas not redrawing the viewport while
the mouse is moving" by using an ecore job in the callback connected to
the "drag" signal of edje on the scrollbar: in this callback, if the
job is not created, I just create it; otherwise I do nothing. And in the
job, I emit my own "dragged" signal. That's way, the "dragged" signal
is not emitted each time the mouse is moved, but one time, when the job
is executed. The viewport is then refreshed more often, but it's still

What I do not understand is why when I use a timer to scroll, it seems
smooth and when I use the mouse to drag the scrollbar, it's laggy?!

Have you any idea about that? Maybe the "mouse move" events shouldn't be
emitted so often, and evas should maybe only emit the event
corresponding to the "result" of the mouse movement (i.e. the sum of
all the smaller "mouse move" events). The result could be emitted in
some kind of job (well, evas doesn't have job though) as I have done
with the scrollbar.

Hoping I was clear enough...
Simon TRENY <MoOm>