| Index: ui/ozone/platform/x11/ozone_platform_x11.cc
|
| diff --git a/ui/ozone/platform/x11/ozone_platform_x11.cc b/ui/ozone/platform/x11/ozone_platform_x11.cc
|
| index ae74f0e97bced311ce6aada3c20ec32a6abe6f3c..03ac7cc92662e59bd09d6440cc84658e83e0ba6d 100644
|
| --- a/ui/ozone/platform/x11/ozone_platform_x11.cc
|
| +++ b/ui/ozone/platform/x11/ozone_platform_x11.cc
|
| @@ -12,6 +12,7 @@
|
| #include "base/command_line.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "ui/base/x/x11_util.h"
|
| #include "ui/display/fake_display_delegate.h"
|
| #include "ui/events/platform/x11/x11_event_source_libevent.h"
|
| #include "ui/ozone/common/stub_overlay_manager.h"
|
| @@ -29,22 +30,17 @@ namespace ui {
|
|
|
| namespace {
|
|
|
| -// Returns true if we should operate in Mus mode.
|
| +// Returns true if Ozone is running inside the mus process.
|
| bool RunningInsideMus() {
|
| bool has_channel_handle = base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| "mojo-platform-channel-handle");
|
| return has_channel_handle;
|
| }
|
|
|
| -// Singleton OzonePlatform implementation for Linux X11 platform.
|
| +// Singleton OzonePlatform implementation for X11 platform.
|
| class OzonePlatformX11 : public OzonePlatform {
|
| public:
|
| - OzonePlatformX11() {
|
| - // If we're running in Mus mode both the UI and GPU components of Ozone will
|
| - // be running in the same process. Enable X11 concurrent thread support.
|
| - if (RunningInsideMus())
|
| - XInitThreads();
|
| - }
|
| + OzonePlatformX11() {}
|
|
|
| ~OzonePlatformX11() override {}
|
|
|
| @@ -88,22 +84,24 @@ class OzonePlatformX11 : public OzonePlatform {
|
| return base::MakeUnique<display::FakeDisplayDelegate>();
|
| }
|
|
|
| - void InitializeUI() override {
|
| + void InitializeUI(const InitParams& params) override {
|
| + InitializeCommon(params);
|
| window_manager_.reset(new X11WindowManagerOzone);
|
| - if (!event_source_)
|
| - event_source_.reset(new X11EventSourceLibevent(gfx::GetXDisplay()));
|
| overlay_manager_.reset(new StubOverlayManager());
|
| input_controller_ = CreateStubInputController();
|
| cursor_factory_ozone_.reset(new X11CursorFactoryOzone());
|
| gpu_platform_support_host_.reset(CreateStubGpuPlatformSupportHost());
|
| }
|
|
|
| - void InitializeGPU() override {
|
| - if (!event_source_)
|
| - event_source_.reset(new X11EventSourceLibevent(gfx::GetXDisplay()));
|
| + void InitializeUI() override { NOTREACHED(); }
|
| +
|
| + void InitializeGPU(const InitParams& params) override {
|
| + InitializeCommon(params);
|
| surface_factory_ozone_.reset(new X11SurfaceFactory());
|
| }
|
|
|
| + void InitializeGPU() override { NOTREACHED(); }
|
| +
|
| base::MessageLoop::Type GetMessageLoopTypeForGpu() override {
|
| // When Ozone X11 backend is running use an UI loop to grab Expose events.
|
| // See GLSurfaceGLX and https://crbug.com/326995.
|
| @@ -111,7 +109,27 @@ class OzonePlatformX11 : public OzonePlatform {
|
| }
|
|
|
| private:
|
| - // Objects in the browser process.
|
| + // Performs initialization steps need by both UI and GPU.
|
| + void InitializeCommon(const InitParams& params) {
|
| + // TODO(kylechar): Add DCHECK we only enter InitializeCommon() twice for
|
| + // single process mode.
|
| + if (common_initialized_)
|
| + return;
|
| +
|
| + // If both UI and GPU are running in the same process then XInitThreads()
|
| + // must be the first Xlib call.
|
| + if (params.single_process || RunningInsideMus())
|
| + XInitThreads();
|
| +
|
| + ui::SetDefaultX11ErrorHandlers();
|
| + event_source_.reset(new X11EventSourceLibevent(gfx::GetXDisplay()));
|
| +
|
| + common_initialized_ = true;
|
| + }
|
| +
|
| + bool common_initialized_ = false;
|
| +
|
| + // Objects in the UI process.
|
| std::unique_ptr<X11WindowManagerOzone> window_manager_;
|
| std::unique_ptr<OverlayManagerOzone> overlay_manager_;
|
| std::unique_ptr<InputController> input_controller_;
|
| @@ -121,7 +139,7 @@ class OzonePlatformX11 : public OzonePlatform {
|
| // Objects in the GPU process.
|
| std::unique_ptr<X11SurfaceFactory> surface_factory_ozone_;
|
|
|
| - // Objects in both browser and GPU process.
|
| + // Objects in both UI and GPU process.
|
| std::unique_ptr<X11EventSourceLibevent> event_source_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(OzonePlatformX11);
|
|
|