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

Unified Diff: ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc

Issue 1147553003: ozone: Add atomic initialization path (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove flag for now Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698