OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "services/ui/common/gpu_service.h" | 5 #include "services/ui/common/gpu_service.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/singleton.h" | 8 #include "base/memory/singleton.h" |
9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 return g_gpu_service; | 82 return g_gpu_service; |
83 } | 83 } |
84 | 84 |
85 void GpuService::EstablishGpuChannel(const base::Closure& callback) { | 85 void GpuService::EstablishGpuChannel(const base::Closure& callback) { |
86 base::AutoLock auto_lock(lock_); | 86 base::AutoLock auto_lock(lock_); |
87 auto runner = base::ThreadTaskRunnerHandle::Get(); | 87 auto runner = base::ThreadTaskRunnerHandle::Get(); |
88 if (GetGpuChannelLocked()) { | 88 if (GetGpuChannelLocked()) { |
89 runner->PostTask(FROM_HERE, callback); | 89 runner->PostTask(FROM_HERE, callback); |
90 return; | 90 return; |
91 } | 91 } |
92 | 92 establish_callbacks_.push_back( |
93 base::Closure wrapper_callback = | 93 base::Bind(PostTask, runner, FROM_HERE, callback)); |
94 IsMainThread() ? callback | |
95 : base::Bind(PostTask, runner, FROM_HERE, callback); | |
96 establish_callbacks_.push_back(wrapper_callback); | |
97 | |
98 if (!is_establishing_) { | 94 if (!is_establishing_) { |
99 is_establishing_ = true; | 95 is_establishing_ = true; |
100 main_task_runner_->PostTask( | 96 main_task_runner_->PostTask( |
101 FROM_HERE, base::Bind(&GpuService::EstablishGpuChannelOnMainThread, | 97 FROM_HERE, base::Bind(&GpuService::EstablishGpuChannelOnMainThread, |
102 base::Unretained(this))); | 98 base::Unretained(this))); |
103 } | 99 } |
104 } | 100 } |
105 | 101 |
106 scoped_refptr<gpu::GpuChannelHost> GpuService::EstablishGpuChannelSync() { | 102 scoped_refptr<gpu::GpuChannelHost> GpuService::EstablishGpuChannelSync() { |
107 base::AutoLock auto_lock(lock_); | 103 base::AutoLock auto_lock(lock_); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 } | 208 } |
213 | 209 |
214 auto auto_lock = base::WrapUnique<base::AutoLock>( | 210 auto auto_lock = base::WrapUnique<base::AutoLock>( |
215 locked ? nullptr : new base::AutoLock(lock_)); | 211 locked ? nullptr : new base::AutoLock(lock_)); |
216 DCHECK(is_establishing_); | 212 DCHECK(is_establishing_); |
217 DCHECK(!gpu_channel_); | 213 DCHECK(!gpu_channel_); |
218 | 214 |
219 is_establishing_ = false; | 215 is_establishing_ = false; |
220 gpu_channel_ = gpu_channel; | 216 gpu_channel_ = gpu_channel; |
221 establishing_condition_.Broadcast(); | 217 establishing_condition_.Broadcast(); |
| 218 gpu_service_.reset(); |
222 | 219 |
223 for (const auto& i : establish_callbacks_) | 220 for (const auto& i : establish_callbacks_) |
224 i.Run(); | 221 i.Run(); |
225 establish_callbacks_.clear(); | 222 establish_callbacks_.clear(); |
226 gpu_service_.reset(); | |
227 } | 223 } |
228 | 224 |
229 bool GpuService::IsMainThread() { | 225 bool GpuService::IsMainThread() { |
230 return main_task_runner_->BelongsToCurrentThread(); | 226 return main_task_runner_->BelongsToCurrentThread(); |
231 } | 227 } |
232 | 228 |
233 scoped_refptr<base::SingleThreadTaskRunner> | 229 scoped_refptr<base::SingleThreadTaskRunner> |
234 GpuService::GetIOThreadTaskRunner() { | 230 GpuService::GetIOThreadTaskRunner() { |
235 return io_thread_.task_runner(); | 231 return io_thread_.task_runner(); |
236 } | 232 } |
(...skipping 11 matching lines...) Expand all Loading... |
248 MojoResult result = mojo::UnwrapSharedMemoryHandle( | 244 MojoResult result = mojo::UnwrapSharedMemoryHandle( |
249 std::move(handle), &platform_handle, &shared_memory_size, &readonly); | 245 std::move(handle), &platform_handle, &shared_memory_size, &readonly); |
250 if (result != MOJO_RESULT_OK) | 246 if (result != MOJO_RESULT_OK) |
251 return nullptr; | 247 return nullptr; |
252 DCHECK_EQ(shared_memory_size, size); | 248 DCHECK_EQ(shared_memory_size, size); |
253 | 249 |
254 return base::MakeUnique<base::SharedMemory>(platform_handle, readonly); | 250 return base::MakeUnique<base::SharedMemory>(platform_handle, readonly); |
255 } | 251 } |
256 | 252 |
257 } // namespace ui | 253 } // namespace ui |
OLD | NEW |