Index: ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc |
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc |
index 793db8f4e3a9d606eb536f1a77f81a58f4268b98..a74c38a09351ffd2ab0ead510b7816fcaebe05d2 100644 |
--- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc |
+++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc |
@@ -5,15 +5,23 @@ |
#include "ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.h" |
#include "base/bind.h" |
+#include "ui/ozone/platform/drm/gpu/crtc_controller.h" |
#include "ui/ozone/platform/drm/gpu/drm_device.h" |
#include "ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.h" |
#include "ui/ozone/platform/drm/gpu/scanout_buffer.h" |
namespace ui { |
-static void AtomicPageFlipCallback(unsigned int /* frame */, |
- unsigned int /* seconds */, |
- unsigned int /* useconds */) { |
+static void AtomicPageFlipCallback( |
+ std::vector<base::WeakPtr<CrtcController>> crtcs, |
+ unsigned int frame, |
+ unsigned int seconds, |
+ unsigned int useconds) { |
+ for (auto& crtc : crtcs) { |
+ auto* crtc_ptr = crtc.get(); |
+ if (crtc_ptr) |
+ crtc_ptr->OnPageFlipEvent(frame, seconds, useconds); |
+ } |
} |
HardwareDisplayPlaneManagerAtomic::HardwareDisplayPlaneManagerAtomic() { |
@@ -39,28 +47,25 @@ bool HardwareDisplayPlaneManagerAtomic::Commit( |
} |
} |
+ std::vector<base::WeakPtr<CrtcController>> crtcs; |
+ for (HardwareDisplayPlane* plane : plane_list->plane_list) { |
+ HardwareDisplayPlaneAtomic* atomic_plane = |
+ static_cast<HardwareDisplayPlaneAtomic*>(plane); |
+ if (crtcs.empty() || crtcs.back().get() != atomic_plane->crtc()) |
+ crtcs.push_back(atomic_plane->crtc()->AsWeakPtr()); |
+ } |
+ |
plane_list->plane_list.swap(plane_list->old_plane_list); |
plane_list->plane_list.clear(); |
if (!drm_->CommitProperties(plane_list->atomic_property_set.get(), 0, is_sync, |
- base::Bind(&AtomicPageFlipCallback))) { |
+ base::Bind(&AtomicPageFlipCallback, crtcs))) { |
PLOG(ERROR) << "Failed to commit properties"; |
return false; |
} |
+ plane_list->committed = true; |
return true; |
} |
-bool HardwareDisplayPlaneManagerAtomic::AssignOverlayPlanes( |
- HardwareDisplayPlaneList* plane_list, |
- const OverlayPlaneList& overlay_list, |
- uint32_t crtc_id, |
- CrtcController* crtc) { |
- // Lazy-initialize the atomic property set. |
- if (!plane_list->atomic_property_set) |
- plane_list->atomic_property_set.reset(drmModePropertySetAlloc()); |
- return HardwareDisplayPlaneManager::AssignOverlayPlanes( |
- plane_list, overlay_list, crtc_id, crtc); |
-} |
- |
bool HardwareDisplayPlaneManagerAtomic::SetPlaneData( |
HardwareDisplayPlaneList* plane_list, |
HardwareDisplayPlane* hw_plane, |
@@ -76,7 +81,7 @@ bool HardwareDisplayPlaneManagerAtomic::SetPlaneData( |
LOG(ERROR) << "Failed to set plane properties"; |
return false; |
} |
- plane_list->plane_list.push_back(hw_plane); |
+ atomic_plane->set_crtc(crtc); |
return true; |
} |