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

Unified Diff: ui/ozone/platform/dri/hardware_display_controller.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 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/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
deleted file mode 100644
index ee4e4a94626adf892b35a605a2b22e1ee7a540d2..0000000000000000000000000000000000000000
--- a/ui/ozone/platform/dri/hardware_display_controller.cc
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/ozone/platform/dri/hardware_display_controller.h"
-
-#include <drm.h>
-#include <errno.h>
-#include <string.h>
-#include <xf86drm.h>
-
-#include "base/basictypes.h"
-#include "base/debug/trace_event.h"
-#include "base/logging.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/gfx/geometry/point.h"
-#include "ui/gfx/geometry/size.h"
-#include "ui/ozone/platform/dri/crtc_controller.h"
-#include "ui/ozone/platform/dri/dri_buffer.h"
-#include "ui/ozone/platform/dri/dri_wrapper.h"
-#include "ui/ozone/public/native_pixmap.h"
-
-namespace ui {
-
-namespace {
-
-// DRM callback on page flip events. This callback is triggered after the
-// page flip has happened and the backbuffer is now the new frontbuffer
-// The old frontbuffer is no longer used by the hardware and can be used for
-// future draw operations.
-//
-// |device| will contain a reference to the |ScanoutSurface| object which
-// the event belongs to.
-//
-// TODO(dnicoara) When we have a FD handler for the DRM calls in the message
-// loop, we can move this function in the handler.
-void HandlePageFlipEvent(int fd,
- unsigned int frame,
- unsigned int seconds,
- unsigned int useconds,
- void* controller) {
- static_cast<CrtcController*>(controller)
- ->OnPageFlipEvent(frame, seconds, useconds);
-}
-
-} // namespace
-
-HardwareDisplayController::HardwareDisplayController(
- scoped_ptr<CrtcController> controller)
- : is_disabled_(true) {
- crtc_controllers_.push_back(controller.release());
-}
-
-HardwareDisplayController::~HardwareDisplayController() {
- // Reset the cursor.
- UnsetCursor();
-}
-
-bool HardwareDisplayController::Modeset(const OverlayPlane& primary,
- drmModeModeInfo mode) {
- TRACE_EVENT0("dri", "HDC::Modeset");
- DCHECK(primary.buffer.get());
- bool status = true;
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- status &= crtc_controllers_[i]->Modeset(primary, mode);
-
- current_planes_ = std::vector<OverlayPlane>(1, primary);
- pending_planes_.clear();
- is_disabled_ = false;
- mode_ = mode;
- return status;
-}
-
-bool HardwareDisplayController::Enable() {
- TRACE_EVENT0("dri", "HDC::Enable");
- DCHECK(!current_planes_.empty());
- OverlayPlane primary = OverlayPlane::GetPrimaryPlane(current_planes_);
- DCHECK(primary.buffer.get());
- bool status = true;
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- status &= crtc_controllers_[i]->Modeset(primary, mode_);
-
- return status;
-}
-
-void HardwareDisplayController::Disable() {
- TRACE_EVENT0("dri", "HDC::Disable");
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- crtc_controllers_[i]->Disable();
-
- is_disabled_ = true;
-}
-
-void HardwareDisplayController::QueueOverlayPlane(const OverlayPlane& plane) {
- pending_planes_.push_back(plane);
-}
-
-bool HardwareDisplayController::SchedulePageFlip() {
- DCHECK(!pending_planes_.empty());
-
- if (is_disabled_)
- return true;
-
- bool status = true;
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- status &= crtc_controllers_[i]->SchedulePageFlip(pending_planes_);
-
- return status;
-}
-
-void HardwareDisplayController::WaitForPageFlipEvent() {
- TRACE_EVENT0("dri", "HDC::WaitForPageFlipEvent");
-
- drmEventContext drm_event;
- drm_event.version = DRM_EVENT_CONTEXT_VERSION;
- drm_event.page_flip_handler = HandlePageFlipEvent;
- drm_event.vblank_handler = NULL;
-
- bool has_pending_page_flips = false;
- // Wait for the page-flips to complete.
- for (size_t i = 0; i < crtc_controllers_.size(); ++i) {
- // In mirror mode the page flip callbacks can happen in different order than
- // scheduled, so we need to make sure that the event for the current CRTC is
- // processed before moving to the next CRTC.
- while (crtc_controllers_[i]->page_flip_pending()) {
- has_pending_page_flips = true;
- crtc_controllers_[i]->drm()->HandleEvent(drm_event);
- }
- }
-
- // In case there are no pending pageflips do not replace the current planes
- // since they are still being used.
- if (has_pending_page_flips)
- current_planes_.swap(pending_planes_);
-
- pending_planes_.clear();
-}
-
-bool HardwareDisplayController::SetCursor(
- const scoped_refptr<ScanoutBuffer>& buffer) {
- bool status = true;
-
- if (is_disabled_)
- return true;
-
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- status &= crtc_controllers_[i]->SetCursor(buffer);
-
- return status;
-}
-
-bool HardwareDisplayController::UnsetCursor() {
- bool status = true;
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- status &= crtc_controllers_[i]->UnsetCursor();
-
- return status;
-}
-
-bool HardwareDisplayController::MoveCursor(const gfx::Point& location) {
- if (is_disabled_)
- return true;
-
- bool status = true;
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- status &= crtc_controllers_[i]->MoveCursor(location);
-
- return status;
-}
-
-void HardwareDisplayController::AddCrtc(scoped_ptr<CrtcController> controller) {
- crtc_controllers_.push_back(controller.release());
-}
-
-scoped_ptr<CrtcController> HardwareDisplayController::RemoveCrtc(
- uint32_t crtc) {
- for (ScopedVector<CrtcController>::iterator it = crtc_controllers_.begin();
- it != crtc_controllers_.end();
- ++it) {
- if ((*it)->crtc() == crtc) {
- scoped_ptr<CrtcController> controller(*it);
- crtc_controllers_.weak_erase(it);
- return controller.Pass();
- }
- }
-
- return scoped_ptr<CrtcController>();
-}
-
-bool HardwareDisplayController::HasCrtc(uint32_t crtc) const {
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- if (crtc_controllers_[i]->crtc() == crtc)
- return true;
-
- return false;
-}
-
-bool HardwareDisplayController::IsMirrored() const {
- return crtc_controllers_.size() > 1;
-}
-
-bool HardwareDisplayController::IsDisabled() const {
- return is_disabled_;
-}
-
-gfx::Size HardwareDisplayController::GetModeSize() const {
- return gfx::Size(mode_.hdisplay, mode_.vdisplay);
-}
-
-uint64_t HardwareDisplayController::GetTimeOfLastFlip() const {
- uint64_t time = 0;
- for (size_t i = 0; i < crtc_controllers_.size(); ++i)
- if (time < crtc_controllers_[i]->time_of_last_flip())
- time = crtc_controllers_[i]->time_of_last_flip();
-
- return time;
-}
-
-} // namespace ui
« no previous file with comments | « ui/ozone/platform/dri/hardware_display_controller.h ('k') | ui/ozone/platform/dri/hardware_display_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698