Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Unified Diff: ui/ozone/platform/dri/ozone_platform_gbm.cc

Issue 812933003: [Ozone-Dri] Create GbmWrapper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pass-wrapper
Patch Set: Update comments Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..58e1da58cae3b6249c902e756e35803dfff9cd30 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,38 @@ 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. The Mesa DRI driver references
+ // symbols in the libglapi library however it does not explicitly link against
+ // it. That caused linkage errors when running an application that does not
+ // explicitly link against libglapi.
+ 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 +150,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_;
« ui/ozone/platform/dri/gbm_wrapper.h ('K') | « ui/ozone/platform/dri/gbm_wrapper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698