This fixes bug 1109422 which is caused by using the same
x11::Connection from both the GPU main thread and the viz compositor
thread.
Summary of changes:
* x11::Connection is now stored in TLS instead of as a singleton. This
does not affect the browser process, but it means the GPU process
will now have 2 connections: 1 for the main thread and 1 for the viz
compositor thread. Additionally, chrome will have 3 connections
when running in single-process-mode.
* In X11 and Ozone/X11 contexts, the viz compositor thread must be a
UI thread now so it can dispatch X events. This required making
MessagePumpGlib compatible with multiple threads.
* The GPU sandbox presents a challenge: we cannot open an X11
connection once it's up, since the socket() and connect()
syscalls are blocked. To workaround this, we must open the viz
compositor X11 connection the same time we open the main thread's
X11 connection. For now, we stuff it in ui::X11UiThread as an
obnoxious global variable.
XShmImagePool and X11SoftwareBitmapPresenter are simplified as they
are now only used on one thread. Also CreateVizCompositorThread() no
longer requires a TaskRunner argument.
With this change, once we remove the rest of Xlib, we can remove any
locking when using X11.
BUG=1066670,1078392,1109422
R=nickdiego,sky,msisov,rjkroege
Change-Id: If122c071a2eef38ba0469fe592ab9cc71ccf6011
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2343314
Auto-Submit: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Robert Kroeger <rjkroege@chromium.org>
Reviewed-by: Maksim Sisov (GMT+3) <msisov@igalia.com>
Reviewed-by: Nick Yamane <nickdiego@igalia.com>
Reviewed-by: kylechar <kylechar@chromium.org>
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799697}