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

Side by Side Diff: ui/ozone/platform/dri/gbm_surface_factory.cc

Issue 371813004: ozone: gbm: Add overlay support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test code Created 6 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/ozone/platform/dri/gbm_surface_factory.h" 5 #include "ui/ozone/platform/dri/gbm_surface_factory.h"
6 6
7 #include <EGL/egl.h> 7 #include <EGL/egl.h>
8 #include <gbm.h> 8 #include <gbm.h>
9 9
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "ui/ozone/platform/dri/buffer_data.h" 11 #include "ui/ozone/platform/dri/buffer_data.h"
12 #include "ui/ozone/platform/dri/dri_vsync_provider.h" 12 #include "ui/ozone/platform/dri/dri_vsync_provider.h"
13 #include "ui/ozone/platform/dri/gbm_buffer.h" 13 #include "ui/ozone/platform/dri/gbm_buffer.h"
14 #include "ui/ozone/platform/dri/gbm_surface.h" 14 #include "ui/ozone/platform/dri/gbm_surface.h"
15 #include "ui/ozone/platform/dri/hardware_display_controller.h" 15 #include "ui/ozone/platform/dri/hardware_display_controller.h"
16 #include "ui/ozone/platform/dri/scanout_surface.h" 16 #include "ui/ozone/platform/dri/scanout_surface.h"
17 #include "ui/ozone/platform/dri/screen_manager.h" 17 #include "ui/ozone/platform/dri/screen_manager.h"
18 #include "ui/ozone/public/native_pixmap.h"
18 #include "ui/ozone/public/surface_ozone_egl.h" 19 #include "ui/ozone/public/surface_ozone_egl.h"
19 20
20 namespace ui { 21 namespace ui {
21 22
22 namespace { 23 namespace {
23 24
24 class GbmSurfaceAdapter : public ui::SurfaceOzoneEGL { 25 class GbmSurfaceAdapter : public ui::SurfaceOzoneEGL {
25 public: 26 public:
26 GbmSurfaceAdapter(const base::WeakPtr<HardwareDisplayController>& controller); 27 GbmSurfaceAdapter(const base::WeakPtr<HardwareDisplayController>& controller);
27 virtual ~GbmSurfaceAdapter(); 28 virtual ~GbmSurfaceAdapter();
28 29
29 // SurfaceOzoneEGL: 30 // SurfaceOzoneEGL:
30 virtual intptr_t GetNativeWindow() OVERRIDE; 31 virtual intptr_t GetNativeWindow() OVERRIDE;
31 virtual bool ResizeNativeWindow(const gfx::Size& viewport_size) OVERRIDE; 32 virtual bool ResizeNativeWindow(const gfx::Size& viewport_size) OVERRIDE;
32 virtual bool OnSwapBuffers() OVERRIDE; 33 virtual bool OnSwapBuffers() OVERRIDE;
33 virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() OVERRIDE; 34 virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() OVERRIDE;
34 virtual bool ScheduleOverlayPlane(int plane_z_order, 35 virtual bool ScheduleOverlayPlane(int plane_z_order,
35 gfx::OverlayTransform plane_transform, 36 gfx::OverlayTransform plane_transform,
36 scoped_refptr<ui::NativePixmap> buffer, 37 scoped_refptr<ui::NativePixmap> buffer,
37 const gfx::Rect& display_bounds, 38 const gfx::Rect& display_bounds,
38 const gfx::RectF& crop_rect) OVERRIDE; 39 const gfx::RectF& crop_rect) OVERRIDE;
39 40
40 private: 41 private:
41 base::WeakPtr<HardwareDisplayController> controller_; 42 base::WeakPtr<HardwareDisplayController> controller_;
43 std::vector<scoped_refptr<NativePixmap> > overlay_refs_;
44 std::vector<scoped_refptr<NativePixmap> > old_overlay_refs_;
45 std::vector<OzoneOverlayPlane> overlays_;
42 46
43 DISALLOW_COPY_AND_ASSIGN(GbmSurfaceAdapter); 47 DISALLOW_COPY_AND_ASSIGN(GbmSurfaceAdapter);
44 }; 48 };
45 49
46 GbmSurfaceAdapter::GbmSurfaceAdapter( 50 GbmSurfaceAdapter::GbmSurfaceAdapter(
47 const base::WeakPtr<HardwareDisplayController>& controller) 51 const base::WeakPtr<HardwareDisplayController>& controller)
48 : controller_(controller) {} 52 : controller_(controller) {}
49 53
50 GbmSurfaceAdapter::~GbmSurfaceAdapter() {} 54 GbmSurfaceAdapter::~GbmSurfaceAdapter() {}
51 55
52 intptr_t GbmSurfaceAdapter::GetNativeWindow() { 56 intptr_t GbmSurfaceAdapter::GetNativeWindow() {
53 if (!controller_) 57 if (!controller_)
54 return 0; 58 return 0;
55 59
56 return reinterpret_cast<intptr_t>( 60 return reinterpret_cast<intptr_t>(
57 static_cast<GbmSurface*>(controller_->surface())->native_surface()); 61 static_cast<GbmSurface*>(controller_->surface())->native_surface());
58 } 62 }
59 63
60 bool GbmSurfaceAdapter::ResizeNativeWindow(const gfx::Size& viewport_size) { 64 bool GbmSurfaceAdapter::ResizeNativeWindow(const gfx::Size& viewport_size) {
61 NOTIMPLEMENTED(); 65 NOTIMPLEMENTED();
62 return false; 66 return false;
63 } 67 }
64 68
65 bool GbmSurfaceAdapter::OnSwapBuffers() { 69 bool GbmSurfaceAdapter::OnSwapBuffers() {
66 if (!controller_) 70 if (!controller_)
67 return false; 71 return false;
72 bool ret = controller_->SchedulePageFlip(&overlays_);
dnicoara 2014/07/07 19:17:54 I think it would be better if HDC takes a referenc
achaulk 2014/07/07 20:18:04 Done.
73 overlays_.clear();
74 old_overlay_refs_.clear();
75 old_overlay_refs_.swap(overlay_refs_);
68 76
69 static_cast<GbmSurface*>(controller_->surface())->LockCurrentDrawable(); 77 if (ret)
70 if (controller_->SchedulePageFlip()) {
71 controller_->WaitForPageFlipEvent(); 78 controller_->WaitForPageFlipEvent();
72 return true;
73 }
74 79
75 return false; 80 return ret;
76 } 81 }
77 82
78 bool GbmSurfaceAdapter::ScheduleOverlayPlane( 83 bool GbmSurfaceAdapter::ScheduleOverlayPlane(
79 int plane_z_order, 84 int plane_z_order,
80 gfx::OverlayTransform plane_transform, 85 gfx::OverlayTransform plane_transform,
81 scoped_refptr<ui::NativePixmap> buffer, 86 scoped_refptr<NativePixmap> buffer,
82 const gfx::Rect& display_bounds, 87 const gfx::Rect& display_bounds,
83 const gfx::RectF& crop_rect) { 88 const gfx::RectF& crop_rect) {
84 NOTIMPLEMENTED(); 89 GbmBuffer* gbm_buffer = static_cast<GbmBuffer*>(buffer.get());
85 return false; 90 if (!gbm_buffer) {
91 LOG(ERROR) << "ScheduleOverlayPlane passed NULL buffer";
92 return false;
93 }
94 overlays_.push_back(OzoneOverlayPlane(
95 gbm_buffer, plane_z_order, plane_transform, display_bounds, crop_rect));
96 overlay_refs_.push_back(buffer);
97 return true;
86 } 98 }
87 99
88 scoped_ptr<gfx::VSyncProvider> GbmSurfaceAdapter::CreateVSyncProvider() { 100 scoped_ptr<gfx::VSyncProvider> GbmSurfaceAdapter::CreateVSyncProvider() {
89 return scoped_ptr<gfx::VSyncProvider>(new DriVSyncProvider(controller_)); 101 return scoped_ptr<gfx::VSyncProvider>(new DriVSyncProvider(controller_));
90 } 102 }
91 103
92 } // namespace 104 } // namespace
93 105
94 GbmSurfaceFactory::GbmSurfaceFactory() 106 GbmSurfaceFactory::GbmSurfaceFactory()
95 : DriSurfaceFactory(NULL, NULL), 107 : DriSurfaceFactory(NULL, NULL),
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 scoped_refptr<ui::NativePixmap> GbmSurfaceFactory::CreateNativePixmap( 188 scoped_refptr<ui::NativePixmap> GbmSurfaceFactory::CreateNativePixmap(
177 gfx::Size size, 189 gfx::Size size,
178 BufferFormat format) { 190 BufferFormat format) {
179 scoped_refptr<GbmBuffer> buf = new GbmBuffer(device_, drm_, size); 191 scoped_refptr<GbmBuffer> buf = new GbmBuffer(device_, drm_, size);
180 if (!buf->InitializeBuffer(format, true)) { 192 if (!buf->InitializeBuffer(format, true)) {
181 return NULL; 193 return NULL;
182 } 194 }
183 return buf; 195 return buf;
184 } 196 }
185 197
198 bool GbmSurfaceFactory::CanShowPrimaryPlaneAsOverlay() {
199 return false;
200 }
201
186 } // namespace ui 202 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698