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

Unified Diff: ui/ozone/platform/drm/gpu/drm_device.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/drm_device.cc
diff --git a/ui/ozone/platform/drm/gpu/drm_device.cc b/ui/ozone/platform/drm/gpu/drm_device.cc
index 69164431c257ea089585881872abb57d643c85fd..76c19967c9539ba747d04a4261e591531c6ce280 100644
--- a/ui/ozone/platform/drm/gpu/drm_device.cc
+++ b/ui/ozone/platform/drm/gpu/drm_device.cc
@@ -290,7 +290,7 @@ DrmDevice::~DrmDevice() {
watcher_->Shutdown();
}
-bool DrmDevice::Initialize() {
+bool DrmDevice::Initialize(bool use_atomic) {
// Ignore devices that cannot perform modesetting.
if (!CanQueryForResources(file_.GetPlatformFile())) {
VLOG(2) << "Cannot query for resources for '" << device_path_.value()
@@ -299,10 +299,13 @@ bool DrmDevice::Initialize() {
}
#if defined(USE_DRM_ATOMIC)
- plane_manager_.reset(new HardwareDisplayPlaneManagerAtomic());
-#else
- plane_manager_.reset(new HardwareDisplayPlaneManagerLegacy());
+ // Use atomic only if the build, kernel & flags all allow it.
+ if (use_atomic && SetCapability(DRM_CLIENT_CAP_ATOMIC, 1))
+ plane_manager_.reset(new HardwareDisplayPlaneManagerAtomic());
#endif // defined(USE_DRM_ATOMIC)
+
+ if (!plane_manager_)
+ plane_manager_.reset(new HardwareDisplayPlaneManagerLegacy());
if (!plane_manager_->Initialize(this)) {
LOG(ERROR) << "Failed to initialize the plane manager for "
<< device_path_.value();
@@ -563,11 +566,9 @@ bool DrmDevice::CommitProperties(drmModePropertySet* properties,
const PageFlipCallback& callback) {
#if defined(USE_DRM_ATOMIC)
flags |= DRM_MODE_PAGE_FLIP_EVENT;
- scoped_ptr<PageFlipPayload> payload(
- new PageFlipPayload(base::ThreadTaskRunnerHandle::Get(), callback));
uint64_t id = page_flip_manager_->GetNextId();
- if (!drmModePropertySetCommit(file_.GetPlatformFile(), flags, payload.get(),
- properties)) {
+ if (!drmModePropertySetCommit(file_.GetPlatformFile(), flags,
+ reinterpret_cast<void*>(id), properties)) {
page_flip_manager_->RegisterCallback(id, callback);
// If the flip was requested synchronous or if no watcher has been installed

Powered by Google App Engine
This is Rietveld 408576698