1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef UI_OZONE_PLATFORM_DRM_GPU_CRTC_COMMIT_REQUEST_H_
6 #define UI_OZONE_PLATFORM_DRM_GPU_CRTC_COMMIT_REQUEST_H_
7 
8 #include <stddef.h>
9 #include <stdint.h>
10 #include <xf86drmMode.h>
11 
12 #include "ui/ozone/platform/drm/gpu/drm_device.h"
13 #include "ui/ozone/platform/drm/gpu/drm_overlay_plane.h"
14 
15 namespace ui {
16 
17 struct HardwareDisplayPlaneList;
18 
19 class CrtcCommitRequest;
20 using CommitRequest = std::vector<CrtcCommitRequest>;
21 
22 // Container holding information for a single CRTC that need to be modeset.
23 // TODO(markyacoub): PAGE_FLIP could re-use the same CrtcCommitRequest. The
24 // difference between MODESET and PAGE_FLIP are minimal.
25 class CrtcCommitRequest {
26  public:
27   CrtcCommitRequest(const CrtcCommitRequest& other);
28   ~CrtcCommitRequest();
29 
30   static CrtcCommitRequest EnableCrtcRequest(
31       uint32_t crtc_id,
32       uint32_t connector_id,
33       drmModeModeInfo mode,
34       HardwareDisplayPlaneList* plane_list,
35       DrmOverlayPlaneList overlays);
36 
37   static CrtcCommitRequest DisableCrtcRequest(
38       uint32_t crtc_id,
39       uint32_t connector_id,
40       HardwareDisplayPlaneList* plane_list = nullptr);
41 
should_enable()42   bool should_enable() const { return should_enable_; }
crtc_id()43   uint32_t crtc_id() const { return crtc_id_; }
connector_id()44   uint32_t connector_id() const { return connector_id_; }
mode()45   const drmModeModeInfo& mode() const { return mode_; }
plane_list()46   HardwareDisplayPlaneList* plane_list() const { return plane_list_; }
overlays()47   const DrmOverlayPlaneList& overlays() const { return overlays_; }
48 
49  private:
50   CrtcCommitRequest(uint32_t crtc_id,
51                     uint32_t connector_id,
52                     drmModeModeInfo mode,
53                     HardwareDisplayPlaneList* plane_list,
54                     DrmOverlayPlaneList overlays,
55                     bool should_enable);
56 
57   const bool should_enable_ = false;
58   const uint32_t crtc_id_ = 0;
59   const uint32_t connector_id_ = 0;
60   const drmModeModeInfo mode_ = {};
61   HardwareDisplayPlaneList* plane_list_ = nullptr;
62   const DrmOverlayPlaneList overlays_;
63 };
64 
65 }  // namespace ui
66 
67 #endif  // UI_OZONE_PLATFORM_DRM_GPU_CRTC_COMMIT_REQUEST_H_
68