| Index: ui/ozone/platform/drm/ozone_platform_gbm.cc
|
| diff --git a/ui/ozone/platform/drm/ozone_platform_gbm.cc b/ui/ozone/platform/drm/ozone_platform_gbm.cc
|
| index e321daeff227ddfe6a0127f8e870783e4c43d989..a8a97c4daa5b046933359fdc2fbc888c94b5cdde 100644
|
| --- a/ui/ozone/platform/drm/ozone_platform_gbm.cc
|
| +++ b/ui/ozone/platform/drm/ozone_platform_gbm.cc
|
| @@ -20,10 +20,13 @@
|
| #include "ui/ozone/platform/drm/gpu/drm_device_manager.h"
|
| #include "ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h"
|
| #include "ui/ozone/platform/drm/gpu/drm_gpu_platform_support.h"
|
| +#include "ui/ozone/platform/drm/gpu/drm_gpu_platform_support_proxy.h"
|
| +#include "ui/ozone/platform/drm/gpu/drm_thread.h"
|
| #include "ui/ozone/platform/drm/gpu/gbm_buffer.h"
|
| #include "ui/ozone/platform/drm/gpu/gbm_device.h"
|
| #include "ui/ozone/platform/drm/gpu/gbm_surface.h"
|
| #include "ui/ozone/platform/drm/gpu/gbm_surface_factory.h"
|
| +#include "ui/ozone/platform/drm/gpu/proxy_helpers.h"
|
| #include "ui/ozone/platform/drm/gpu/scanout_buffer.h"
|
| #include "ui/ozone/platform/drm/gpu/screen_manager.h"
|
| #include "ui/ozone/platform/drm/host/drm_cursor.h"
|
| @@ -112,6 +115,36 @@ class GbmDeviceGenerator : public DrmDeviceGenerator {
|
| DISALLOW_COPY_AND_ASSIGN(GbmDeviceGenerator);
|
| };
|
|
|
| +class GbmThread : public DrmThread {
|
| + public:
|
| + GbmThread(bool use_surfaceless) : use_surfaceless_(use_surfaceless) {}
|
| + ~GbmThread() override {}
|
| +
|
| + // DrmThread:
|
| + void Init() override {
|
| + bool use_atomic = false;
|
| +#if defined(USE_DRM_ATOMIC)
|
| + use_atomic = true;
|
| +#endif
|
| +
|
| + device_manager_.reset(new DrmDeviceManager(
|
| + make_scoped_ptr(new GbmDeviceGenerator(use_atomic))));
|
| + buffer_generator_.reset(new GbmBufferGenerator());
|
| + screen_manager_.reset(new ScreenManager(buffer_generator_.get()));
|
| +
|
| + scoped_ptr<DrmGpuDisplayManager> display_manager(
|
| + new DrmGpuDisplayManager(screen_manager_.get(), device_manager_.get()));
|
| + gpu_platform_support_.reset(new DrmGpuPlatformSupport(
|
| + device_manager_.get(), screen_manager_.get(), buffer_generator_.get(),
|
| + display_manager.Pass()));
|
| + }
|
| +
|
| + private:
|
| + bool use_surfaceless_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GbmThread);
|
| +};
|
| +
|
| class OzonePlatformGbm : public OzonePlatform {
|
| public:
|
| OzonePlatformGbm(bool use_surfaceless) : use_surfaceless_(use_surfaceless) {}
|
| @@ -119,7 +152,7 @@ class OzonePlatformGbm : public OzonePlatform {
|
|
|
| // OzonePlatform:
|
| ui::SurfaceFactoryOzone* GetSurfaceFactoryOzone() override {
|
| - return surface_factory_ozone_.get();
|
| + return surface_factory_.get();
|
| }
|
| OverlayManagerOzone* GetOverlayManager() override {
|
| return overlay_manager_.get();
|
| @@ -131,6 +164,9 @@ class OzonePlatformGbm : public OzonePlatform {
|
| return event_factory_ozone_->input_controller();
|
| }
|
| GpuPlatformSupport* GetGpuPlatformSupport() override {
|
| + if (!gpu_platform_support_)
|
| + InitializeDrmThread();
|
| +
|
| return gpu_platform_support_.get();
|
| }
|
| GpuPlatformSupportHost* GetGpuPlatformSupportHost() override {
|
| @@ -187,36 +223,27 @@ class OzonePlatformGbm : public OzonePlatform {
|
| }
|
|
|
| void InitializeGPU() override {
|
| - bool use_atomic = false;
|
| -#if defined(USE_DRM_ATOMIC)
|
| - use_atomic = true;
|
| -#endif
|
| gl_api_loader_.reset(new GlApiLoader());
|
| - drm_device_manager_.reset(new DrmDeviceManager(
|
| - scoped_ptr<DrmDeviceGenerator>(new GbmDeviceGenerator(use_atomic))));
|
| - buffer_generator_.reset(new GbmBufferGenerator());
|
| - screen_manager_.reset(new ScreenManager(buffer_generator_.get()));
|
| - surface_factory_ozone_.reset(new GbmSurfaceFactory(use_surfaceless_));
|
| - surface_factory_ozone_->InitializeGpu(drm_device_manager_.get(),
|
| - screen_manager_.get());
|
| - scoped_ptr<DrmGpuDisplayManager> display_manager(new DrmGpuDisplayManager(
|
| - screen_manager_.get(), drm_device_manager_.get()));
|
| - gpu_platform_support_.reset(new DrmGpuPlatformSupport(
|
| - drm_device_manager_.get(), screen_manager_.get(),
|
| - buffer_generator_.get(), display_manager.Pass()));
|
| + drm_thread_.reset(new GbmThread(use_surfaceless_));
|
| +
|
| + surface_factory_.reset(
|
| + new GbmSurfaceFactory(use_surfaceless_, drm_thread_.get()));
|
| }
|
|
|
| private:
|
| + void InitializeDrmThread() {
|
| + drm_thread_->Start();
|
| + gpu_platform_support_ = drm_thread_->CreateGpuPlatformSupportProxy();
|
| + }
|
| +
|
| // Objects in both processes.
|
| bool use_surfaceless_;
|
|
|
| // Objects in the GPU process.
|
| - scoped_ptr<GbmSurfaceFactory> surface_factory_ozone_;
|
| + scoped_ptr<DrmThread> drm_thread_;
|
| scoped_ptr<GlApiLoader> gl_api_loader_;
|
| - scoped_ptr<DrmDeviceManager> drm_device_manager_;
|
| - scoped_ptr<GbmBufferGenerator> buffer_generator_;
|
| - scoped_ptr<ScreenManager> screen_manager_;
|
| - scoped_ptr<DrmGpuPlatformSupport> gpu_platform_support_;
|
| + scoped_ptr<GbmSurfaceFactory> surface_factory_;
|
| + scoped_ptr<DrmGpuPlatformSupportProxy> gpu_platform_support_;
|
|
|
| // Objects in the Browser process.
|
| scoped_ptr<DeviceManager> device_manager_;
|
|
|