intel / ozone-wayland

Wayland implementation for Chromium Ozone classes
BSD 3-Clause "New" or "Revised" License
218 stars 82 forks source link

IPC message loop stops responsding on a minimized/raised window #295

Closed Tarnyko closed 10 years ago

Tarnyko commented 10 years ago

When a window has been minimized, it freezes, and will eventually be killed by the GPU watchdog (unless the user re-focuses it manually with Win+Tab). Here are technical details :

"ozone/ui/events/remote_event_dispatcher.cc" contains a "Dispatch()" function responsible for relaying events :

Dispatch(new WaylandInput_PointerEnter(handle, x, y));

which translates to :

dispatcher->sender->Send (IPC::Message* message); loop->message_loop_proxy()->PostTask(FROM_HERE, task);

so a mouse pointer event, for instance, is posted on the main loop, and finally catched in "ozone/ui/events/event_converter_ozone_wayland.cc"

On a minimized window, only one event is processed, after which the PostTask() function has no effect and no IPC message are sent anymore. Manually iterating though windows with Win+Tab seems to "resume" the loop and fix the problem.

kalyankondapally commented 10 years ago

@Tarnyko Did you check if events for a minimized window are even dispatched ? or are they ignored later in the chain ?

Tarnyko commented 10 years ago

@kalyankondapally No, they are not. They go as far as Dispatch(), but nothing happens after that.

At the compositor level, (ui/compositor/compositor.cc) ScheduleDraw() calls are not issued anymore. I am trying to go this way, because my attempts to find where is sleeps/fireezes were unsucessful ; I am mostly clueless about what really happens, though.

The wayland part of the GPU process Wayland_DisplayRun()) is still iterating and dispatching things, so my wild guess is that the browser process considers the minimized window should not process any events anymore. Which is clearly wrong.

kalyankondapally commented 10 years ago

@Tarnyko K. One thing to check would be if we are setting the right state in DesktopRootWindowHost after the window gets restored.

@joone As you have Tizen env, can you help @Tarnyko debug this issue.

kalyankondapally commented 10 years ago

Fixed by https://github.com/01org/ozone-wayland/commit/a4d2541b4d55efbb222bec66c8de226eaa26b58e