| Index: ui/gfx/ozone/dri/dri_surface_factory.cc
|
| diff --git a/ui/gfx/ozone/dri/dri_surface_factory.cc b/ui/gfx/ozone/dri/dri_surface_factory.cc
|
| index 661944a6aa1ab692d820772f35b6016435bc0eba..a6be37f125511ad1d51c9fb14d6cb3c0c5d8c343 100644
|
| --- a/ui/gfx/ozone/dri/dri_surface_factory.cc
|
| +++ b/ui/gfx/ozone/dri/dri_surface_factory.cc
|
| @@ -17,6 +17,7 @@
|
| #include "ui/gfx/ozone/dri/dri_vsync_provider.h"
|
| #include "ui/gfx/ozone/dri/dri_wrapper.h"
|
| #include "ui/gfx/ozone/dri/hardware_display_controller.h"
|
| +#include "ui/gfx/ozone/surface_ozone_base.h"
|
|
|
| namespace gfx {
|
|
|
| @@ -114,6 +115,37 @@ void UpdateCursorImage(DriSurface* cursor, const SkBitmap& image) {
|
| canvas->drawBitmapRectToRect(image, &damage, damage);
|
| }
|
|
|
| +// Adapter from SurfaceOzone to DriSurfaceFactory
|
| +//
|
| +// This class is derived from SurfaceOzone and owned by the compositor.
|
| +//
|
| +// For DRI the hadware surface & canvas are owned by the platform, so
|
| +// the compositor merely owns this proxy object.
|
| +//
|
| +// TODO(spang): Should the compositor own any bits of the DriSurface?
|
| +class DriSurfaceAdapter : public SurfaceOzoneBase {
|
| + public:
|
| + DriSurfaceAdapter(gfx::AcceleratedWidget w, DriSurfaceFactory* dri)
|
| + : widget_(w), dri_(dri) {}
|
| + virtual ~DriSurfaceAdapter() {}
|
| +
|
| + // SurfaceOzone:
|
| + virtual bool InitializeCanvas() OVERRIDE { return true; }
|
| + virtual skia::RefPtr<SkCanvas> GetCanvas() OVERRIDE {
|
| + return skia::SharePtr(dri_->GetCanvasForWidget(widget_));
|
| + }
|
| + virtual bool PresentCanvas() OVERRIDE {
|
| + return dri_->SchedulePageFlip(widget_);
|
| + }
|
| + virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() OVERRIDE {
|
| + return dri_->CreateVSyncProvider(widget_);
|
| + }
|
| +
|
| + private:
|
| + gfx::AcceleratedWidget widget_;
|
| + DriSurfaceFactory* dri_;
|
| +};
|
| +
|
| } // namespace
|
|
|
| DriSurfaceFactory::DriSurfaceFactory()
|
| @@ -176,7 +208,7 @@ gfx::AcceleratedWidget DriSurfaceFactory::GetAcceleratedWidget() {
|
| return kDefaultWidgetHandle;
|
| }
|
|
|
| -gfx::AcceleratedWidget DriSurfaceFactory::RealizeAcceleratedWidget(
|
| +scoped_ptr<SurfaceOzone> DriSurfaceFactory::CreateSurfaceForWidget(
|
| gfx::AcceleratedWidget w) {
|
| CHECK(state_ == INITIALIZED);
|
| // TODO(dnicoara) Once we can handle multiple displays this needs to be
|
| @@ -190,7 +222,7 @@ gfx::AcceleratedWidget DriSurfaceFactory::RealizeAcceleratedWidget(
|
| // hardware display.
|
| if (!InitializeControllerForPrimaryDisplay(drm_.get(), controller_.get())) {
|
| LOG(ERROR) << "Failed to initialize controller";
|
| - return gfx::kNullAcceleratedWidget;
|
| + return scoped_ptr<SurfaceOzone>();
|
| }
|
|
|
| // Create a surface suitable for the current controller.
|
| @@ -200,7 +232,7 @@ gfx::AcceleratedWidget DriSurfaceFactory::RealizeAcceleratedWidget(
|
|
|
| if (!surface->Initialize()) {
|
| LOG(ERROR) << "Failed to initialize surface";
|
| - return gfx::kNullAcceleratedWidget;
|
| + return scoped_ptr<SurfaceOzone>();
|
| }
|
|
|
| // Bind the surface to the controller. This will register the backing buffers
|
| @@ -208,13 +240,13 @@ gfx::AcceleratedWidget DriSurfaceFactory::RealizeAcceleratedWidget(
|
| // takes ownership of the surface.
|
| if (!controller_->BindSurfaceToController(surface.Pass())) {
|
| LOG(ERROR) << "Failed to bind surface to controller";
|
| - return gfx::kNullAcceleratedWidget;
|
| + return scoped_ptr<SurfaceOzone>();
|
| }
|
|
|
| // Initial cursor set.
|
| ResetCursor();
|
|
|
| - return reinterpret_cast<gfx::AcceleratedWidget>(controller_->get_surface());
|
| + return make_scoped_ptr<SurfaceOzone>(new DriSurfaceAdapter(w, this));
|
| }
|
|
|
| bool DriSurfaceFactory::LoadEGLGLES2Bindings(
|
| @@ -223,12 +255,6 @@ bool DriSurfaceFactory::LoadEGLGLES2Bindings(
|
| return false;
|
| }
|
|
|
| -bool DriSurfaceFactory::AttemptToResizeAcceleratedWidget(
|
| - gfx::AcceleratedWidget w,
|
| - const gfx::Rect& bounds) {
|
| - return false;
|
| -}
|
| -
|
| bool DriSurfaceFactory::SchedulePageFlip(gfx::AcceleratedWidget w) {
|
| CHECK(state_ == INITIALIZED);
|
| // TODO(dnicoara) Change this CHECK once we're running with the threaded
|
| @@ -264,7 +290,8 @@ bool DriSurfaceFactory::SchedulePageFlip(gfx::AcceleratedWidget w) {
|
| SkCanvas* DriSurfaceFactory::GetCanvasForWidget(
|
| gfx::AcceleratedWidget w) {
|
| CHECK(state_ == INITIALIZED);
|
| - return reinterpret_cast<DriSurface*>(w)->GetDrawableForWidget();
|
| + CHECK_EQ(kDefaultWidgetHandle, w);
|
| + return controller_->get_surface()->GetDrawableForWidget();
|
| }
|
|
|
| scoped_ptr<gfx::VSyncProvider> DriSurfaceFactory::CreateVSyncProvider(
|
|
|