diff options
author | achaulk <achaulk@chromium.org> | 2015-05-14 13:26:35 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-14 20:27:01 +0000 |
commit | d6f9a4e6ed27e57f91bb0ddcf30a2cc96ddb198d (patch) | |
tree | 0295f86305ec83408994f10b6b4fe8070e061c80 | |
parent | c747af5900eb7adfcae2a4038b0fc52c413a0a1d (diff) | |
download | chromium_src-d6f9a4e6ed27e57f91bb0ddcf30a2cc96ddb198d.zip chromium_src-d6f9a4e6ed27e57f91bb0ddcf30a2cc96ddb198d.tar.gz chromium_src-d6f9a4e6ed27e57f91bb0ddcf30a2cc96ddb198d.tar.bz2 |
ozone: Add sync flag for atomic commit and page flip event handling
Committed: https://crrev.com/f7553583492a8ea9a54d75cd6b2d3dd83c94512c
Cr-Commit-Position: refs/heads/master@{#326863}
Review URL: https://codereview.chromium.org/1099713005
Cr-Commit-Position: refs/heads/master@{#329919}
-rw-r--r-- | ui/ozone/platform/drm/gpu/drm_device.cc | 20 | ||||
-rw-r--r-- | ui/ozone/platform/drm/gpu/drm_device.h | 1 | ||||
-rw-r--r-- | ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.cc | 2 | ||||
-rw-r--r-- | ui/ozone/platform/drm/test/mock_drm_device.cc | 1 | ||||
-rw-r--r-- | ui/ozone/platform/drm/test/mock_drm_device.h | 1 |
5 files changed, 19 insertions, 6 deletions
diff --git a/ui/ozone/platform/drm/gpu/drm_device.cc b/ui/ozone/platform/drm/gpu/drm_device.cc index cb5f6c0..6916443 100644 --- a/ui/ozone/platform/drm/gpu/drm_device.cc +++ b/ui/ozone/platform/drm/gpu/drm_device.cc @@ -559,20 +559,30 @@ bool DrmDevice::CloseBufferHandle(uint32_t handle) { bool DrmDevice::CommitProperties(drmModePropertySet* properties, uint32_t flags, + bool is_sync, 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 successful the payload will be removed by the event - ignore_result(payload.release()); + page_flip_manager_->RegisterCallback(id, callback); + + // If the flip was requested synchronous or if no watcher has been installed + // yet, then synchronously handle the page flip events. + if (is_sync || !watcher_) { + TRACE_EVENT1("drm", "OnDrmEvent", "socket", file_.GetPlatformFile()); + + ProcessDrmEvent( + file_.GetPlatformFile(), + base::Bind(&PageFlipManager::OnPageFlip, page_flip_manager_)); + } return true; } - return false; -#else - return false; #endif // defined(USE_DRM_ATOMIC) + return false; } bool DrmDevice::SetCapability(uint64_t capability, uint64_t value) { diff --git a/ui/ozone/platform/drm/gpu/drm_device.h b/ui/ozone/platform/drm/gpu/drm_device.h index 0919bc1..2af2d8d 100644 --- a/ui/ozone/platform/drm/gpu/drm_device.h +++ b/ui/ozone/platform/drm/gpu/drm_device.h @@ -159,6 +159,7 @@ class OZONE_EXPORT DrmDevice : public base::RefCountedThreadSafe<DrmDevice> { virtual bool CommitProperties(drmModePropertySet* properties, uint32_t flags, + bool is_sync, const PageFlipCallback& callback); // Set the gamma ramp for |crtc_id| to reflect the ramps in |lut|. 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 5a7eae3..793db8f 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 @@ -41,7 +41,7 @@ bool HardwareDisplayPlaneManagerAtomic::Commit( 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, + if (!drm_->CommitProperties(plane_list->atomic_property_set.get(), 0, is_sync, base::Bind(&AtomicPageFlipCallback))) { PLOG(ERROR) << "Failed to commit properties"; return false; diff --git a/ui/ozone/platform/drm/test/mock_drm_device.cc b/ui/ozone/platform/drm/test/mock_drm_device.cc index e35ff5a..39d7e39a 100644 --- a/ui/ozone/platform/drm/test/mock_drm_device.cc +++ b/ui/ozone/platform/drm/test/mock_drm_device.cc @@ -236,6 +236,7 @@ bool MockDrmDevice::CloseBufferHandle(uint32_t handle) { bool MockDrmDevice::CommitProperties(drmModePropertySet* properties, uint32_t flags, + bool is_sync, const PageFlipCallback& callback) { return false; } diff --git a/ui/ozone/platform/drm/test/mock_drm_device.h b/ui/ozone/platform/drm/test/mock_drm_device.h index ec29cf5..ed50709 100644 --- a/ui/ozone/platform/drm/test/mock_drm_device.h +++ b/ui/ozone/platform/drm/test/mock_drm_device.h @@ -108,6 +108,7 @@ class MockDrmDevice : public ui::DrmDevice { bool CloseBufferHandle(uint32_t handle) override; bool CommitProperties(drmModePropertySet* properties, uint32_t flags, + bool is_sync, const PageFlipCallback& callback) override; bool SetGammaRamp(uint32_t crtc_id, const std::vector<GammaRampRGBEntry>& lut) override; |