commit | b960daf4e690a064e952eda23bfd87c44580f31c | [log] [tgz] |
---|---|---|
author | Tom Anderson <thomasanderson@chromium.org> | Wed Aug 19 17:26:17 2020 |
committer | Commit Bot <commit-bot@chromium.org> | Wed Aug 19 17:26:17 2020 |
tree | 78679193d691939774da694f58044c1f43fbcc48 | |
parent | a929446fd01e0e249552b93aeef129a5ee12d4f3 [diff] |
[XProto] Ensure x11::Connection is only used on a single thread 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}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure .
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.