Chromium Code Reviews| Index: ui/ozone/platform/dri/ozone_platform_gbm.cc |
| diff --git a/ui/ozone/platform/dri/ozone_platform_gbm.cc b/ui/ozone/platform/dri/ozone_platform_gbm.cc |
| index 0b118d6be340b48a006f989adeb3fc8f4939358a..20f9450133b9f9acb03ec5ec33220795ca6006ab 100644 |
| --- a/ui/ozone/platform/dri/ozone_platform_gbm.cc |
| +++ b/ui/ozone/platform/dri/ozone_platform_gbm.cc |
| @@ -22,10 +22,10 @@ |
| #include "ui/ozone/platform/dri/dri_window.h" |
| #include "ui/ozone/platform/dri/dri_window_delegate_manager.h" |
| #include "ui/ozone/platform/dri/dri_window_manager.h" |
| -#include "ui/ozone/platform/dri/dri_wrapper.h" |
| #include "ui/ozone/platform/dri/gbm_buffer.h" |
| #include "ui/ozone/platform/dri/gbm_surface.h" |
| #include "ui/ozone/platform/dri/gbm_surface_factory.h" |
| +#include "ui/ozone/platform/dri/gbm_wrapper.h" |
| #include "ui/ozone/platform/dri/native_display_delegate_dri.h" |
| #include "ui/ozone/platform/dri/native_display_delegate_proxy.h" |
| #include "ui/ozone/platform/dri/scanout_buffer.h" |
| @@ -49,34 +49,35 @@ namespace { |
| const char kDefaultGraphicsCardPath[] = "/dev/dri/card0"; |
| -class GbmBufferGenerator : public ScanoutBufferGenerator { |
| +class GlApiLoader { |
| public: |
| - GbmBufferGenerator(DriWrapper* dri) |
| - : glapi_lib_(dlopen("libglapi.so.0", RTLD_LAZY | RTLD_GLOBAL)), |
| - device_(gbm_create_device(dri->get_fd())) { |
| - if (!device_) |
| - LOG(FATAL) << "Unable to initialize gbm for " << kDefaultGraphicsCardPath; |
| - } |
| - virtual ~GbmBufferGenerator() { |
| - gbm_device_destroy(device_); |
| + GlApiLoader() |
| + : glapi_lib_(dlopen("libglapi.so.0", RTLD_LAZY | RTLD_GLOBAL)) {} |
| + |
| + ~GlApiLoader() { |
| if (glapi_lib_) |
| dlclose(glapi_lib_); |
| } |
| - gbm_device* device() const { return device_; } |
| + private: |
| + // HACK: gbm drivers have broken linkage |
|
alexst (slow to review)
2015/01/21 22:35:40
Period at the end of the sentence, and please expl
dnicoara
2015/01/21 22:51:13
Done.
|
| + void* glapi_lib_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(GlApiLoader); |
| +}; |
| + |
| +class GbmBufferGenerator : public ScanoutBufferGenerator { |
| + public: |
| + GbmBufferGenerator() {} |
| + ~GbmBufferGenerator() override {} |
| scoped_refptr<ScanoutBuffer> Create(DriWrapper* drm, |
| const gfx::Size& size) override { |
| - return GbmBuffer::CreateBuffer(drm, device_, SurfaceFactoryOzone::RGBA_8888, |
| - size, true); |
| + return GbmBuffer::CreateBuffer(static_cast<GbmWrapper*>(drm), |
| + SurfaceFactoryOzone::RGBA_8888, size, true); |
| } |
| protected: |
| - // HACK: gbm drivers have broken linkage |
| - void* glapi_lib_; |
| - |
| - gbm_device* device_; |
| - |
| DISALLOW_COPY_AND_ASSIGN(GbmBufferGenerator); |
| }; |
| @@ -146,30 +147,31 @@ class OzonePlatformGbm : public OzonePlatform { |
| } |
| void InitializeGPU() override { |
| + gl_api_loader_.reset(new GlApiLoader()); |
| // Async page flips are supported only on surfaceless mode. |
| - dri_.reset(new DriWrapper(kDefaultGraphicsCardPath, !use_surfaceless_)); |
| - dri_->Initialize(); |
| - buffer_generator_.reset(new GbmBufferGenerator(dri_.get())); |
| + gbm_.reset(new GbmWrapper(kDefaultGraphicsCardPath, !use_surfaceless_)); |
| + gbm_->Initialize(); |
| + buffer_generator_.reset(new GbmBufferGenerator()); |
| screen_manager_.reset( |
| - new ScreenManager(dri_.get(), buffer_generator_.get())); |
| + new ScreenManager(gbm_.get(), buffer_generator_.get())); |
| window_delegate_manager_.reset(new DriWindowDelegateManager()); |
| if (!surface_factory_ozone_) |
| surface_factory_ozone_.reset(new GbmSurfaceFactory(use_surfaceless_)); |
| - surface_factory_ozone_->InitializeGpu( |
| - dri_.get(), buffer_generator_->device(), screen_manager_.get(), |
| - window_delegate_manager_.get()); |
| + surface_factory_ozone_->InitializeGpu(gbm_.get(), screen_manager_.get(), |
| + window_delegate_manager_.get()); |
| scoped_ptr<NativeDisplayDelegateDri> ndd( |
| - new NativeDisplayDelegateDri(dri_.get(), screen_manager_.get())); |
| + new NativeDisplayDelegateDri(gbm_.get(), screen_manager_.get())); |
| ndd->Initialize(); |
| gpu_platform_support_.reset( |
| - new DriGpuPlatformSupport(dri_.get(), window_delegate_manager_.get(), |
| + new DriGpuPlatformSupport(gbm_.get(), window_delegate_manager_.get(), |
| screen_manager_.get(), ndd.Pass())); |
| } |
| private: |
| bool use_surfaceless_; |
| - scoped_ptr<DriWrapper> dri_; |
| + scoped_ptr<GlApiLoader> gl_api_loader_; |
| + scoped_ptr<GbmWrapper> gbm_; |
| scoped_ptr<GbmBufferGenerator> buffer_generator_; |
| scoped_ptr<ScreenManager> screen_manager_; |
| scoped_ptr<DeviceManager> device_manager_; |