Ungrabbed pointer motion events over a client window area don't even
reach mutter in X compositor mode, but as a wayland compositor we
process those events which ends up in a call stack like:
- meta_window_handle_ungrabbed_event
- meta_ui_frame_handle_event
- handle_motion_notify_event
- get_control
- meta_ui_frame_calc_geometry
Computing frame geometry is a relatively CPU expensive operation and
doing it on every motion event over a client window is pointless work
since we aren't going to change the cursor or prelight any frame
widget.
This commit special cases the determination of
META_FRAME_CONTROL_CLIENT_AREA using a much faster method. When
continuously moving the pointer over an X (client) window, it results
in a ~40% decrease in mutter cpu usage.
https://bugzilla.gnome.org/show_bug.cgi?id=779436