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

Unified Diff: ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc

Issue 1100973002: [2/4]Allow hotplugging of primary DRM device (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix-hotplug
Patch Set: unittests Created 5 years, 8 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/drm/gpu/drm_gpu_display_manager.cc
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
index 526b200513f1d57203370d665b1be79070f14a63..1214d7d0c199566945fe139f4e2ebbbc0910ab61 100644
--- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc
@@ -13,7 +13,7 @@
#include "ui/events/ozone/device/device_event.h"
#include "ui/ozone/common/display_util.h"
#include "ui/ozone/platform/drm/gpu/drm_device.h"
-#include "ui/ozone/platform/drm/gpu/drm_device_generator.h"
+#include "ui/ozone/platform/drm/gpu/drm_device_manager.h"
#include "ui/ozone/platform/drm/gpu/drm_display_mode.h"
#include "ui/ozone/platform/drm/gpu/drm_display_snapshot.h"
#include "ui/ozone/platform/drm/gpu/drm_util.h"
@@ -77,18 +77,6 @@ class DisplaySnapshotComparator {
uint32_t connector_;
};
-class FindByDevicePath {
- public:
- explicit FindByDevicePath(const base::FilePath& path) : path_(path) {}
-
- bool operator()(const scoped_refptr<DrmDevice>& device) {
- return device->device_path() == path_;
- }
-
- private:
- base::FilePath path_;
-};
-
std::string GetEnumNameForProperty(drmModeConnector* connector,
drmModePropertyRes* property) {
for (int prop_idx = 0; prop_idx < connector->count_props; ++prop_idx) {
@@ -108,31 +96,14 @@ std::string GetEnumNameForProperty(drmModeConnector* connector,
} // namespace
-DrmGpuDisplayManager::DrmGpuDisplayManager(
- ScreenManager* screen_manager,
- const scoped_refptr<DrmDevice>& primary_device,
- scoped_ptr<DrmDeviceGenerator> drm_device_generator)
- : screen_manager_(screen_manager),
- drm_device_generator_(drm_device_generator.Pass()) {
- devices_.push_back(primary_device);
+DrmGpuDisplayManager::DrmGpuDisplayManager(ScreenManager* screen_manager,
+ DrmDeviceManager* drm_device_manager)
+ : screen_manager_(screen_manager), drm_device_manager_(drm_device_manager) {
}
DrmGpuDisplayManager::~DrmGpuDisplayManager() {
}
-void DrmGpuDisplayManager::InitializeIOTaskRunner(
- const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
- DCHECK(!io_task_runner_);
- base::CommandLine* cmd = base::CommandLine::ForCurrentProcess();
- // If not surfaceless, there isn't support for async page flips.
- if (!cmd->HasSwitch(switches::kOzoneUseSurfaceless))
- return;
-
- io_task_runner_ = task_runner;
- for (const auto& device : devices_)
- device->InitializeTaskRunner(io_task_runner_);
-}
-
std::vector<DisplaySnapshot_Params> DrmGpuDisplayManager::GetDisplays() {
RefreshDisplayList();
@@ -200,7 +171,8 @@ bool DrmGpuDisplayManager::DisableDisplay(int64_t id) {
}
bool DrmGpuDisplayManager::TakeDisplayControl() {
- for (const auto& drm : devices_) {
+ const DrmDeviceVector& devices = drm_device_manager_->GetDrmDevices();
+ for (const auto& drm : devices) {
if (!drm->SetMaster()) {
LOG(ERROR) << "Failed to take control of the display";
return false;
@@ -210,7 +182,8 @@ bool DrmGpuDisplayManager::TakeDisplayControl() {
}
bool DrmGpuDisplayManager::RelinquishDisplayControl() {
- for (const auto& drm : devices_) {
+ const DrmDeviceVector& devices = drm_device_manager_->GetDrmDevices();
+ for (const auto& drm : devices) {
if (!drm->DropMaster()) {
LOG(ERROR) << "Failed to relinquish control of the display";
return false;
@@ -219,40 +192,6 @@ bool DrmGpuDisplayManager::RelinquishDisplayControl() {
return true;
}
-void DrmGpuDisplayManager::AddGraphicsDevice(const base::FilePath& path,
- const base::FileDescriptor& fd) {
- base::File file(fd.fd);
- auto it =
- std::find_if(devices_.begin(), devices_.end(), FindByDevicePath(path));
- if (it != devices_.end()) {
- VLOG(2) << "Got request to add existing device '" << path.value() << "'";
- return;
- }
-
- scoped_refptr<DrmDevice> device =
- drm_device_generator_->CreateDevice(path, file.Pass());
- if (!device) {
- VLOG(2) << "Could not initialize DRM device for '" << path.value() << "'";
- return;
- }
-
- devices_.push_back(device);
- if (io_task_runner_)
- device->InitializeTaskRunner(io_task_runner_);
-}
-
-void DrmGpuDisplayManager::RemoveGraphicsDevice(const base::FilePath& path) {
- auto it =
- std::find_if(devices_.begin(), devices_.end(), FindByDevicePath(path));
- if (it == devices_.end()) {
- VLOG(2) << "Got request to remove non-existent device '" << path.value()
- << "'";
- return;
- }
-
- devices_.erase(it);
-}
-
DrmDisplaySnapshot* DrmGpuDisplayManager::FindDisplaySnapshot(int64_t id) {
for (size_t i = 0; i < cached_displays_.size(); ++i)
if (cached_displays_[i]->display_id() == id)
@@ -278,7 +217,8 @@ void DrmGpuDisplayManager::RefreshDisplayList() {
ScopedVector<DrmDisplaySnapshot> old_displays(cached_displays_.Pass());
ScopedVector<const DisplayMode> old_modes(cached_modes_.Pass());
- for (const auto& drm : devices_) {
+ const DrmDeviceVector& devices = drm_device_manager_->GetDrmDevices();
+ for (const auto& drm : devices) {
ScopedVector<HardwareDisplayControllerInfo> displays =
GetAvailableDisplayControllerInfos(drm->get_fd());
for (size_t i = 0; i < displays.size(); ++i) {
« no previous file with comments | « ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h ('k') | ui/ozone/platform/drm/gpu/drm_gpu_platform_support.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698