Index: ui/ozone/platform/dri/hardware_display_controller.h |
diff --git a/ui/ozone/platform/dri/hardware_display_controller.h b/ui/ozone/platform/dri/hardware_display_controller.h |
index 000c40c32ae4a2a7c83b72a1a208b36e320b337b..ebba2419aa4d10cc715a1a4169eb6480b897ee5a 100644 |
--- a/ui/ozone/platform/dri/hardware_display_controller.h |
+++ b/ui/ozone/platform/dri/hardware_display_controller.h |
@@ -21,20 +21,21 @@ class Point; |
namespace ui { |
-class NativePixmap; |
class ScanoutBuffer; |
-class ScanoutSurface; |
-typedef std::vector<scoped_refptr<NativePixmap> > NativePixmapList; |
+struct OverlayPlane { |
+ // Simpler constructor for the primary plane. |
+ explicit OverlayPlane(scoped_refptr<ScanoutBuffer> buffer); |
-struct OzoneOverlayPlane { |
- OzoneOverlayPlane(ScanoutSurface* scanout, |
- int z_order, |
- gfx::OverlayTransform plane_transform, |
- const gfx::Rect& display_bounds, |
- const gfx::RectF& crop_rect); |
+ OverlayPlane(scoped_refptr<ScanoutBuffer> buffer, |
+ int z_order, |
+ gfx::OverlayTransform plane_transform, |
+ const gfx::Rect& display_bounds, |
+ const gfx::RectF& crop_rect); |
- ScanoutSurface* scanout; |
+ ~OverlayPlane(); |
+ |
+ scoped_refptr<ScanoutBuffer> buffer; |
int z_order; |
gfx::OverlayTransform plane_transform; |
gfx::Rect display_bounds; |
@@ -42,6 +43,8 @@ struct OzoneOverlayPlane { |
int overlay_plane; |
}; |
+typedef std::vector<OverlayPlane> OverlayPlaneList; |
+ |
// The HDCOz will handle modesettings and scannout operations for hardware |
// devices. |
// |
@@ -105,11 +108,10 @@ class HardwareDisplayController |
~HardwareDisplayController(); |
- // Associate the HDCO with a surface implementation and initialize it. |
- bool BindSurfaceToController(scoped_ptr<ScanoutSurface> surface, |
- drmModeModeInfo mode); |
- |
- void UnbindSurfaceFromController(); |
+ // Performs the initial CRTC configuration. If successful, it will display the |
+ // framebuffer for |primary| with |mode|. |
+ bool Modeset(const OverlayPlane& primary, |
+ drmModeModeInfo mode); |
// Reconfigures the CRTC with the current surface and mode. |
bool Enable(); |
@@ -117,14 +119,14 @@ class HardwareDisplayController |
// Disables the CRTC. |
void Disable(); |
- // Schedules the |surface_|'s framebuffer to be displayed on the next vsync |
+ // Schedules the |overlays|' framebuffers to be displayed on the next vsync |
// event. The event will be posted on the graphics card file descriptor |fd_| |
// and it can be read and processed by |drmHandleEvent|. That function can |
// define the callback for the page flip event. A generic data argument will |
// be presented to the callback. We use that argument to pass in the HDCO |
// object the event belongs to. |
// |
- // Between this call and the callback, the framebuffer used in this call |
+ // Between this call and the callback, the framebuffers used in this call |
// should not be modified in any way as it would cause screen tearing if the |
// hardware performed the flip. Note that the frontbuffer should also not |
// be modified as it could still be displayed. |
@@ -133,8 +135,7 @@ class HardwareDisplayController |
// called again before the page flip occurrs. |
// |
// Returns true if the page flip was successfully registered, false otherwise. |
- bool SchedulePageFlip(const std::vector<OzoneOverlayPlane>& overlays, |
- NativePixmapList* references); |
+ bool SchedulePageFlip(const OverlayPlaneList& overlays); |
// TODO(dnicoara) This should be on the MessageLoop when Ozone can have |
// BeginFrame can be triggered explicitly by Ozone. |
@@ -161,19 +162,14 @@ class HardwareDisplayController |
const drmModeModeInfo& get_mode() const { return mode_; }; |
uint32_t connector_id() const { return connector_id_; } |
uint32_t crtc_id() const { return crtc_id_; } |
- ScanoutSurface* surface() const { |
- return surface_.get(); |
- }; |
uint64_t get_time_of_last_flip() const { |
return time_of_last_flip_; |
}; |
private: |
- ScanoutSurface* GetPrimaryPlane( |
- const std::vector<OzoneOverlayPlane>& overlays); |
- |
- NativePixmapList current_overlay_references_; |
+ OverlayPlaneList current_planes_; |
+ OverlayPlaneList pending_planes_; |
// Object containing the connection to the graphics device and wraps the API |
// calls to control it. |
@@ -186,8 +182,6 @@ class HardwareDisplayController |
drmModeModeInfo mode_; |
- scoped_ptr<ScanoutSurface> surface_; |
- |
scoped_refptr<ScanoutBuffer> cursor_buffer_; |
uint64_t time_of_last_flip_; |