Index: ui/ozone/platform/dri/gbm_surface_factory.cc |
diff --git a/ui/ozone/platform/dri/gbm_surface_factory.cc b/ui/ozone/platform/dri/gbm_surface_factory.cc |
index 69f7af88ae5d6eba360c3d179efdabcfe17625c0..67508ae7e5053d5c8bea59dd2ad4378339a9f641 100644 |
--- a/ui/ozone/platform/dri/gbm_surface_factory.cc |
+++ b/ui/ozone/platform/dri/gbm_surface_factory.cc |
@@ -8,127 +8,15 @@ |
#include <gbm.h> |
#include "base/files/file_path.h" |
-#include "ui/ozone/platform/dri/dri_vsync_provider.h" |
#include "ui/ozone/platform/dri/gbm_buffer.h" |
#include "ui/ozone/platform/dri/gbm_surface.h" |
-#include "ui/ozone/platform/dri/hardware_display_controller.h" |
-#include "ui/ozone/platform/dri/scanout_surface.h" |
+#include "ui/ozone/platform/dri/gbm_surfaceless.h" |
#include "ui/ozone/platform/dri/screen_manager.h" |
#include "ui/ozone/public/native_pixmap.h" |
#include "ui/ozone/public/surface_ozone_egl.h" |
namespace ui { |
-namespace { |
- |
-class GbmSurfaceAdapter : public ui::SurfaceOzoneEGL { |
- public: |
- GbmSurfaceAdapter( |
- gbm_device* device, |
- DriWrapper* dri, |
- const base::WeakPtr<HardwareDisplayController>& controller); |
- virtual ~GbmSurfaceAdapter(); |
- |
- bool Initialize(); |
- |
- // SurfaceOzoneEGL: |
- virtual intptr_t GetNativeWindow() OVERRIDE; |
- virtual bool ResizeNativeWindow(const gfx::Size& viewport_size) OVERRIDE; |
- virtual bool OnSwapBuffers() OVERRIDE; |
- virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() OVERRIDE; |
- virtual bool ScheduleOverlayPlane(int plane_z_order, |
- gfx::OverlayTransform plane_transform, |
- scoped_refptr<ui::NativePixmap> buffer, |
- const gfx::Rect& display_bounds, |
- const gfx::RectF& crop_rect) OVERRIDE; |
- |
- private: |
- gbm_device* device_; |
- DriWrapper* dri_; |
- scoped_ptr<GbmSurface> surface_; |
- base::WeakPtr<HardwareDisplayController> controller_; |
- OverlayPlaneList overlays_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GbmSurfaceAdapter); |
-}; |
- |
-GbmSurfaceAdapter::GbmSurfaceAdapter( |
- gbm_device* device, |
- DriWrapper* dri, |
- const base::WeakPtr<HardwareDisplayController>& controller) |
- : device_(device), dri_(dri), controller_(controller) {} |
- |
-GbmSurfaceAdapter::~GbmSurfaceAdapter() {} |
- |
-bool GbmSurfaceAdapter::Initialize() { |
- if (controller_) { |
- surface_.reset( |
- new GbmSurface(device_, |
- dri_, |
- gfx::Size(controller_->get_mode().hdisplay, |
- controller_->get_mode().vdisplay))); |
- return surface_->Initialize(); |
- } |
- |
- return false; |
-} |
- |
-intptr_t GbmSurfaceAdapter::GetNativeWindow() { |
- if (!controller_) |
- return 0; |
- |
- return reinterpret_cast<intptr_t>(surface_->native_surface()); |
-} |
- |
-bool GbmSurfaceAdapter::ResizeNativeWindow(const gfx::Size& viewport_size) { |
- |
- return true; |
-} |
- |
-bool GbmSurfaceAdapter::OnSwapBuffers() { |
- if (!controller_) |
- return false; |
- if (surface_) { |
- surface_->PreSwapBuffers(); |
- overlays_.push_back(OverlayPlane(surface_->backbuffer())); |
- } |
- |
- bool flip_succeeded = controller_->SchedulePageFlip(overlays_); |
- overlays_.clear(); |
- if (flip_succeeded) |
- controller_->WaitForPageFlipEvent(); |
- |
- if (surface_) |
- surface_->SwapBuffers(); |
- |
- return flip_succeeded; |
-} |
- |
-bool GbmSurfaceAdapter::ScheduleOverlayPlane( |
- int plane_z_order, |
- gfx::OverlayTransform plane_transform, |
- scoped_refptr<NativePixmap> buffer, |
- const gfx::Rect& display_bounds, |
- const gfx::RectF& crop_rect) { |
- GbmPixmap* pixmap = static_cast<GbmPixmap*>(buffer.get()); |
- if (!pixmap) { |
- LOG(ERROR) << "ScheduleOverlayPlane passed NULL buffer"; |
- return false; |
- } |
- overlays_.push_back(OverlayPlane(pixmap->buffer(), |
- plane_z_order, |
- plane_transform, |
- display_bounds, |
- crop_rect)); |
- return true; |
-} |
- |
-scoped_ptr<gfx::VSyncProvider> GbmSurfaceAdapter::CreateVSyncProvider() { |
- return scoped_ptr<gfx::VSyncProvider>(new DriVSyncProvider(controller_)); |
-} |
- |
-} // namespace |
- |
GbmSurfaceFactory::GbmSurfaceFactory(bool allow_surfaceless) |
: DriSurfaceFactory(NULL, NULL), |
device_(NULL), |
@@ -204,19 +92,24 @@ bool GbmSurfaceFactory::LoadEGLGLES2Bindings( |
return true; |
} |
-scoped_ptr<ui::SurfaceOzoneEGL> GbmSurfaceFactory::CreateEGLSurfaceForWidget( |
- gfx::AcceleratedWidget w) { |
+scoped_ptr<SurfaceOzoneEGL> GbmSurfaceFactory::CreateEGLSurfaceForWidget( |
+ gfx::AcceleratedWidget widget) { |
CHECK(state_ == INITIALIZED); |
- ResetCursor(w); |
- |
- scoped_ptr<GbmSurfaceAdapter> surface( |
- new GbmSurfaceAdapter(device_, |
- drm_, |
- screen_manager_->GetDisplayController(w))); |
- if (!allow_surfaceless_ && !surface->Initialize()) |
- return scoped_ptr<SurfaceOzoneEGL>(); |
- |
- return surface.PassAs<SurfaceOzoneEGL>(); |
+ ResetCursor(widget); |
+ |
+ if (allow_surfaceless_) { |
+ return scoped_ptr<SurfaceOzoneEGL>( |
+ new GbmSurfaceless(screen_manager_->GetDisplayController(widget))); |
+ } else { |
+ scoped_ptr<GbmSurface> surface( |
+ new GbmSurface(screen_manager_->GetDisplayController(widget), |
+ device_, |
+ drm_)); |
+ if (!surface->Initialize()) |
+ return scoped_ptr<SurfaceOzoneEGL>(); |
+ |
+ return surface.PassAs<SurfaceOzoneEGL>(); |
+ } |
} |
scoped_refptr<ui::NativePixmap> GbmSurfaceFactory::CreateNativePixmap( |