diff options
author | spang <spang@chromium.org> | 2015-04-15 08:18:26 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-15 15:19:13 +0000 |
commit | ee3db43d851c57a6f93bced7178797c0d73f8c84 (patch) | |
tree | b6073ab738bf8d56e7b2f87418cb14e45033f471 /ui/ozone | |
parent | bbc34a8a27f991478aae35e6d3ece9a4ea9964a6 (diff) | |
download | chromium_src-ee3db43d851c57a6f93bced7178797c0d73f8c84.zip chromium_src-ee3db43d851c57a6f93bced7178797c0d73f8c84.tar.gz chromium_src-ee3db43d851c57a6f93bced7178797c0d73f8c84.tar.bz2 |
ozone: drm: Restore cursor in CrtcController::Modeset
This re-sets the cursor after every mode change. It will ensure we
restore the cursor after returning from frecon.
BUG=471097
TEST=Ctrl-Alt-Forward in developer mode to activate frecon, then
Ctrl-Alt-Back to return to chrome. Cursor is shown.
Review URL: https://codereview.chromium.org/1085123002
Cr-Commit-Position: refs/heads/master@{#325243}
Diffstat (limited to 'ui/ozone')
-rw-r--r-- | ui/ozone/platform/drm/gpu/crtc_controller.cc | 33 | ||||
-rw-r--r-- | ui/ozone/platform/drm/gpu/crtc_controller.h | 3 | ||||
-rw-r--r-- | ui/ozone/platform/drm/gpu/hardware_display_controller.cc | 2 |
3 files changed, 28 insertions, 10 deletions
diff --git a/ui/ozone/platform/drm/gpu/crtc_controller.cc b/ui/ozone/platform/drm/gpu/crtc_controller.cc index e76db6d..ce7ab71 100644 --- a/ui/ozone/platform/drm/gpu/crtc_controller.cc +++ b/ui/ozone/platform/drm/gpu/crtc_controller.cc @@ -27,7 +27,7 @@ CrtcController::CrtcController(const scoped_refptr<DrmDevice>& drm, CrtcController::~CrtcController() { if (!is_disabled_) { drm_->SetCrtc(saved_crtc_.get(), std::vector<uint32_t>(1, connector_)); - UnsetCursor(); + SetCursor(nullptr); } } @@ -54,6 +54,9 @@ bool CrtcController::Modeset(const OverlayPlane& plane, drmModeModeInfo mode) { if (page_flip_pending_) pending_planes_ = current_planes_; + if (!ResetCursor()) + return false; + return true; } @@ -118,15 +121,10 @@ void CrtcController::OnPageFlipEvent(unsigned int frame, } bool CrtcController::SetCursor(const scoped_refptr<ScanoutBuffer>& buffer) { - DCHECK(!is_disabled_); + DCHECK(!is_disabled_ || !buffer); cursor_buffer_ = buffer; - return drm_->SetCursor(crtc_, buffer->GetHandle(), buffer->GetSize()); -} -bool CrtcController::UnsetCursor() { - bool state = drm_->SetCursor(crtc_, 0, gfx::Size()); - cursor_buffer_ = NULL; - return state; + return ResetCursor(); } bool CrtcController::MoveCursor(const gfx::Point& location) { @@ -142,4 +140,23 @@ void CrtcController::RemoveObserver(PageFlipObserver* observer) { observers_.RemoveObserver(observer); } +bool CrtcController::ResetCursor() { + uint32_t handle = 0; + gfx::Size size; + + if (cursor_buffer_) { + handle = cursor_buffer_->GetHandle(); + size = cursor_buffer_->GetSize(); + } + + bool status = drm_->SetCursor(crtc_, handle, size); + if (!status) { + PLOG(ERROR) << "drmModeSetCursor: device " << drm_->device_path().value() + << " crtc " << crtc_ << " handle " << handle << " size " + << size.ToString(); + } + + return status; +} + } // namespace ui diff --git a/ui/ozone/platform/drm/gpu/crtc_controller.h b/ui/ozone/platform/drm/gpu/crtc_controller.h index 29135dc..4404bfa 100644 --- a/ui/ozone/platform/drm/gpu/crtc_controller.h +++ b/ui/ozone/platform/drm/gpu/crtc_controller.h @@ -68,13 +68,14 @@ class OZONE_EXPORT CrtcController unsigned int useconds); bool SetCursor(const scoped_refptr<ScanoutBuffer>& buffer); - bool UnsetCursor(); bool MoveCursor(const gfx::Point& location); void AddObserver(PageFlipObserver* observer); void RemoveObserver(PageFlipObserver* observer); private: + bool ResetCursor(); + scoped_refptr<DrmDevice> drm_; HardwareDisplayPlaneManager* overlay_plane_manager_; // Not owned. diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc index 4371963..f9f08ea 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc @@ -136,7 +136,7 @@ bool HardwareDisplayController::SetCursor( bool HardwareDisplayController::UnsetCursor() { bool status = true; for (size_t i = 0; i < crtc_controllers_.size(); ++i) - status &= crtc_controllers_[i]->UnsetCursor(); + status &= crtc_controllers_[i]->SetCursor(nullptr); return status; } |