OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/ozone/platform/dri/dri_gpu_platform_support.h" | 5 #include "ui/ozone/platform/dri/dri_gpu_platform_support.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
10 #include "ipc/ipc_message_macros.h" | 10 #include "ipc/ipc_message_macros.h" |
11 #include "ui/display/types/display_mode.h" | 11 #include "ui/display/types/display_mode.h" |
12 #include "ui/display/types/display_snapshot.h" | 12 #include "ui/display/types/display_snapshot.h" |
13 #include "ui/ozone/common/display_util.h" | 13 #include "ui/ozone/common/display_util.h" |
14 #include "ui/ozone/common/gpu/ozone_gpu_message_params.h" | 14 #include "ui/ozone/common/gpu/ozone_gpu_message_params.h" |
15 #include "ui/ozone/common/gpu/ozone_gpu_messages.h" | 15 #include "ui/ozone/common/gpu/ozone_gpu_messages.h" |
16 #include "ui/ozone/platform/dri/dri_window_delegate_impl.h" | 16 #include "ui/ozone/platform/dri/dri_window_delegate_impl.h" |
17 #include "ui/ozone/platform/dri/dri_window_delegate_manager.h" | 17 #include "ui/ozone/platform/dri/dri_window_delegate_manager.h" |
18 #include "ui/ozone/platform/dri/dri_wrapper.h" | 18 #include "ui/ozone/platform/dri/dri_wrapper.h" |
19 #include "ui/ozone/platform/dri/dri_wrapper_generator.h" | |
19 #include "ui/ozone/platform/dri/native_display_delegate_dri.h" | 20 #include "ui/ozone/platform/dri/native_display_delegate_dri.h" |
20 #include "ui/ozone/public/ozone_switches.h" | 21 #include "ui/ozone/public/ozone_switches.h" |
21 | 22 |
22 namespace ui { | 23 namespace ui { |
23 | 24 |
24 namespace { | 25 namespace { |
25 | 26 |
26 void MessageProcessedOnMain( | 27 void MessageProcessedOnMain( |
27 scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner, | 28 scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner, |
28 const base::Closure& io_thread_task) { | 29 const base::Closure& io_thread_task) { |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
166 int32 pending_main_thread_operations_; | 167 int32 pending_main_thread_operations_; |
167 bool cursor_animating_; | 168 bool cursor_animating_; |
168 }; | 169 }; |
169 } | 170 } |
170 | 171 |
171 DriGpuPlatformSupport::DriGpuPlatformSupport( | 172 DriGpuPlatformSupport::DriGpuPlatformSupport( |
172 const scoped_refptr<DriWrapper>& drm, | 173 const scoped_refptr<DriWrapper>& drm, |
173 DrmDeviceManager* drm_device_manager, | 174 DrmDeviceManager* drm_device_manager, |
174 DriWindowDelegateManager* window_manager, | 175 DriWindowDelegateManager* window_manager, |
175 ScreenManager* screen_manager, | 176 ScreenManager* screen_manager, |
176 scoped_ptr<NativeDisplayDelegateDri> ndd) | 177 scoped_ptr<NativeDisplayDelegateDri> ndd, |
178 scoped_ptr<DriWrapperGenerator> wrapper_generator) | |
177 : sender_(NULL), | 179 : sender_(NULL), |
178 drm_(drm), | |
179 drm_device_manager_(drm_device_manager), | 180 drm_device_manager_(drm_device_manager), |
180 window_manager_(window_manager), | 181 window_manager_(window_manager), |
181 screen_manager_(screen_manager), | 182 screen_manager_(screen_manager), |
182 ndd_(ndd.Pass()) { | 183 ndd_(ndd.Pass()), |
183 ndd_->AddGraphicsDevice(drm_); | 184 wrapper_generator_(wrapper_generator.Pass()) { |
185 wrappers_[drm->device_path()] = drm; | |
186 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
| |
184 filter_ = new DriGpuPlatformSupportMessageFilter( | 187 filter_ = new DriGpuPlatformSupportMessageFilter( |
185 window_manager, base::Bind(&DriGpuPlatformSupport::SetIOTaskRunner, | 188 window_manager, base::Bind(&DriGpuPlatformSupport::SetIOTaskRunner, |
186 base::Unretained(this)), | 189 base::Unretained(this)), |
187 this); | 190 this); |
188 } | 191 } |
189 | 192 |
190 DriGpuPlatformSupport::~DriGpuPlatformSupport() { | 193 DriGpuPlatformSupport::~DriGpuPlatformSupport() { |
191 } | 194 } |
192 | 195 |
193 void DriGpuPlatformSupport::AddHandler(scoped_ptr<GpuPlatformSupport> handler) { | 196 void DriGpuPlatformSupport::AddHandler(scoped_ptr<GpuPlatformSupport> handler) { |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
340 } | 343 } |
341 | 344 |
342 void DriGpuPlatformSupport::OnTakeDisplayControl() { | 345 void DriGpuPlatformSupport::OnTakeDisplayControl() { |
343 ndd_->TakeDisplayControl(); | 346 ndd_->TakeDisplayControl(); |
344 } | 347 } |
345 | 348 |
346 void DriGpuPlatformSupport::OnRelinquishDisplayControl() { | 349 void DriGpuPlatformSupport::OnRelinquishDisplayControl() { |
347 ndd_->RelinquishDisplayControl(); | 350 ndd_->RelinquishDisplayControl(); |
348 } | 351 } |
349 | 352 |
350 void DriGpuPlatformSupport::OnAddGraphicsDevice(const base::FilePath& path) { | 353 void DriGpuPlatformSupport::OnAddGraphicsDevice( |
351 NOTIMPLEMENTED(); | 354 const base::FilePath& path, |
355 const base::FileDescriptor& fd) { | |
356 base::File file(fd.fd); | |
357 auto it = wrappers_.find(path); | |
358 // Device already registered. | |
359 if (it != wrappers_.end()) | |
360 return; | |
361 | |
362 scoped_refptr<DriWrapper> wrapper = | |
363 wrapper_generator_->CreateWrapper(path, file.Pass()); | |
364 wrappers_[path] = wrapper; | |
365 if (io_task_runner_) | |
366 wrapper->InitializeTaskRunner(io_task_runner_); | |
367 | |
368 ndd_->AddGraphicsDevice(wrapper); | |
352 } | 369 } |
353 | 370 |
354 void DriGpuPlatformSupport::OnRemoveGraphicsDevice(const base::FilePath& path) { | 371 void DriGpuPlatformSupport::OnRemoveGraphicsDevice(const base::FilePath& path) { |
355 NOTIMPLEMENTED(); | 372 auto it = wrappers_.find(path); |
373 if (it == wrappers_.end()) { | |
374 LOG(ERROR) << "Got message to remove non-existent device '" << path.value() | |
375 << "'"; | |
376 return; | |
377 } | |
378 | |
379 ndd_->RemoveGraphicsDevice(it->second); | |
380 wrappers_.erase(it); | |
356 } | 381 } |
357 | 382 |
358 void DriGpuPlatformSupport::RelinquishGpuResources( | 383 void DriGpuPlatformSupport::RelinquishGpuResources( |
359 const base::Closure& callback) { | 384 const base::Closure& callback) { |
360 callback.Run(); | 385 callback.Run(); |
361 } | 386 } |
362 | 387 |
363 void DriGpuPlatformSupport::SetIOTaskRunner( | 388 void DriGpuPlatformSupport::SetIOTaskRunner( |
364 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) { | 389 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) { |
365 io_task_runner_ = io_task_runner; | 390 io_task_runner_ = io_task_runner; |
366 base::CommandLine* cmd = base::CommandLine::ForCurrentProcess(); | 391 base::CommandLine* cmd = base::CommandLine::ForCurrentProcess(); |
367 // Only surfaceless path supports async page flips. | 392 // Only surfaceless path supports async page flips. |
368 if (cmd->HasSwitch(switches::kOzoneUseSurfaceless)) { | 393 if (cmd->HasSwitch(switches::kOzoneUseSurfaceless)) { |
369 drm_->InitializeTaskRunner(io_task_runner_); | 394 for (const auto& pair : wrappers_) |
395 pair.second->InitializeTaskRunner(io_task_runner_); | |
370 } | 396 } |
371 } | 397 } |
372 | 398 |
373 IPC::MessageFilter* DriGpuPlatformSupport::GetMessageFilter() { | 399 IPC::MessageFilter* DriGpuPlatformSupport::GetMessageFilter() { |
374 return filter_.get(); | 400 return filter_.get(); |
375 } | 401 } |
376 | 402 |
377 } // namespace ui | 403 } // namespace ui |
OLD | NEW |