Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ui / ozone / platform / dri / hardware_display_controller.cc
index 342b450..7d41188 100644 (file)
@@ -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());
@@ -95,16 +96,19 @@ HardwareDisplayController::~HardwareDisplayController() {
 bool HardwareDisplayController::Modeset(const OverlayPlane& primary,
                                         drmModeModeInfo mode) {
   TRACE_EVENT0("dri", "HDC::Modeset");
-  DCHECK(primary.buffer);
+  DCHECK(primary.buffer.get());
   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;
 }
@@ -113,7 +117,7 @@ bool HardwareDisplayController::Enable() {
   TRACE_EVENT0("dri", "HDC::Enable");
   DCHECK(!current_planes_.empty());
   OverlayPlane primary = GetPrimaryPlane(current_planes_);
-  DCHECK(primary.buffer);
+  DCHECK(primary.buffer.get());
   pending_page_flips_ = 0;
   bool status = true;
   for (size_t i = 0; i < crtc_states_.size(); ++i)
@@ -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,16 @@ 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;
+}
+
+bool HardwareDisplayController::IsDisabled() const {
+  return is_disabled_;
 }
 
-void HardwareDisplayController::RemoveMirroredCrtcs() {
-  if (crtc_states_.size() > 1)
-    crtc_states_.erase(crtc_states_.begin() + 1, crtc_states_.end());
+gfx::Size HardwareDisplayController::GetModeSize() const {
+  return gfx::Size(mode_.hdisplay, mode_.vdisplay);
 }
 
 bool HardwareDisplayController::ModesetCrtc(
@@ -267,7 +279,6 @@ bool HardwareDisplayController::ModesetCrtc(
     return false;
   }
 
-  state->set_is_disabled(false);
   return true;
 }
 
@@ -275,7 +286,7 @@ bool HardwareDisplayController::SchedulePageFlipOnCrtc(
     const OverlayPlaneList& overlays,
     CrtcState* state) {
   const OverlayPlane& primary = GetPrimaryPlane(overlays);
-  DCHECK(primary.buffer);
+  DCHECK(primary.buffer.get());
 
   if (primary.buffer->GetSize() != gfx::Size(mode_.hdisplay, mode_.vdisplay)) {
     LOG(WARNING) << "Trying to pageflip a buffer with the wrong size. Expected "