| Index: ui/ozone/platform/dri/hardware_display_controller.cc
|
| diff --git a/ui/ozone/platform/dri/hardware_display_controller.cc b/ui/ozone/platform/dri/hardware_display_controller.cc
|
| index 342b4502885ee294b15e7a0c0de7b97ee0a4ec0c..4befd8fa80128740814f37ece9816ce97a8e59f1 100644
|
| --- a/ui/ozone/platform/dri/hardware_display_controller.cc
|
| +++ b/ui/ozone/platform/dri/hardware_display_controller.cc
|
| @@ -82,6 +82,7 @@ HardwareDisplayController::HardwareDisplayController(
|
| DriWrapper* drm,
|
| scoped_ptr<CrtcState> state)
|
| : drm_(drm),
|
| + is_disabled_(true),
|
| time_of_last_flip_(0),
|
| pending_page_flips_(0) {
|
| crtc_states_.push_back(state.release());
|
| @@ -98,13 +99,16 @@ bool HardwareDisplayController::Modeset(const OverlayPlane& primary,
|
| DCHECK(primary.buffer);
|
| pending_page_flips_ = 0;
|
| bool status = true;
|
| - for (size_t i = 0; i < crtc_states_.size(); ++i)
|
| + for (size_t i = 0; i < crtc_states_.size(); ++i) {
|
| status &= ModesetCrtc(primary.buffer, mode, crtc_states_[i]);
|
| + crtc_states_[i]->set_is_disabled(false);
|
| + }
|
|
|
| // Since a subset of controllers may be actively using |primary|, just keep
|
| // track of it.
|
| current_planes_ = std::vector<OverlayPlane>(1, primary);
|
| pending_planes_.clear();
|
| + is_disabled_ = false;
|
| mode_ = mode;
|
| return status;
|
| }
|
| @@ -129,6 +133,8 @@ void HardwareDisplayController::Disable() {
|
| drm_->DisableCrtc(crtc_states_[i]->crtc());
|
| crtc_states_[i]->set_is_disabled(true);
|
| }
|
| +
|
| + is_disabled_ = true;
|
| }
|
|
|
| void HardwareDisplayController::QueueOverlayPlane(const OverlayPlane& plane) {
|
| @@ -139,13 +145,12 @@ bool HardwareDisplayController::SchedulePageFlip() {
|
| DCHECK(!pending_planes_.empty());
|
| DCHECK_EQ(0u, pending_page_flips_);
|
|
|
| - bool status = true;
|
| - for (size_t i = 0; i < crtc_states_.size(); ++i) {
|
| - if (crtc_states_[i]->is_disabled())
|
| - continue;
|
| + if (is_disabled_)
|
| + return true;
|
|
|
| + bool status = true;
|
| + for (size_t i = 0; i < crtc_states_.size(); ++i)
|
| status &= SchedulePageFlipOnCrtc(pending_planes_, crtc_states_[i]);
|
| - }
|
|
|
| return status;
|
| }
|
| @@ -186,11 +191,13 @@ void HardwareDisplayController::OnPageFlipEvent(unsigned int frame,
|
| bool HardwareDisplayController::SetCursor(scoped_refptr<ScanoutBuffer> buffer) {
|
| bool status = true;
|
| cursor_buffer_ = buffer;
|
| +
|
| + if (is_disabled_)
|
| + return true;
|
| +
|
| for (size_t i = 0; i < crtc_states_.size(); ++i) {
|
| - if (!crtc_states_[i]->is_disabled())
|
| - status &= drm_->SetCursor(crtc_states_[i]->crtc(),
|
| - buffer->GetHandle(),
|
| - buffer->GetSize());
|
| + status &= drm_->SetCursor(
|
| + crtc_states_[i]->crtc(), buffer->GetHandle(), buffer->GetSize());
|
| }
|
|
|
| return status;
|
| @@ -206,10 +213,12 @@ bool HardwareDisplayController::UnsetCursor() {
|
| }
|
|
|
| bool HardwareDisplayController::MoveCursor(const gfx::Point& location) {
|
| + if (is_disabled_)
|
| + return true;
|
| +
|
| bool status = true;
|
| for (size_t i = 0; i < crtc_states_.size(); ++i)
|
| - if (!crtc_states_[i]->is_disabled())
|
| - status &= drm_->MoveCursor(crtc_states_[i]->crtc(), location);
|
| + status &= drm_->MoveCursor(crtc_states_[i]->crtc(), location);
|
|
|
| return status;
|
| }
|
| @@ -241,13 +250,12 @@ bool HardwareDisplayController::HasCrtc(uint32_t crtc) const {
|
| return false;
|
| }
|
|
|
| -bool HardwareDisplayController::HasCrtcs() const {
|
| - return !crtc_states_.empty();
|
| +bool HardwareDisplayController::IsMirrored() const {
|
| + return crtc_states_.size() > 1;
|
| }
|
|
|
| -void HardwareDisplayController::RemoveMirroredCrtcs() {
|
| - if (crtc_states_.size() > 1)
|
| - crtc_states_.erase(crtc_states_.begin() + 1, crtc_states_.end());
|
| +bool HardwareDisplayController::IsDisabled() const {
|
| + return is_disabled_;
|
| }
|
|
|
| bool HardwareDisplayController::ModesetCrtc(
|
| @@ -267,7 +275,6 @@ bool HardwareDisplayController::ModesetCrtc(
|
| return false;
|
| }
|
|
|
| - state->set_is_disabled(false);
|
| return true;
|
| }
|
|
|
|
|