Chromium Code Reviews| Index: ui/ozone/platform/dri/dri_gpu_platform_support.cc |
| diff --git a/ui/ozone/platform/dri/dri_gpu_platform_support.cc b/ui/ozone/platform/dri/dri_gpu_platform_support.cc |
| index 010ef8c44ee5b81017901ccd2d1c68ebc3d1553d..c4f01c1d518579e9a9e5dc28de6c6636d0638c43 100644 |
| --- a/ui/ozone/platform/dri/dri_gpu_platform_support.cc |
| +++ b/ui/ozone/platform/dri/dri_gpu_platform_support.cc |
| @@ -16,6 +16,7 @@ |
| #include "ui/ozone/platform/dri/dri_window_delegate_impl.h" |
| #include "ui/ozone/platform/dri/dri_window_delegate_manager.h" |
| #include "ui/ozone/platform/dri/dri_wrapper.h" |
| +#include "ui/ozone/platform/dri/dri_wrapper_generator.h" |
| #include "ui/ozone/platform/dri/native_display_delegate_dri.h" |
| #include "ui/ozone/public/ozone_switches.h" |
| @@ -173,14 +174,16 @@ DriGpuPlatformSupport::DriGpuPlatformSupport( |
| DrmDeviceManager* drm_device_manager, |
| DriWindowDelegateManager* window_manager, |
| ScreenManager* screen_manager, |
| - scoped_ptr<NativeDisplayDelegateDri> ndd) |
| + scoped_ptr<NativeDisplayDelegateDri> ndd, |
| + scoped_ptr<DriWrapperGenerator> wrapper_generator) |
| : sender_(NULL), |
| - drm_(drm), |
| drm_device_manager_(drm_device_manager), |
| window_manager_(window_manager), |
| screen_manager_(screen_manager), |
| - ndd_(ndd.Pass()) { |
| - ndd_->AddGraphicsDevice(drm_); |
| + ndd_(ndd.Pass()), |
| + wrapper_generator_(wrapper_generator.Pass()) { |
| + wrappers_[drm->device_path()] = drm; |
| + ndd_->AddGraphicsDevice(drm); |
|
spang
2015/02/11 21:13:21
Why are the open devices tracked both in DriGpuPla
dnicoara
2015/02/11 22:21:14
Just to have the list handy for the operations. Wo
spang
2015/02/11 22:47:56
It's more than just dropping inheritance. We also
spang
2015/02/11 22:52:54
I would ideally hope these configuration tasks wou
dnicoara
2015/02/11 23:04:40
I'm sorry, I was too vague. The only configuration
spang
2015/02/11 23:11:55
There's plenty of business logic for display confi
|
| filter_ = new DriGpuPlatformSupportMessageFilter( |
| window_manager, base::Bind(&DriGpuPlatformSupport::SetIOTaskRunner, |
| base::Unretained(this)), |
| @@ -347,12 +350,34 @@ void DriGpuPlatformSupport::OnRelinquishDisplayControl() { |
| ndd_->RelinquishDisplayControl(); |
| } |
| -void DriGpuPlatformSupport::OnAddGraphicsDevice(const base::FilePath& path) { |
| - NOTIMPLEMENTED(); |
| +void DriGpuPlatformSupport::OnAddGraphicsDevice( |
| + const base::FilePath& path, |
| + const base::FileDescriptor& fd) { |
| + base::File file(fd.fd); |
| + auto it = wrappers_.find(path); |
| + // Device already registered. |
| + if (it != wrappers_.end()) |
| + return; |
| + |
| + scoped_refptr<DriWrapper> wrapper = |
| + wrapper_generator_->CreateWrapper(path, file.Pass()); |
| + wrappers_[path] = wrapper; |
| + if (io_task_runner_) |
| + wrapper->InitializeTaskRunner(io_task_runner_); |
| + |
| + ndd_->AddGraphicsDevice(wrapper); |
| } |
| void DriGpuPlatformSupport::OnRemoveGraphicsDevice(const base::FilePath& path) { |
| - NOTIMPLEMENTED(); |
| + auto it = wrappers_.find(path); |
| + if (it == wrappers_.end()) { |
| + LOG(ERROR) << "Got message to remove non-existent device '" << path.value() |
| + << "'"; |
| + return; |
| + } |
| + |
| + ndd_->RemoveGraphicsDevice(it->second); |
| + wrappers_.erase(it); |
| } |
| void DriGpuPlatformSupport::RelinquishGpuResources( |
| @@ -366,7 +391,8 @@ void DriGpuPlatformSupport::SetIOTaskRunner( |
| base::CommandLine* cmd = base::CommandLine::ForCurrentProcess(); |
| // Only surfaceless path supports async page flips. |
| if (cmd->HasSwitch(switches::kOzoneUseSurfaceless)) { |
| - drm_->InitializeTaskRunner(io_task_runner_); |
| + for (const auto& pair : wrappers_) |
| + pair.second->InitializeTaskRunner(io_task_runner_); |
| } |
| } |